Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.
MS Excel 2003: busque el valor en la columna y copie la fila en la nueva hoja de trabajo para obtener todos los valores coincidentes
Este tutorial de Excel le muestra cómo escribir una macro para buscar valores en una columna y copiar filas coincidentes en una nueva hoja de cálculo en Excel 2003 y versiones anteriores (con capturas de pantalla e instrucciones paso a paso).
Pregunta: En Microsoft Excel 2003/XP/2000/97, ¿cómo escribo una macro que encuentra una cadena en una columna completa? Si encuentra esa cadena, ¿copiará la fila completa en una nueva hoja en el mismo archivo?
Por ejemplo,
La columna E contiene varias cadenas. Estoy buscando una celda en esta columna que diga “Buzón”. Cuando se encuentra la cadena “buzón”, la fila correspondiente debe copiarse en una hoja nueva.
R: Veamos un ejemplo.
Descargue la hoja de cálculo de Excel (que se muestra a continuación)
En nuestra hoja de cálculo, creamos un botón llamado “Cadena de búsqueda” en Sheet1.Cuando el usuario hace clic en este botón, una macro llama cadena de búsqueda se ejecutará. Esta macro buscará el valor en la columna E para “buzón”. Cuando la cadena “buzón” se encuentre en la columna E, la fila correspondiente se copiará en la Hoja2.
Cuando la macro esté completa, aparecerá el cuadro de mensaje anterior.
Si observa la Hoja2, puede ver que solo se ha copiado la fila donde la columna E contiene la cadena “buzón”.
Puede presionar Alt+F11 para ver el código VBA.
codigo macro
El código de la macro se ve así:
Sub SearchForString() Dim LSearchRow As Integer Dim LCopyToRow As Integer On Error GoTo Err_Execute 'Start search in row 4 LSearchRow = 4 'Start copying data to row 2 in Sheet2 (row counter variable) LCopyToRow = 2 While Len(Range("A" & CStr(LSearchRow)).Value) > 0 'If value in column E = "Mail Box", copy entire row to Sheet2 If Range("E" & CStr(LSearchRow)).Value = "Mail Box" Then 'Select row in Sheet1 to copy Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select Selection.Copy 'Paste row into Sheet2 in next row Sheets("Sheet2").Select Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select ActiveSheet.Paste 'Move counter to next row LCopyToRow = LCopyToRow + 1 'Go back to Sheet1 to continue searching Sheets("Sheet1").Select End If LSearchRow = LSearchRow + 1 Wend 'Position on cell A3 Application.CutCopyMode = False Range("A3").Select MsgBox "All matching data has been copied." Exit Sub Err_Execute: MsgBox "An error occurred." End Sub
propina: Esta macro solo encontrará filas en las que toda la celda coincida con los criterios de búsqueda, no el texto de la celda. En otras palabras, no encontrará filas donde parte de la celda coincida con los criterios de búsqueda. Si un usuario quiere buscar texto que coincida con parte de una celda, puede usar la función InStr en el código anterior:
y reemplazar:
If Range("E" & CStr(LSearchRow)).Value = "Mail Box" Then
y:
If InStr(1, Range("E" & CStr(LSearchRow)).Value, "Mail Box") > 0 Then