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

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