Macro para copiar filas que cumplan con una condición de una hoja a otra cuyo nombre sea esa condición

El escenario:

Tengo un libro de excel. En la Hoja1 hay > 30mil registros. Cuenta con 11 columnas. En la columna H esta el numero de cliente.

En la Hoja2 esta la lista de los números de cliente, aprox. 2007. Actualmente el libro ya tiene las 2007 hojas cada una nombrada con un numero de cliente perteneciente a la lista.

Requiero una macro para copiar todas las filas de la Hoja1 donde el numero de cliente sea "1" en la hoja que se llama "1", las filas donde el numero de cliente sea "2" en la hoja con nombre "2" y así sucesivamente.

La lista de números de cliente esta en la Hoja2 B2:B2008. Inicia en 0, pero no son secuenciales o sea que hay muchos brincos de numeración.

Respuesta
1

Me parece una barbaridad que tengas un libro con tantísimas hojas y con información redundante.

Si ya tienes todos los datos en una hoja registro, lo que yo haría es hacer un procedimiento, que cuando selecciones un número de cliente te abra otra hoja, y te MUESTRE ahí todos los datos de ese cliente, cuando selecciones otro, borra esa vista y te pone los de éste. Es decir tienes un libro con tres hojas -NO NECESITAS MÁS-: la de registro con todos los datos, la de lista de clientes y la de visualización. A lo mejor es que no he entendido bien tus necesidades pero yo creo que este sería el método.

Si te parece bien dímelo y te paso un ejemplo de código.

Hola Esteban, gracias por tu respuesta. La idea no es mía je je. Es un requerimiento. Inicialmente solicitaron que, se separara en diferentes archivos o que fuera en diferentes hojas. Así lo pidieron.

Ahora, me interesa la solución que mencionas. Si oudieras enviarme el código te lo agradecería. Saludos

Te mando esto a modo de ejemplo. Tu tienes que adecuarlo a tus datos y tu gusto.

Como ves es un libro con tres hojas

Ahora cuando seleccionas cualquier fila de la hoja clientes, te muestra todos los datos que hay de ese Cliente en la hoja "Registro"

el código tienes que pegarlo en la hoja clientes.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
f = Target.Row
nCliente = Cells(f, 1)
If nCliente = "" Then Exit Sub
Hoja3.Cells.ClearContents
Hoja3.Cells(1, 2) = "Cliente:"
Hoja3.Cells(1, 3) = Hoja2.Cells(f, 2)
Hoja3.Cells(1, 4) = "nº Cliente:"
Hoja3.Cells(1, 5) = Hoja2.Cells(f, 1)
fR = 2: fF = 3
With Sheets("Registro")
Do Until .Cells(fR, "D") = ""
If .Cells(fR, "D") = nCliente Then
For c = 1 To 5
Hoja3.Cells(fF, c) = .Cells(fR, c)
Next
fF = fF + 1
End If
fR = fR + 1
Loop
End With
Hoja3.Activate
End Sub

*******************

Si has seleccionado el cliente "3" te aparecerá en la hoja "Formulario" esto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas