Pegar cada registro de un listado "n" veces en diferentes hojas mediante macro

Tengo un un listado de nombres en la "Hoja 1" el cual depende de una tabla, por lo cual el rango del listado es variable.

El primer nombre siempre empieza en "B6" de la "Hoja 1" ese dato se debe pegar en la celda "C4" de la "Hoja 2" pero se debe repetir hacia abajo las veces que se determinen en la celda "C2" de la "Hoja 1" y hacer lo mismo con todos los datos del listado hasta que ya no encuentre .

Ej. Hoja 1

B6 ANA GOMEZ

B7 GIL

B8 mario sabina

C2 2

Hoja 2

C4 ANA GOMEZ

C5 ANA GOMEZ

C6 GIL

C7 GIL

C8 mario sabina

C9 mario sabina

El rango de la nombres puede cambiar como el numero de repeticiones que se basa en la celda C2 de la Hoja 1.

Antes que nada quisiera dar las gracias por el apoyo y que puedan darme ya que apenas estoy empezando con el tema de las macros.

1 respuesta

Respuesta
2

Entra al Editor de macros (con atajo ALT y F11)

Inserta un módulo y allí copia el siguiente código:

Sub insertandoFilas()
'x Elsamatilde
'hoja y fila destino
Set ho2 = Sheets("Hoja2")
fil2 = 4
'se recorre la col B desde fila 6 de hoja1
Sheets("Hoja1").Select
[B6].Select
'se recorre hasta encontrar celda vacía considerando fin de rango
While ActiveCell <> ""
    'se repite tantas veces como lo indica C2
    For i = 1 To [C2]
        ho2.Range("C" & fil2) = ActiveCell.Value
        fil2 = fil2 + 1
    Next i
    'pasa a la fila siguiente
    ActiveCell.Offset(1, 0).Select
'repite el bucle
Wend
MsgBox "Fin del proceso."
End Sub

Podrás ejecutarlo directamente desde el Editor o volver a la hoja y buscar la macro en menú Desarrollador (o Programador), Macros.

Otras opciones para ejecutar una rutina las tengo explicadas en la sección Macros de mi sitio.

Sdos y no olvides valorar la respuesta (con Excelente o buena).

Elsa

Muchas gracias por la pronta respuesta, hace precisamente lo que buscaba realizar.

Puedo pedir de su ayuda con una variación de esta macro?

He intentado modificar la macro para que en vez de pegar solo una celda lo haga con un rango, pero solo lo hace bien con el primer registro después me sigue copiando solo una celda hacia abajo. Así como el titulo del dato "Total general" de la ultima celda ya que es una tabla dinámica y la macro intento hacer que se detenga al encontrar "Total general".

Me podrían ayudar a ver en que lineas de la macro puedo hacer esos dos ajustes?

o si se tiene que programar diferente?

Ejemplo

HOJA1

B6 ANA C6 GUZMAN D6 LOPEZ     C2 2

B7 Total general

HOJA 2

C4 ANA D4 GUZMAN E4 LOPEZ

C5 ANA D5 GUZMAN E5 LOPEZ

Gracias de antemano.

Adjunto macro modificada:

Sub insertandoFilas()
'x Elsamatilde
'hoja y fila destino
Set ho2 = Sheets("Hoja2")
fil2 = 4
'se recorre la col B desde fila 6 de hoja1
Sheets("Hoja1").Select
[B6].Select
'se recorre hasta encontrar celda vacía considerando fin de rango
While ActiveCell <> ""
'verifica si es celda de total
    If UCase(ActiveCell) = "TOTAL GENERAL" Then
        MsgBox "Fin del proceso."
        Exit Sub
    End If
    'se repite tantas veces como lo indica C2
    For i = 1 To [C2]
        ho2.Range("C" & fil2) = ActiveCell.Value
        ho2.Range("D" & fil2) = ActiveCell.Offset(0, 1).Value
        ho2.Range("E" & fil2) = ActiveCell.Offset(0, 2).Value
        fil2 = fil2 + 1
    Next i
    'pasa a la fila siguiente
    ActiveCell.Offset(1, 0).Select
'repite el bucle
Wend
End Sub

No importa cómo escribas el texto (mientras sea el mismo texto). Solo lo comparo en mayúsculas para evitar diferencias entre mayúsculas y minúsculas.

Sdos!

¡Gracias! Es exacta la forma que andaba buscando para hacer la duplicidad de datos.

Agradezco mucho el apoyo, seguiré tus sitio para mejorar e intentar programar, tan bien como tú.

Saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas