¿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 № 1Primer 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])