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

Loop bis Zelle leer ist

Forumthread: Loop bis Zelle leer ist

Loop bis Zelle leer ist
22.05.2017 17:02:09
Sandro
Hallo liebes Forum
Schon oft wurde mir hier geholfen, also hoffe ich auch jetzt wieder auf eure Hilfe.
Wie muss ich folgenden Code ergänzen, damit er so oft ausgeführt wird bis die Zelle A2 im Sheet "Stammdaten" leer ist?
Sub Daten_Üebertragen()
' Daten_Üebertragen Makro
Sheets("Aufbereitung Final").Select
Range("A2:H18").Select
Selection.Copy
Sheets("Datenzusammenstellung").Select
If Cells(1, 1).Offset(1, 0).Value = "" Then
Cells(1, 1).Offset(1, 0).Select
Else
Cells(1, 1).End(xlDown).Offset(1, 0).Select
End If
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks  _
_
:=False, Transpose:=False
Sheets("Stammdaten").Select
Rows("2:17").Delete
Sheets("Datenzusammenstellung").Select
End Sub
Vielen Dank & Gruss
Sandro
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Loop bis Zelle leer ist
22.05.2017 17:30:50
Daniel
Hi
im Prinzip so (die unnötigen Selects habe ich auch mal entfernt)

Sub Daten_Üebertragen()
Do Until Sheets("Stammdaten").Range("A2").Value = ""
Sheets("Aufbereitung Final").Range("A2:H18").Copy
Sheets("Datenzusammenstellung").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial _
Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:= _
False
Sheets("Stammdaten").Rows("2:17").Delete
Loop
End Sub
Da du den kopierten Bereich duplizierst (dh immer gleich einfügst) kannst du die Schleife auch weglassen, wenn du als Einfügebereich gleich den gesamten Zellbereich angibst.
(dh wenn du die Zellen A2:H18 kopierst und in A2:H35 einfügst, wird der Inhalt verdoppelt:
Sub Datenübertragen2()
Dim Anz As Long
Dim rngCopy As Range
Dim rngZiel As Range
Dim rngStamm As Range
Set rngCopy = Sheets("Aufbereitung Final").Range("A2:H18")
Set rngZiel = Sheets("Datenzusammenstellung").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
With Sheets("Stammdaten")
Set rngStamm = .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
End With
Anz = Int(rngStamm.Rows.Count / 16)
rngCopy.Copy
rngZiel.Resize(rngCopy.Rows.Count * Anz, rngCopy.Columns.Count).PasteSpecial  _
xlPasteValuesAndNumberFormats
rngStamm.EntireRow.Delete
End Sub

Gruß Daniel
Anzeige
AW: Loop bis Zelle leer ist
23.05.2017 11:01:52
Sandro
Hallo Daniel
Herzlichen Dank für deine schnelle Lösung! Variante 1 macht genau was ich möchte. Daher habe ich diese jetzt auch so übernommen.
Bei Variante 2 war das Ergebnis nicht ganz korrekt. Es wurden immer die selben Daten aufgelistet. Der Bereich in "Aufbereitung Final" ist mit INDIREKT Formeln mit "Stammdaten" verknüpft. Das heisst, wenn in Stammdaten diese 16 Zeilen gelöscht werden, stehen in "Aufbereitung Final" neue Daten.
Wenn du willst und Zeit hast, darfst du gerne einen Versuch starten mir zu erklären, wie der 2. Code funktioniert. Sonst belass ich es beim ersten, dieser funktioniert ja.
Gruss
Sandro
Anzeige
AW: Loop bis Zelle leer ist
23.05.2017 11:07:45
Daniel
Hi
wenn der kopierte Zellbereich Formeln enthält, die sich durch das Löschen der Zeilen in den Stammdaten verändern, musst du die erste Variante nehmen.
die zweite macht nur Sinn, wenn die kopierten Werte jedesmal die gleichen sind und der kopierte Bereich dupliziert wird.
Gruß Daniel
Anzeige
;
Anzeige

Infobox / Tutorial

Loop bis Zelle leer ist – VBA in Excel effektiv nutzen


Schritt-für-Schritt-Anleitung

Um einen Loop in Excel VBA zu erstellen, der die Datenübertragung durchführt, bis die Zelle A2 im Sheet "Stammdaten" leer ist, kannst du folgenden Code verwenden:

Sub Daten_Üebertragen()
    Do Until Sheets("Stammdaten").Range("A2").Value = ""
        Sheets("Aufbereitung Final").Range("A2:H18").Copy
        Sheets("Datenzusammenstellung").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial _
        Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Sheets("Stammdaten").Rows("2:17").Delete
    Loop
End Sub

Dieser Code verwendet eine Do Until Schleife, die so lange wiederholt wird, bis die Zelle A2 im Sheet "Stammdaten" leer ist. Dabei werden die Daten aus "Aufbereitung Final" in "Datenzusammenstellung" eingefügt.


Häufige Fehler und Lösungen

  1. Fehler: Der Loop wird nie beendet.

    • Lösung: Stelle sicher, dass die Zelle A2 im Sheet "Stammdaten" tatsächlich leer wird. Wenn dort weiterhin Daten stehen, wird die Schleife unendlich laufen.
  2. Fehler: Daten werden nicht korrekt kopiert.

    • Lösung: Überprüfe, ob der Bereich in "Aufbereitung Final" korrekt definiert ist. Du kannst auch die Größe des Bereichs anpassen, wenn weniger oder mehr Daten vorhanden sind.

Alternative Methoden

Falls du eine Alternative zur Schleifenstruktur suchst, kannst du auch den gesamten Zellbereich in einem Schritt kopieren. Hier ein Beispiel, das die Schleife vermeidet:

Sub Datenübertragen2()
    Dim rngCopy As Range
    Dim rngZiel As Range
    Set rngCopy = Sheets("Aufbereitung Final").Range("A2:H18")
    Set rngZiel = Sheets("Datenzusammenstellung").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)

    rngCopy.Copy
    rngZiel.Resize(rngCopy.Rows.Count, rngCopy.Columns.Count).PasteSpecial xlPasteValuesAndNumberFormats
    Sheets("Stammdaten").Rows("2:17").Delete
End Sub

Diese Methode kopiert die Daten in einem Durchgang, was die Ausführung beschleunigen kann.


Praktische Beispiele

Hier ist ein praktisches Beispiel, wie die Schleife funktioniert:

  1. Du hast Daten in "Aufbereitung Final" von A2 bis H18.
  2. Im "Stammdaten"-Sheet kannst du mehrere Zeilen haben.
  3. Bei jedem Durchlauf wird der Bereich A2:H18 kopiert und in "Datenzusammenstellung" eingefügt, bis A2 leer ist.

Wenn du mit dynamischen Daten arbeitest, die sich aufgrund von Formeln verändern, ist die erste Methode (mit Loop) die bessere Wahl.


Tipps für Profis

  • Komplexe Datenstrukturen: Wenn du mit Formeln arbeitest, achte darauf, dass die Daten in "Aufbereitung Final" immer aktuell sind. Das Löschen der Zeilen im "Stammdaten"-Sheet muss die Formeln in "Aufbereitung Final" beeinflussen, damit die neuen Daten korrekt übernommen werden.
  • Debugging: Nutze Debug.Print innerhalb der Schleife, um den Status der Zelle A2 zu überwachen und zu sehen, wie oft die Schleife durchlaufen wird.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um eine andere Zelle zu überprüfen? Du kannst die Zeile Do Until Sheets("Stammdaten").Range("A2").Value = "" ändern, z.B. in Do Until Sheets("Stammdaten").Range("B2").Value = "", um die Zelle B2 zu überprüfen.

2. Was passiert, wenn ich den Range in der Copy-Anweisung ändere? Wenn du den Range änderst, wird der neue Bereich kopiert. Stelle sicher, dass der neue Bereich die gewünschte Größe und die richtigen Daten enthält, um unerwartete Ergebnisse zu vermeiden.

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