web-dev-qa-db-fra.com

VBA pour remplir la formule jusqu'à la dernière ligne de la colonne

Je travaille donc sur un projet et j'essaie d'obtenir que mon code VBA détaille la formule qui se trouve dans la cellule M3 jusqu'à la fin de l'ensemble de données. J'utilise la colonne L comme base pour déterminer quelle est la dernière cellule contenant des données. Ma formule est une concaténation de deux cellules avec une virgule de texte entre elles. Donc, dans Excel, ma formule est = G3 & "," & L3

Je veux qu'Excel réduise cette formule afin que dans la cellule M4, il s'agisse de = G4 & "," & L4 La cellule M5 serait = G5 & "," & L5, etc.

Mon code ressemble à: 

Range("$M$3").Formula = Range("G3") & (",") & Range("L3")

Dim Lastrow As Long

Application.ScreenUpdating = False

Lastrow = Range("L" & Rows.Count).End(xlUp).Row
Range("M4").FormulaR1C1 = Range("G4") & (",") & Range("L4")
Range("M4").AutoFill Destination:=Range("M4:M" & Lastrow)
ActiveSheet.AutoFilterMode = False
Application.ScreenUpdating = True

Mon résultat consiste simplement à extraire les valeurs de texte de la cellule M3 jusqu'à la fin du jeu de données. J'ai cherché pendant plusieurs heures à la recherche d'une solution, mais je n'arrive pas à en trouver une qui tente d'accomplir ce que je cherche.

11
MatTtT

C'est un one-line en fait. Pas besoin d'utiliser .Autofill

Range("M3:M" & LastRow).Formula = "=G3&"",""&L3"
32
Siddharth Rout

Alternativement, vous pouvez utiliser FillDown

Range("M3") = "=G3&"",""&L3": Range("M3:M" & LastRow).FillDown
9

Pour les personnes avec une question similaire et trouver ce post (comme je l'ai fait); Vous pouvez le faire même sans lastrow si votre jeu de données est formaté comme un tableau.

Range("tablename[columnname]").Formula = "=G3&"",""&L3"

Ce qui en fait un vrai one-line. J'espère que ça aide quelqu'un!

9
Monthy

Réponse merveilleuse! Je devais remplir les cellules vides dans une colonne où il y avait des titres dans les cellules qui s'appliquaient aux cellules vides ci-dessous jusqu'à la cellule de titre suivante. 

J'ai utilisé votre code ci-dessus pour développer le code ci-dessous mon exemple de feuille ici. J'ai appliqué ce code en tant que macro ctl/shft/D pour parcourir rapidement la colonne en copiant les titres.

--- Exemple de feuille de calcul ------------ Title1 est copié dans les lignes 2 et 3; Title2 est copié dans les cellules situées en dessous des rangées 5 et 6. Après la deuxième exécution de la macro, la cellule active est la cellule Title3. 

 ' **row** **Column1**        **Column2**
 '    1     Title1         Data 1 for title 1
 '    2                    Data 2 for title 1
 '    3                    Data 3 for title 1
 '    4     Title2         Data 1 for title 2
 '    5                    Data 2 for title 2
 '    6                    Data 3 for title 2
 '    7   Title 3          Data 1 for title 3

----- Code de copie ----------

Sub CopyDown()
Dim Lastrow As String, FirstRow As String, strtCell As Range
'
' CopyDown Macro
' Copies the current cell to any empty cells below it.   
'
' Keyboard Shortcut: Ctrl+Shift+D
'
    Set strtCell = ActiveCell
    FirstRow = strtCell.Address
' Lastrow is address of the *list* of empty cells
    Lastrow = Range(Selection, Selection.End(xlDown).Offset(-1, 0)).Address
'   MsgBox Lastrow
    Range(Lastrow).Formula = strtCell.Formula

    Range(Lastrow).End(xlDown).Select
 End Sub
0
SteveG