Comment autorisez-vous le forumla que vous avez inséré via VBA à s’adapter à la numérotation des lignes (la formule insérée à la ligne 50000 à l’aide du code ci-dessous deviendra GCDnm (D5000, E5000) au lieu de GCDnm (D6, E6)?
La colonne B est la colonne principale où l'information est ajoutée continuellement. Les colonnes J et K sont toutes remplies par les formules du code ci-dessous.
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
Donc au lieu de cela, je voudrais que ce soit quelque chose comme
Range("J" & lastrowJ + 1 & ":J" & lastrow).Formula = "GCDnm(Dcurrentrow,Ecurrentrow)"
Range("K" & lastrowK + 1 & ":K" & lastrow).Formula = "LOOKUP(....)"
pour la ligne en cours est la ligne à laquelle la formule est collée.
Réponses:
3 pour la réponse № 1Première approche, est d'utiliser Resize:
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 & ",...)"
au lieu
Range("J" & lastrowJ + 1 & ":J" & lastrow).Formula = "GCDnm(D6,E6)"
Range("K" & lastrowK + 1 & ":K" & lastrow).Formula = "LOOKUP(....)"
Prochaine approche consiste à utiliser le remplissage automatique (vous devez définir des formules uniquement dans des lignes) lastrowJ + 1
pour colonne J
et lastrowK + 1
pour colonne K
et les étendre):
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
Ou d'une autre manière. Si vous savez que vous avez relatif formules (sans signe $) dans J6
et K6
(par exemple =GCDnm(D6,E6)
) que vous pouvez utiliser cette approche:
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 pour la réponse № 2
C'est automatique dans vba. Par exemple, vous voulez entrer une formule dans la colonne c avec la somme de a et b comme ceci:
Range("C1").Formula = "A1+B1"
Et les valeurs dans A et B sont dynamiques, vous obtenez donc la dernière ligne.
lrow = Cells(Rows.Count, "A").End(xlUp).Row
Range("C1:C" & lrow).Formula = "A1+B1"
Le code ci-dessus résultera en la somme de Ax + Bx où x est la ligne correspondante de C.
Donc pas besoin de s'inquiéter pour ça. Identifiez simplement la plage dans laquelle vous voulez la formule.
Ensuite, fournissez la formule pour le premier ensemble de lignes uniquement comme ci-dessus et il est bon de partir.
0 pour la réponse № 3
Pour insérer une formule tenant compte de l'emplacement, utilisez le format R1C1 de la formule.
donc votre formule qui est (je suppose) en J6, qui est actuellement
=GCDnm(D6,E6)
devient
=GCDnm(RC[-6],RC[-5])
et fonctionnera dans n’importe quelle cellule J - Excel l’affichera alors comme il convient. GCDnm () formule. si vous voulez connaître la formule R1C1 sans avoir à changer les options, vous pouvez imprimer (?) la valeur dans la fenêtre immédiate:
? [j6]. formule
= GCDnm (D6, E6)
? [j6] .formular1c1
= GCDnm (RC [-6], RC [-5])