it-swarm.com.de

VBA, um die Formel bis zur letzten Zeile in der Spalte zu füllen

Ich arbeite also an einem Projekt und versuche, mit meinem VBA-Code die Formel in Zelle M3 bis zum Ende des Datensatzes zu zeichnen. Ich benutze Spalte L als Basis, um festzustellen, was die letzte Zelle mit Daten ist. Meine Formel besteht aus zwei Zellen, zwischen denen ein Textkomma steht. Also in Excel ist meine Formel = G3 & "," & L3

Ich möchte, dass Excel diese Formel herunterzieht, also wäre es in Zelle M4 = G4 & "," & L4 Zelle M5 wäre = G5 & "," & L5 usw.

Mein Code sieht so aus: 

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

Meine Ausgabe zieht einfach die Textwerte von Zelle M3 bis zum Ende des Datensatzes herunter. Ich habe mehrere Stunden herumgesucht, um nach einer Lösung zu suchen, aber ich kann keine finden, die versucht, das zu erreichen, was ich erreichen möchte.

11
MatTtT

Es ist eigentlich ein Einzeiler. Keine Notwendigkeit, .Autofill zu verwenden

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

Alternativ können Sie FillDown verwenden.

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

Für Personen mit einer ähnlichen Frage finden Sie diesen Beitrag (wie ich); Sie können dies auch ohne lastrow tun, wenn Ihr Datensatz als Tabelle formatiert ist.

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

Ein wahrer Liner. Hoffe es hilft jemandem!

9
Monthy

Wunderbare Antwort! Ich musste die leeren Zellen in einer Spalte ausfüllen, in denen sich Titel in Zellen befanden, die bis zur nächsten Titelzelle auf die leeren Zellen angewendet wurden. 

Ich habe Ihren Code oben verwendet, um den Code zu entwickeln, der sich hier unter meinem Beispielblatt befindet. Ich habe diesen Code als Makro ctl/shft/D angewendet, um die Spalte schnell nach unten zu laufen und die Titel zu kopieren.

--- Beispieltabelle ------------ Titel1 wird in die Zeilen 2 und 3 kopiert. Title2 wird in die Zeilen 5 und 6 darunter kopiert. Nach dem zweiten Durchlauf des Makros ist die aktive Zelle die Title3-Zelle. 

 ' **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

----- CopyDown-Code ----------

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