/ / Autoriser la formule insérée via VBA à s’adapter à la numérotation des lignes - excel, vba, excel-vba

Permettre à la formule insérée via VBA de s’adapter à la numérotation des lignes - excel, vba, excel-vba

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 № 1

Premiè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 Ket 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])