Macro Excel para llenar tabla

A tod@s!

Anteriormente me ayudaron a crear una macro para validar que ciertas opciones definidas en una lista desplegable no pudieran ser seleccionadas mas de N veces, y la verdad me funciono bastante bien.

Hoy me asalta una nueva duda, pues los datos elegidos en la lista afectan el llenado de una tablaa la derecha de la columna con los datos a elegir. Como la tabla es bastante extensa simplificaré lo que necesito de la siguiente manera:

Para empezar tengo Hoja1 y Hoja2.

Hoja1 es dónde tengo funcionando las macros de validación y llenado. Hoja2 es mi base de donde los datos son extraídos para llenar la tabla de Hoja1. Hasta ahora mi macro aplica un condición SI para validar que la celda de la columna B no tenga ninguna opción elegida, con lo cual simplemente rellena la celda en la columna C con un 0, de lo contrario aplica una función BuscarV para traer el valor deseado de Hoja2 de acuerdo a la opción elegida. Esto se repite hasta el ultimo registro de opciones dentro de un rango definido.

Ahora, necesito que la macro repita el llenado de las columnas subsecuentes hasta completar la tabla. Se que esto se solucionaría con un ciclo o loop, pero sinceramente no se como hacerlo. Digamos que necesito repetir el ciclo cinco veces más.

1 Respuesta

Respuesta
1

¿Ya tienes una macro y dentro de esa macro tienes la función BuscarV?

Puedes poner la macro para ver lo que hace.

También dime qué columnas quieres traer de la hoja2 y en cuáles columnas de la hoja1 se deben poner.

Bueno pues, grabé la macro para hacer el llenado de la primer columna y luego añadí el Offset para moverme a la columna siguiente. Naturalmente la macro comenzó a grabar desde la primer columna que se llena:

Range("F23").Select
ActiveCell.FormulaR1C1 = "=IF(RC5="""",0,VLOOKUP(RC5,Hoja2!R2C1:R5C34,2,0))"
Selection.AutoFill Destination:=Range("F23:F384"), Type:=xlFillDefault
ActiveCell.Select
ActiveCell.Offset(0, 1).Activate

Lo que quiero lograr a partir de este fragmento de código es un ciclo que se repita por N veces según el número de columnas que tenga mi base en Hoja2. Por ahora el único rango definido es el numero de registros (filas) lo que puede llegar a variar es el número de columnas.

Gracias

Según tu macro se busca en las filas 2 a 5, desde la columna A y hasta AH.

Lo que hace la siguiente macro es encontrar la última columna de la hoja 2 según la fila 2.

Sub macro1()
Por.Dante Amor
    Set h1 = ActiveSheet
    Set h2 = Sheets("Hoja2")
    uf = h1.Range("E" & Rows.Count).End(xlUp).Row
    uc = h2.Cells(2, Columns.Count).End(xlToLeft).Column
    col = Columns("E").Column
    For i = 1 To uc
        With h1.Range(h1.Cells(23, col + i), h1.Cells(uf, col + i))
            .FormulaR1C1 = "=IF(RC5="""",0,VLOOKUP(RC5,Hoja2!R2C1:R5C" & uc & "," & i + 1 & ",0))"
        End With
    Next
End Sub

Revisa y me comentas

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Listo!

Funciona muy bien, espero me puedas explicar como es que funciona esta brujería porque realmente quiero aprender y no solo depender de los conocimiento de otros.

Muchas gracias

Te anexo el código con comentarios

Sub macro1()
Por.Dante Amor
    Set h1 = ActiveSheet
    Set h2 = Sheets("Hoja2")
    'última fila de la hoja1
    uf = h1.Range("E" & Rows.Count).End(xlUp).Row
    'última columna de la hoja2
    uc = h2.Cells(2, Columns.Count).End(xlToLeft).Column
    col = Columns("E").Column
    'ciclo de 1 hasta la última columna de la hoja2
    For i = 1 To uc
        'para cada ciclo, pone la fórmula desde la fila 23 y hasta 
 'la última fila de la columna E
 'empieza en la columna E y va a ir avanzando a la siguiente
 'columna, hasta llegar a la última columna de la hoja2
        With h1.Range(h1.Cells(23, col + i), h1.Cells(uf, col + i))
            'en la fórmula dice que tome el valor de la celda E5
            'lo busque en la hoja2 en el rango A2 hasta la fila 5 y última columna
            'y si lo encuentra toma el dato de la columna según el valor de i,
            'en el primer ciclo toma el dato de la columna 2, en el siguiente
            'ciclo toma la columna 3 y así sucesivamente
            .FormulaR1C1 = "=IF(RC5="""",0,VLOOKUP(RC5,Hoja2!R2C1:R5C" & uc & "," & i + 1 & ",0))"
        End With
    Next
End Sub

sal u dos

¡Gracias! 

Me ha servido bastante tu ayuda, espero no dejar esto y aprender de forma que pueda contribuir al conocimiento colectivo de esta comunidad.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas