Excel: ¿Macro para auto completar fórmula en un rango dinámico?

Expertos:

Intento construir una macro que desplace una fórmula a lo largo y ancho de un rango dinámico, donde los encabezados de las filas y columnas varían dependiendo de la base de datos.

La fórmula a desplazar se encuentra dada por una macro anterior.

1 respuesta

Respuesta

Podrías ser un poco más explicito... que fórmula es, que cual es el rango que abarca la fórmula etc...

Hola! 

Muchas gracias por contestar. 

Ahora explico:

Trabajo con una base de datos que varía en cuanto a países y códigos arancelarios.

Dentro del procesamiento de datos, se llega a un punto en que debo calcular una suma si conjunto entre los países y los códigos. 

La fórmula que utilizo es:

=SUMAR.SI.CONJUNTO($D$2:$D$1048576;$E$2:$E$1048576;$M2;$F$2:$F$1048576;N$1)

Como es evidente no trabajo con valores fijos, para poder desplazar la fórmula desde la celda N2 a lo largo y ancho del rango de datos.

Actualmente lo que hago es utilizar el siguiente código 200 veces, dividido en 5 macros:

Sub MacroSumaSiConjunto()
'
'completa columnas paises
Range([n2], [m65536].End(xlUp).Offset(, 1)) = [n2].FormulaR1C1
Range([o2], [m65536].End(xlUp).Offset(, 1)) = [n2].FormulaR1C1
Range([p2], [m65536].End(xlUp).Offset(, 1)) = [n2].FormulaR1C1 ...

Quisiera poder determinar la última columna (Países) ocupada dentro de la fila 1 y la última fila ocupada dentro de la columna M para autocompletar con la fórmula de la celda N2 dentro del rango, para optimizar el código y la ejecución de la macro, y asimismo, aplicar esta solución a otras partes del código en lugar de lo que actualmente estoy haciendo.

Para que se vea aún más sencillo, y para que sea de utilidad a otros usuarios, quiero dejar un pequeño ejemplo:

Es la misma lógica, ¿verdad?

Se arrastraría la fórmula a lo largo y ancho del rango hasta la última celda de la intersección.

Muchísimas gracias.

Disculpa la tardanza estaba un poco ocupado

Esta macro realiza lo que necesitas

Te mando la imagen de muestra sobre como concatena las celdas iniciando en la E2 y termina en la L11

Sub MyMacro()

'DETERMINAMOS EL NUMEMRO DE COLUMNA HASTA DONDE SE TIENEN DATOS EN ESTE CASO ES LA L
Range("za1").End(xlToLeft).Select
ctop = ActiveCell.Column

'DETERMINAMOS EL NUMERO DE FILA HASTA DONDE SE TIENE DATOS EN ESTE CASO ES LA 11
Range("d65536").End(xlUp).Select
ftop = ActiveCell.Row

'restamos las columnas que tenemos sin datos a la izquierda que son 4 la a, b, c y d
ctop = ctop - 4

'RESTAMOS LAS FILAS QUE NO TIENEN DATOS EN ESTE CASO ES LA FILA 1
ftop = ftop - 1

'EJECUTAMOS LOS BUCLES

Range("e2").Select
col = ActiveCell.Address
col = Mid(col, 2, 1)
col = Asc(col)

ro = ActiveCell.Row
'EJECUTAMOS EL BUCLE QUE RECORRERA LAS COLUMNAS DE LA E A LA L
For x = 1 To ctop
col = Chr(col)
Range(col & 2).Select

'EJECUTAMOS EL BUCLE QUE RECORRERA LAS FILAS DE LA 2 A LA 11
For i = 1 To ftop
ActiveCell.FormulaLocal = "=CONCATENAR(" & col & "1,D" & ro & ")"
ActiveCell.Offset(1, 0).Select
ro = ro + 1
Next i

ActiveCell.Offset(0, 1).Select
col = Asc(col) + 1
ro = 2
Next x

End Sub

Mas información de Macros o otros lenguajes en MACROS EXCEL

www.conpuservi.com

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas