/ / Permitiendo que la fórmula insertada a través de VBA se adapte a la numeración de filas - excel, vba, excel-vba

Permitiendo que la fórmula insertada a través de VBA se adapte a la numeración de filas - excel, vba, excel-vba

¿Cómo permite que la forumla que ha insertado a través de VBA se adapte a la numeración de filas (es decir, la fórmula insertada en la fila 50000 utilizando el código siguiente se convertirá en GCDnm (D5000, E5000) en lugar de GCDnm (D6, E6)?

La columna B es la columna principal donde la información se agrega continuamente. Las columnas J y K están todas rellenadas con fórmulas del código a continuación.

Sub macro2()


Dim lastrow, lastrowJ, lastrowK As Long


lastrow = Cells(Rows.Count, "B").End(xlUp).Row
lastrowJ = Cells(Rows.Count, "J").End(xlUp).Row
lastrowK = Cells(Rows.Count, "K").End(xlUp).Row

Range("J" & lastrowJ + 1 & ":J" & lastrow).Formula = "GCDnm(D6,E6)"
Range("K" & lastrowK + 1 & ":K" & lastrow).Formula = "LOOKUP(....)"

End Sub

Así que en cambio, me gustaría que fuera algo como

Range("J" & lastrowJ + 1 & ":J" & lastrow).Formula = "GCDnm(Dcurrentrow,Ecurrentrow)"
Range("K" & lastrowK + 1 & ":K" & lastrow).Formula = "LOOKUP(....)"

para la fila actual es la fila en la que se está pegando la fórmula.

Respuestas

3 para la respuesta № 1

Primer enfoque, es usar redimensionar:

Range("J" & lastrowJ + 1).Resize(lastrow - lastrowJ - 1).Formula = _
"=GCDnm(D" & lastrowJ + 1 & ",E" & lastrowJ + 1 & ")"
Range("K" & lastrowK + 1).Resize(lastrow - lastrowK - 1).Formula = _
"=LOOKUP(D" & lastrowK + 1 & ",...)"

en lugar

Range("J" & lastrowJ + 1 & ":J" & lastrow).Formula = "GCDnm(D6,E6)"
Range("K" & lastrowK + 1 & ":K" & lastrow).Formula = "LOOKUP(....)"

Proximo acercamiento es usar Autocompletar (necesita establecer fórmulas solo en líneas lastrowJ + 1 para columna J y lastrowK + 1 para columna K, y estíralos hacia abajo):

Range("J" & lastrowJ + 1).Formula = _
"=GCDnm(D" & lastrowJ + 1 & ",E" & lastrowJ + 1 & ")"
Range("K" & lastrowK + 1).Formula = _
"=LOOKUP(D" & lastrowK + 1 & ",...)"

Range("J" & lastrowJ + 1).AutoFill _
Destination:=Range("J" & lastrowJ + 1 & ":J" & lastrow), Type:=xlFillDefault
Range("K" & lastrowK + 1).AutoFill _
Destination:=Range("K" & lastrowK + 1 & ":K" & lastrow), Type:=xlFillDefault

O de otra manera. Si sabes que tienes relativo fórmulas (sin $ iniciar sesión) en J6 y K6 (por ejemplo =GCDnm(D6,E6)) que puede utilizar este enfoque:

Range("J6").Copy
Range("J" & lastrowJ + 1 & ":J" & lastrow).PasteSpecial xlPasteFormulas

Range("K6").Copy
Range("K" & lastrowK + 1 & ":K" & lastrow).PasteSpecial xlPasteFormulas

Application.CutCopyMode = False

0 para la respuesta № 2

Eso es automático en vba. Por ejemplo, usted quiere ingresar una fórmula en la columna c con la suma de ayb como esta:

Range("C1").Formula = "A1+B1"

Y los valores en A y B son dinámicos, así que obtienes la última fila.

lrow = Cells(Rows.Count, "A").End(xlUp).Row
Range("C1:C" & lrow).Formula = "A1+B1"

El código anterior dará como resultado la suma de Ax + Bx, donde x es la fila correspondiente de C.
Así que no hay que preocuparse por eso. Solo identifica el rango en el que quieres la fórmula.
Luego, suministre la fórmula para el primer conjunto de filas solo como arriba y es bueno ir.


0 para la respuesta № 3

Para insertar una fórmula que tenga en cuenta la ubicación, use el formato R1C1 de la fórmula

así que su fórmula es (supongo) en J6, que actualmente es

=GCDnm(D6,E6)

se convierte

=GCDnm(RC[-6],RC[-5])

y funcionará en cualquier celda J: Excel la mostrará como la adecuada GCDnm () fórmula. Si desea averiguar cuál es la fórmula R1C1 sin tener que cambiar las opciones, puede imprimir (?) el valor en la ventana inmediata:

? [j6] .formula
= GCDnm (D6, E6)
? [J6] .FormulaR1C1
= GCDnm (RC [-6], RC [-5])