Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro AutoFill Range anpassen

Makro AutoFill Range anpassen
24.11.2015 09:15:25
Arthur
Hallo zusammen
Ich habe ein simples Makro aufgenommen und das funktioniert gut.
Nur ist das Problem, dass ich dieses Makro an verschiedene Listen anwenden werde.
Sprich die "Range:E5ist nicht immer bis H31, es kann nur bis H8 sein, aber auch bis H2345 gehen. Je nachdem wie viele Zellen in H gefüllt sind.
Wie muss ich deshalb dieses Makro anpassen, dass Excel so weit ausfüllt bis zum letzten Eintrag?:
Range("E5:H5").Select
Selection.AutoFill Destination:=Range("E5:H31")
Range("E5:H31").Select
Range("L5").Select
Selection.AutoFill Destination:=Range("L5:L31")
Range("L5:L31").Select
Vielen Dank für eure Hilfe
Gruss
Arthur

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro AutoFill Range anpassen
24.11.2015 09:47:04
Daniel
Hi
Range("E5:H5").Autofill Destination:=Range("E5:H" & Cells(Rows.Count, "H").End(xlup).Row)
Gruß Daniel

AW: Makro AutoFill Range anpassen
25.11.2015 01:27:05
Arthur
Hi Daniel
Leider habe ich kaum VBA Kenntnisse. Was muss ich nun mit deinem Code machen?
Das oben erwähnte ist ein teil eines ganzen makros, nicht ein einziges.
Ich habe jetzt mal:
Range("E5:H5").Select
Selection.AutoFill Destination:=Range("E5:H31")
mit:
Range("E5:H5").Autofill Destination:=Range("E5:H" & Cells(Rows.Count, "H").End(xlup).Row)
ersetzt, dann kommt der Debugger. Funktioniert also nicht.
Was müsste ich denn auch noch für L5 genau machen?
Vielen Dank für eure Hilfe
Gruss
Arthur

Anzeige
AW: Makro AutoFill Range anpassen
25.11.2015 11:48:07
fcs
Hallo Arthur,
in meiner Antwort
https://www.herber.de/forum/messages/1460305.html
ist eigentlich alles drin.
Im 1. Schritt letzte Zeile mit Daten bestimmen.
Nach Prüfung der Zeilen-Nummer dann die zwei Zellbereiche bis zu dieser letzten Zeile auffüllen.
Ich bevorzuge halt die Cells-Schreibweise bei der Programmierung vpn Range-Objekten, aber da kann man die Nummer der Spalte (A=1, B=2, usw.) ja zur Not an den Fingern abzählen.
Gruß
Franz

Anzeige
AW: Makro AutoFill Range anpassen
27.11.2015 07:34:16
Arthur
Hallo Franz
Ich habe diesen Teil meines ganzen Makros:
Range("E5:H5").Select
Selection.AutoFill Destination:=Range("E5:H31")
Range("E5:H31").Select
Range("L5").Select
Selection.AutoFill Destination:=Range("L5:L31")
Range("L5:L31").Select
Range("M5").Select
Selection.NumberFormat = "0.00%"
Selection.AutoFill Destination:=Range("M5:M31")
Range("M5:M31").Select
Range("A5").Select
rausgelöscht und dein Makro reinkopiert:
Set wks = ActiveSheet
With wks

Sub AutoFill_E_to_H_and_L()
Dim Zeile_L As Long
Dim wks As Worksheet
'Letzte ausgefüllte Zeile in Spalte H - ggf. andere Spalte wählen, um Letzte ausgefüllte Zeile   _
_
zu ermitteln
Zeile_L = .Cells(.Rows.Count, 8).End(xlUp).Row
If Zeile_L > 5 Then
'Bereich E5:H5 bis Listenende auffüllen
.Range(.Cells(5, 5), .Cells(5, 8)).AutoFill Destination:=.Range(.Cells(5, 5), .Cells( _
Zeile_L, 8))
'Bereich L5 bis Listenende auffüllen
.Cells(5, 12).AutoFill Destination:=.Range(.Cells(5, 12), .Cells(Zeile_L, 12))
End If
End With
End Sub
Jetzt kommt aber eine Fehlermeldung, "Kompilierung".
Ich habe wirklich kaum VBA Kenntnisse, aber ich denke das geht doch gar nicht ein Makro innerhalb eines anderen Makros zu haben.
Ich lösche mein Teil meines Makros raus und was genau muss ich ersetzen, damit das Makro trotzdem so funktioniert wie vorher, aber halt nicht nur bis zeile 31 sondern unterschiedlich, je nach liste die gerade bearbeitet wird?
Vielen Dank für deine Hilfe
Gruss
Arthur.

Anzeige
AW: Makro AutoFill Range anpassen
28.11.2015 01:12:38
fcs
Hallo Arthur,
die Zeilen
Sub Makroname()
und
End Sub
gibt es nur einmal pro Makro. Sie definieren Beginn und Ende eines Makros. Diese Zeilen darfst du nicht mit kopieren, wenn du die Code-Zeilen in vorhandenes Makro einfügen willst.
Die Deklaration der Variablen muss vor der 1. Verwendung der Variablen stehen.
Der besseren Übersicht halber fügt man alle Variablen-Deklarationen direkt nach der Sub-Zeile ein.
Gruß
Franz

'Zeile mit Makroname - nur einmal als 1. Zeile eines Makros
Sub AutoFill_E_to_H_and_L()
'Deklararation von Variablen - vor 1. Verwendung im Makro - besser als 1. Zeilen im Makro
Dim Zeile_L As Long
Dim wks As Worksheet
'Start der Zeilen, die deine ersetzen
Set wks = ActiveSheet 'Tabellenblatt einer Variablen zuweisen
With wks
'Letzte ausgefüllte Zeile in Spalte H - ggf. andere Spalte wählen, um letzte _
ausgefüllte Zeile zu ermitteln
Zeile_L = .Cells(.Rows.Count, 8).End(xlUp).Row
If Zeile_L > 5 Then
'Bereich E5:H5 bis Listenende auffüllen
.Range(.Cells(5, 5), .Cells(5, 8)).AutoFill _
Destination:=.Range(.Cells(5, 5), .Cells(Zeile_L, 8))
'Bereich L5 bis Listenende auffüllen
.Cells(5, 12).AutoFill Destination:=.Range(.Cells(5, 12), .Cells(Zeile_L, 12))
'Bereich M5 bis Listenende auffüllen
.Cells(5, 13).NumberFormat = "0.00%"
.Cells(5, 13).AutoFill Destination:=.Range(.Cells(5, 13), .Cells(Zeile_L, 13))
End If
End With
'Ende der Zeilen, die deine ersetzen
'Letzte Zeile nur einmal am Ende eines Makros
End Sub

Anzeige
AW: Makro AutoFill Range anpassen
30.11.2015 08:45:18
Arthur
Hallo Franz
Vielen Dank für deine Erklärung. Aber wenn ich nun haargenau diesen Text hier:
'Deklararation von Variablen - vor 1. Verwendung im Makro - besser als 1. Zeilen im Makro
Dim Zeile_L As Long
Dim wks As Worksheet
'Start der Zeilen, die deine ersetzen
Set wks = ActiveSheet 'Tabellenblatt einer Variablen zuweisen
With wks
'Letzte ausgefüllte Zeile in Spalte H - ggf. andere Spalte wählen, um letzte _
ausgefüllte Zeile zu ermitteln
Zeile_L = .Cells(.Rows.Count, 8).End(xlUp).Row
If Zeile_L > 5 Then
'Bereich E5:H5 bis Listenende auffüllen
.Range(.Cells(5, 5), .Cells(5, 8)).AutoFill _
Destination:=.Range(.Cells(5, 5), .Cells(Zeile_L, 8))
'Bereich L5 bis Listenende auffüllen
.Cells(5, 12).AutoFill Destination:=.Range(.Cells(5, 12), .Cells(Zeile_L, 12))
'Bereich M5 bis Listenende auffüllen
.Cells(5, 13).NumberFormat = "0.00%"
.Cells(5, 13).AutoFill Destination:=.Range(.Cells(5, 13), .Cells(Zeile_L, 13))
End If
End With
'Ende der Zeilen, die deine ersetzen
'Letzte Zeile nur einmal am Ende eines Makros
Einfüge wo meine mit dem Makroaufzeichner erstellten Schritte sind (die funktionieren) geht es nicht.
Excel zieht die Zeilen (Verknüpfungen) nicht bis zur letzten Zeile hinunter.
Hier das ganze Makro:
Sub Makro3()
' Makro3 Makro
wsAkt = ActiveSheet.Name
wbAkt = ActiveWorkbook.Name
Windows(wbAkt).Activate
Rows("4:4").Select
Selection.Delete Shift:=xlUp
Rows("3:3").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A:D,I:L").Select
Range("I1").Activate
ActiveWindow.SmallScroll ToRight:=12
Range("A:D,I:L,U:V,X:X").Select
Range("X1").Activate
Selection.Delete Shift:=xlToLeft
Columns("E:E").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("K:K").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("K4").Select
ActiveCell.FormulaR1C1 = "ZCP7 in System"
Range("K5").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-8],ZCP7.xlsx!R10C7:R2000C14,8,FALSE)),"""",((VLOOKUP(RC[-8], _
ZCP7.xlsx!R10C7:R2000C14,8,FALSE))))"
Range("K5").Select
Selection.NumberFormat = "0.0"
Selection.NumberFormat = "0.00"
Selection.NumberFormat = "0.000"
Windows("ZCP7.xlsx").Activate
Windows("ZCP7 Calculation tool.xlsm").Activate
Range("E4:F5").Select
Selection.Copy
Windows(wbAkt).Activate
Range("E4").Select
ActiveSheet.Paste
Range("E5:F5").Select
Application.CutCopyMode = False
Selection.NumberFormat = "0.000"
Selection.NumberFormat = "0.00"
Windows("ZCP7 Calculation tool.xlsm").Activate
Range("H4:I4").Select
Selection.Copy
Windows(wbAkt).Activate
Range("H4").Select
ActiveSheet.Paste
Columns("E:E").Select
Application.CutCopyMode = False
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("E4").Select
ActiveCell.FormulaR1C1 = "Artikel gekauft?"
Range("E5").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],gekauft.XLS!R2C6:R2000C6,1,FALSE)"
Range("E5").Select
Windows("ZCP7 Calculation tool.xlsm").Activate
Range("G4:G5").Select
Selection.Copy
Windows(wbAkt).Activate
Range("H4").Select
ActiveSheet.Paste
Cells.Select
Application.CutCopyMode = False
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Windows("ZCP7 Calculation tool.xlsm").Activate
ActiveWindow.LargeScroll ToRight:=-1
Range("A4:B4").Select
Selection.Copy
Windows(wbAkt).Activate
Range("A4").Select
ActiveSheet.Paste
Range("A4").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Range("A4:B4").Select
Range(Selection, Selection.End(xlToRight)).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.249977111117893
.PatternTintAndShade = 0
End With
Selection.Font.Bold = True
With Selection
.VerticalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Cells.Select
Cells.EntireColumn.AutoFit
Sheets(wsAkt).Select
Sheets(wsAkt).Name = "Preisanpassung - "
Range("A2").Select
ActiveCell.FormulaR1C1 = "Preisanpassung - "
Range("A2").Select
Selection.Font.Bold = True
Rows("5:5").Select
ActiveWindow.FreezePanes = True
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
Application.PrintCommunication = True
ActiveSheet.PageSetup.PrintArea = ""
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.7)
.RightMargin = Application.InchesToPoints(0.7)
.TopMargin = Application.InchesToPoints(0.75)
.BottomMargin = Application.InchesToPoints(0.75)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 100
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
Application.PrintCommunication = True
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
Application.PrintCommunication = True
ActiveSheet.PageSetup.PrintArea = ""
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.25)
.RightMargin = Application.InchesToPoints(0.25)
.TopMargin = Application.InchesToPoints(0.75)
.BottomMargin = Application.InchesToPoints(0.75)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 100
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
Application.PrintCommunication = True
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
Application.PrintCommunication = True
ActiveSheet.PageSetup.PrintArea = ""
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.25)
.RightMargin = Application.InchesToPoints(0.25)
.TopMargin = Application.InchesToPoints(0.75)
.BottomMargin = Application.InchesToPoints(0.75)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
Application.PrintCommunication = True
'Deklararation von Variablen - vor 1. Verwendung im Makro - besser als 1. Zeilen im Makro
Dim Zeile_L As Long
Dim wks As Worksheet
'Start der Zeilen, die deine ersetzen
Set wks = ActiveSheet 'Tabellenblatt einer Variablen zuweisen
With wks
'Letzte ausgefüllte Zeile in Spalte H - ggf. andere Spalte wählen, um letzte _
ausgefüllte Zeile zu ermitteln
Zeile_L = .Cells(.Rows.Count, 8).End(xlUp).Row
If Zeile_L > 5 Then
'Bereich E5:H5 bis Listenende auffüllen
.Range(.Cells(5, 5), .Cells(5, 8)).AutoFill _
Destination:=.Range(.Cells(5, 5), .Cells(Zeile_L, 8))
'Bereich L5 bis Listenende auffüllen
.Cells(5, 12).AutoFill Destination:=.Range(.Cells(5, 12), .Cells(Zeile_L, 12))
'Bereich M5 bis Listenende auffüllen
.Cells(5, 13).NumberFormat = "0.00%"
.Cells(5, 13).AutoFill Destination:=.Range(.Cells(5, 13), .Cells(Zeile_L, 13))
End If
End With
'Ende der Zeilen, die deine ersetzen
'Letzte Zeile nur einmal am Ende eines Makros
End Sub

Anzeige
AW: Makro AutoFill Range anpassen
30.11.2015 10:05:00
fcs
Hallo Arthur,
bei all dem Gewusel von Spalten löschen, Spalten einfügen, und kopieren von Daten aus einer anderen Mappe ist für mich nicht erkennbar, ob in Spalte H bis zum Ende der Liste Daten in den Zellen stehen.
Wenn in Spalte nicht in allen Zellen Daten stehen, dann kann es passieren, dass die letzte Zeile mit Daten nicht korrekt ermittelt wird.
'Letzte ausgefüllte Zeile in Spalte H - ggf. andere Spalte wählen, um letzte _
ausgefüllte Zeile zu ermitteln
Zeile_L = .Cells(.Rows.Count, 8).End(xlUp).Row

Statt 8 (entspricht Spalte H) muss dann eine Spalte gewählt werden, in der in jeder Zeile ein Wert vorhanden ist. Gibt es keine solche Spalte dann muss die letzte Spalte anders ermittelt werden.
Gruß
Franz
P.S. in deinem aufgezeichneten Makro wiederholen sich an einigen Stellen für das gleiche Object/Selection die Anweisungen. Betrifft Numberformat und PageSetUp.
Hier benötigst du nur die letzte Zeile bzw. den letzten Block. Die vorherigen Zeilen/Blöcke kannst du löschen. Doppelt gemoppelt hält besser gilt hier nicht.

Anzeige
AW: Makro AutoFill Range anpassen
30.11.2015 08:46:34
Arthur
Hallo Franz
Vielen Dank für deine Erklärung. Aber wenn ich nun haargenau diesen Text hier:
'Deklararation von Variablen - vor 1. Verwendung im Makro - besser als 1. Zeilen im Makro
Dim Zeile_L As Long
Dim wks As Worksheet
'Start der Zeilen, die deine ersetzen
Set wks = ActiveSheet 'Tabellenblatt einer Variablen zuweisen
With wks
'Letzte ausgefüllte Zeile in Spalte H - ggf. andere Spalte wählen, um letzte _
ausgefüllte Zeile zu ermitteln
Zeile_L = .Cells(.Rows.Count, 8).End(xlUp).Row
If Zeile_L > 5 Then
'Bereich E5:H5 bis Listenende auffüllen
.Range(.Cells(5, 5), .Cells(5, 8)).AutoFill _
Destination:=.Range(.Cells(5, 5), .Cells(Zeile_L, 8))
'Bereich L5 bis Listenende auffüllen
.Cells(5, 12).AutoFill Destination:=.Range(.Cells(5, 12), .Cells(Zeile_L, 12))
'Bereich M5 bis Listenende auffüllen
.Cells(5, 13).NumberFormat = "0.00%"
.Cells(5, 13).AutoFill Destination:=.Range(.Cells(5, 13), .Cells(Zeile_L, 13))
End If
End With
'Ende der Zeilen, die deine ersetzen
'Letzte Zeile nur einmal am Ende eines Makros
Einfüge wo meine mit dem Makroaufzeichner erstellten Schritte sind (die funktionieren) geht es nicht.
Excel zieht die Zeilen (Verknüpfungen) nicht bis zur letzten Zeile hinunter.
Hier das ganze Makro:
Sub Makro3()
' Makro3 Makro
wsAkt = ActiveSheet.Name
wbAkt = ActiveWorkbook.Name
Windows(wbAkt).Activate
Rows("4:4").Select
Selection.Delete Shift:=xlUp
Rows("3:3").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A:D,I:L").Select
Range("I1").Activate
ActiveWindow.SmallScroll ToRight:=12
Range("A:D,I:L,U:V,X:X").Select
Range("X1").Activate
Selection.Delete Shift:=xlToLeft
Columns("E:E").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("K:K").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("K4").Select
ActiveCell.FormulaR1C1 = "ZCP7 in System"
Range("K5").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-8],ZCP7.xlsx!R10C7:R2000C14,8,FALSE)),"""",((VLOOKUP(RC[-8], _
ZCP7.xlsx!R10C7:R2000C14,8,FALSE))))"
Range("K5").Select
Selection.NumberFormat = "0.0"
Selection.NumberFormat = "0.00"
Selection.NumberFormat = "0.000"
Windows("ZCP7.xlsx").Activate
Windows("ZCP7 Calculation tool.xlsm").Activate
Range("E4:F5").Select
Selection.Copy
Windows(wbAkt).Activate
Range("E4").Select
ActiveSheet.Paste
Range("E5:F5").Select
Application.CutCopyMode = False
Selection.NumberFormat = "0.000"
Selection.NumberFormat = "0.00"
Windows("ZCP7 Calculation tool.xlsm").Activate
Range("H4:I4").Select
Selection.Copy
Windows(wbAkt).Activate
Range("H4").Select
ActiveSheet.Paste
Columns("E:E").Select
Application.CutCopyMode = False
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("E4").Select
ActiveCell.FormulaR1C1 = "Artikel gekauft?"
Range("E5").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],gekauft.XLS!R2C6:R2000C6,1,FALSE)"
Range("E5").Select
Windows("ZCP7 Calculation tool.xlsm").Activate
Range("G4:G5").Select
Selection.Copy
Windows(wbAkt).Activate
Range("H4").Select
ActiveSheet.Paste
Cells.Select
Application.CutCopyMode = False
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Windows("ZCP7 Calculation tool.xlsm").Activate
ActiveWindow.LargeScroll ToRight:=-1
Range("A4:B4").Select
Selection.Copy
Windows(wbAkt).Activate
Range("A4").Select
ActiveSheet.Paste
Range("A4").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Range("A4:B4").Select
Range(Selection, Selection.End(xlToRight)).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.249977111117893
.PatternTintAndShade = 0
End With
Selection.Font.Bold = True
With Selection
.VerticalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Cells.Select
Cells.EntireColumn.AutoFit
Sheets(wsAkt).Select
Sheets(wsAkt).Name = "Preisanpassung - "
Range("A2").Select
ActiveCell.FormulaR1C1 = "Preisanpassung - "
Range("A2").Select
Selection.Font.Bold = True
Rows("5:5").Select
ActiveWindow.FreezePanes = True
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
Application.PrintCommunication = True
ActiveSheet.PageSetup.PrintArea = ""
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.7)
.RightMargin = Application.InchesToPoints(0.7)
.TopMargin = Application.InchesToPoints(0.75)
.BottomMargin = Application.InchesToPoints(0.75)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 100
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
Application.PrintCommunication = True
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
Application.PrintCommunication = True
ActiveSheet.PageSetup.PrintArea = ""
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.25)
.RightMargin = Application.InchesToPoints(0.25)
.TopMargin = Application.InchesToPoints(0.75)
.BottomMargin = Application.InchesToPoints(0.75)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 100
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
Application.PrintCommunication = True
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
Application.PrintCommunication = True
ActiveSheet.PageSetup.PrintArea = ""
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.25)
.RightMargin = Application.InchesToPoints(0.25)
.TopMargin = Application.InchesToPoints(0.75)
.BottomMargin = Application.InchesToPoints(0.75)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
Application.PrintCommunication = True
'Deklararation von Variablen - vor 1. Verwendung im Makro - besser als 1. Zeilen im Makro
Dim Zeile_L As Long
Dim wks As Worksheet
'Start der Zeilen, die deine ersetzen
Set wks = ActiveSheet 'Tabellenblatt einer Variablen zuweisen
With wks
'Letzte ausgefüllte Zeile in Spalte H - ggf. andere Spalte wählen, um letzte _
ausgefüllte Zeile zu ermitteln
Zeile_L = .Cells(.Rows.Count, 8).End(xlUp).Row
If Zeile_L > 5 Then
'Bereich E5:H5 bis Listenende auffüllen
.Range(.Cells(5, 5), .Cells(5, 8)).AutoFill _
Destination:=.Range(.Cells(5, 5), .Cells(Zeile_L, 8))
'Bereich L5 bis Listenende auffüllen
.Cells(5, 12).AutoFill Destination:=.Range(.Cells(5, 12), .Cells(Zeile_L, 12))
'Bereich M5 bis Listenende auffüllen
.Cells(5, 13).NumberFormat = "0.00%"
.Cells(5, 13).AutoFill Destination:=.Range(.Cells(5, 13), .Cells(Zeile_L, 13))
End If
End With
'Ende der Zeilen, die deine ersetzen
'Letzte Zeile nur einmal am Ende eines Makros
End Sub

Anzeige
AW: Makro AutoFill Range anpassen
24.11.2015 09:58:01
fcs
Hallo Arthur,
Sub AutoFill_E_to_H_and_L()
Dim Zeile_L As Long
Dim wks As Worksheet
Set wks = ActiveSheet
With wks
'Letzte ausgefüllte Zeile in Spalte H - ggf. andere Spalte wählen, um Letzte ausgefüllte Zeile  _
zu ermitteln
Zeile_L = .Cells(.Rows.Count, 8).End(xlUp).Row
If Zeile_L > 5 Then
'Bereich E5:H5 bis Listenende auffüllen
.Range(.Cells(5, 5), .Cells(5, 8)).AutoFill Destination:=.Range(.Cells(5, 5), .Cells( _
Zeile_L, 8))
'Bereich L5 bis Listenende auffüllen
.Cells(5, 12).AutoFill Destination:=.Range(.Cells(5, 12), .Cells(Zeile_L, 12))
End If
End With
End Sub

Gruß
Franz
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Makro AutoFill Range anpassen in Excel


Schritt-für-Schritt-Anleitung

Um ein Excel-Makro zu erstellen, das automatisch eine Range bis zur letzten Zeile in einer Spalte ausfüllt, kannst du folgende Schritte ausführen:

  1. Öffne den VBA-Editor in Excel mit ALT + F11.
  2. Erstelle ein neues Modul über Einfügen > Modul.
  3. Füge den folgenden Code in das Modul ein:
Sub AutoFill_E_to_H_and_L()
    Dim Zeile_L As Long
    Dim wks As Worksheet
    Set wks = ActiveSheet

    With wks
        'Letzte ausgefüllte Zeile in Spalte H ermitteln
        Zeile_L = .Cells(.Rows.Count, 8).End(xlUp).Row
        If Zeile_L > 5 Then
            'Bereich E5:H5 bis zur letzten Zeile auffüllen
            .Range(.Cells(5, 5), .Cells(5, 8)).AutoFill Destination:=.Range(.Cells(5, 5), .Cells(Zeile_L, 8))
            'Bereich L5 bis zur letzten Zeile auffüllen
            .Cells(5, 12).AutoFill Destination:=.Range(.Cells(5, 12), .Cells(Zeile_L, 12))
        End If
    End With
End Sub
  1. Passe die Zeilennummern und Spaltenindizes nach Bedarf an.
  2. Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

Häufige Fehler und Lösungen

  • Fehler: "Kompilierungsfehler"
    Dieser Fehler tritt auf, wenn du den Code nicht korrekt in ein Modul eingefügt hast. Achte darauf, dass du den gesamten Code ohne die Zeilen Sub Makroname() und End Sub kopierst, wenn du in ein bestehendes Makro einfügst.

  • Fehler: Autofill funktioniert nicht bis zur letzten Zeile
    Stelle sicher, dass in der Spalte, die du verwendest (in diesem Fall Spalte H), tatsächlich Daten vorhanden sind. Wenn nicht, kann die letzte Zeile nicht korrekt ermittelt werden.


Alternative Methoden

Wenn du kein VBA verwenden möchtest, kannst du auch die Funktion AutoFill direkt in Excel nutzen:

  1. Wähle die Zelle mit der Vorlage aus.
  2. Ziehe den kleinen quadratischen Anfasser (AutoFill-Griff) in der unteren rechten Ecke der Auswahl nach unten bis zur gewünschten Zeile.
  3. Halte die STRG-Taste gedrückt, während du ziehst, um die Daten zu kopieren.

Praktische Beispiele

Hier ist ein Beispiel für ein Makro, das zwei Bereiche gleichzeitig auffüllt:

Sub MultipleAutoFill()
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, "H").End(xlUp).Row

    Range("E5:H5").AutoFill Destination:=Range("E5:H" & lastRow)
    Range("L5").AutoFill Destination:=Range("L5:L" & lastRow)
End Sub

Dieses Makro füllt die Bereiche E5:H bis zur letzten Zeile in Spalte H und L5 bis zur letzten Zeile in Spalte L aus.


Tipps für Profis

  • Verwende With wks-Konstrukte, um den Code lesbarer zu machen und die Ausführungsgeschwindigkeit zu verbessern.
  • Du kannst die letzte Zeile auch dynamisch anpassen, indem du eine andere Spalte wählst, die garantiert gefüllt ist.
  • Wenn du häufig mit AutoFill arbeitest, erstelle ein AutoFill-Makro, das du mit einem Shortcut verknüpfen kannst, um Zeit zu sparen.

FAQ: Häufige Fragen

1. Wie kann ich die Autofill-Funktion auf andere Zellen anwenden?
Du kannst die Kodierung für die Zellen anpassen, die du auffüllen möchtest, indem du die Zellreferenzen im Code änderst.

2. Warum funktioniert mein Makro nicht?
Überprüfe, ob du die Variablen korrekt deklariert hast und ob es in der ausgewählten Spalte tatsächlich Daten gibt.

3. Ist es möglich, mehrere Bereiche gleichzeitig auszufüllen?
Ja, du kannst mehrere .AutoFill-Anweisungen in einem Makro kombinieren, um mehrere Bereiche gleichzeitig zu füllen, wie im praktischen Beispiel gezeigt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige