Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: FillDown oder AutoFill über variablen Range

FillDown oder AutoFill über variablen Range
15.01.2008 14:59:59
Thomas
Hallo VBA-Profis,
folgendes Makro habe ich nun fast so weit entwickelt, dass es so funktioniert wie ich es mir vorstelle.
Leider fehlt mir das Wissen zum krönenden Abschluss.
Wie zu erkennen wird hier in der ersten freien Spalte in der ersten Zeile das Wort "Stückzahl" eingetragen. In der direkt darunter liegenden Zelle erfolgt der Eintrag "1".
Nun sollte die "1" mit der Funktion nach unten ausfüllen (FillDown) entsprechend eingetragen werden.
Da ich das Makro variabel gestalten möchte kann ich hier keinen fixen Range eingeben sondern muss diesen von der Spalte der "Stückzahl" abhängig machen.
Hier liegt auch das eigentliche Problem, denn nach Aufnahme des entsprechenden Makros über den Recorder und das Austauschen des Range druch
wks.range(cells(intRow, intColumn), cells(intRowlast, intColumnlast)).select
Beginnt der Debugger und ich bin mit meinen VBA - Kenntnissen am Ende.
Vielen Dank schon mal!!!
Viele Grüße,
Thomas

Sub Stückzahl_1_verfoll()
' stückzahl Makro
' Makro am 07.01.2008 von thomas.stock aufgezeichnet
Dim intRow As Integer 'inRow Reihenvariable
Dim intColumn As Integer 'intColumn Spaltenvariable
Dim intRowlast As Integer 'intRowlast letzte Reihe
Dim intColumnlast As Integer 'intColumnlast letzte Spalte
Worksheets(1).Range("1:1").Find("", LookIn:=xlValues).Select
ActiveCell.FormulaR1C1 = "Stückzahl"
intColumn = ActiveCell.Column
intRow = ActiveCell.Row
intRow = intRow + 1
Cells(intRow, intColumn).Select
ActiveCell.FormulaR1C1 = "1"
ActiveCell.SpecialCells(xlLastCell).Select
intColumnlast = ActiveCell.Column
intRowlast = ActiveCell.Row
intRowlast = intRowlast - 1
wks.Range(Cells(intRow, intColumn), Cells(intRowlast, intColumnlast)).Select
Selection.FillDown
'Range("BH3").Select
'Selection.FillDown
End Sub


Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: FillDown oder AutoFill über variablen Range
15.01.2008 16:58:00
fcs
Hallo Thomas,
du hast die Objekt-Variable wks nicht per Set wks=Worksheets(1) gesetzt. Deshalb kommt es zum Makroabruch.
Da du eh nur im aktiven Blatt Aktionen ausführst kannst du "wks." am Zeilenanfang auch weglassen.
Etwas eleganter und schneller ist folgendes Makro, das die gleichen Aktionen durchführt. Insbesondere werden auch die überflüssigen Select-Anweisungen vermieden.

Sub Stückzahl_1_verfoll()
' stückzahl Makro
' Makro am 07.01.2008 von thomas.stock aufgezeichnet
Dim intRowlast As Integer 'intRowlast letzte Reihe
Dim intColumnlast As Integer 'intColumnlast letzte Spalte
Dim wks As Worksheet, Zelle As Range
Set wks = Worksheets(1)
With wks
Set Zelle = .Cells(1, .Columns.Count).End(xlToLeft).Offset(0, 1)
Zelle.Value = "Stückzahl"
Zelle.Offset(1, 0) = 1
intColumnlast = .Cells.SpecialCells(xlCellTypeLastCell).Column
intRowlast = .Cells.SpecialCells(xlCellTypeLastCell).Row - 1
.Range(Zelle.Offset(1, 0), Cells(intRowlast, intColumnlast)).FillDown
End With
End Sub


Gruß
Franz

Anzeige
Dim lngRowlast As Long
15.01.2008 17:06:55
Besser
oT

AW: Dim lngRowlast As Long
15.01.2008 17:40:00
fcs
Da hat Anonymus recht; dann gibt es keine Probleme in Tabellen mit mehr als 2^15 Datenzeilen.
Gruß
Franz

crossposting spotlight oT
15.01.2008 16:59:14
cross
ot
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

FillDown oder AutoFill über variable Range in Excel VBA


Schritt-für-Schritt-Anleitung

Um die Funktion FillDown in einem Excel-VBA-Makro über eine variable Range zu nutzen, kannst du folgende Schritte befolgen:

  1. Variablen deklarieren: Lege die benötigten Variablen für Zeilen und Spalten fest.
  2. Stückzahl eintragen: Finde die erste freie Spalte in der ersten Zeile und trage dort "Stückzahl" ein.
  3. Wert für FillDown setzen: Trage unter der Überschrift den Wert "1" ein.
  4. Bestimme die letzte Zeile: Ermittle die letzte Zeile, die Daten enthält.
  5. FillDown anwenden: Verwende die FillDown-Methode, um den Wert "1" in die darunter liegenden Zellen zu kopieren.

Hier ist ein Beispiel für ein VBA-Skript, das diese Schritte umsetzt:

Sub Stückzahl_1_verfoll()
    Dim intRowlast As Long ' letzte Reihe
    Dim intColumnlast As Long ' letzte Spalte
    Dim wks As Worksheet, Zelle As Range
    Set wks = Worksheets(1)

    With wks
        Set Zelle = .Cells(1, .Columns.Count).End(xlToLeft).Offset(0, 1)
        Zelle.Value = "Stückzahl"
        Zelle.Offset(1, 0) = 1
        intColumnlast = .Cells.SpecialCells(xlCellTypeLastCell).Column
        intRowlast = .Cells.SpecialCells(xlCellTypeLastCell).Row - 1
        .Range(Zelle.Offset(1, 0), Cells(intRowlast, intColumnlast)).FillDown
    End With
End Sub

Häufige Fehler und Lösungen

  • Fehler: Run-time error '424': Object required
    Lösung: Dieser Fehler tritt auf, wenn du eine nicht definierte Objekt-Variable wie wks verwendest. Stelle sicher, dass du Set wks = Worksheets(1) korrekt gesetzt hast.

  • Fehler: Method 'Range' of object '_Worksheet' failed
    Lösung: Überprüfe, ob die Range korrekt definiert wurde. Stelle sicher, dass die Variablen für die Zeilen und Spalten gültige Werte enthalten.


Alternative Methoden

Eine alternative Methode, um die Funktion FillDown zu nutzen, ist die Verwendung von AutoFill. Hierbei wird der Bereich, in dem die Werte ausgefüllt werden sollen, explizit angegeben. Beispiel:

Zelle.AutoFill Destination:=Range(Zelle, Zelle.Offset(intRowlast - intRow, 0))

Dies kann nützlich sein, wenn du eine andere Art von Ausfüllung benötigst, beispielsweise von einem Startwert zu einem Endwert.


Praktische Beispiele

Ein praktisches Beispiel könnte die Verwendung von FillDown zur Erstellung einer fortlaufenden Nummerierung in einer Spalte sein. Nachdem du den ersten Wert (z. B. "1") eingegeben hast, könntest du mit FillDown die Zellen darunter automatisch ausfüllen.


Tipps für Profis

  • Vermeide die Verwendung von Select und Activate, um die Ausführung deines Makros zu beschleunigen und es robuster zu machen.
  • Nutze Long anstelle von Integer für Zeilen- und Spaltenvariablen, um Probleme bei großen Datenmengen zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich das Makro auf ein anderes Arbeitsblatt anwenden?
Du kannst Set wks = Worksheets("NameDeinesBlattes") verwenden, um auf ein spezifisches Arbeitsblatt zuzugreifen.

2. Was kann ich tun, wenn FillDown nicht funktioniert?
Überprüfe, ob der Zielbereich korrekt definiert ist und dass die Zellen, die ausgefüllt werden sollen, keine Formate oder Daten enthalten, die das Ausfüllen verhindern könnten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige