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

Forumthread: Makro ausführen bis Zellen leer sind

Makro ausführen bis Zellen leer sind
31.05.2020 20:38:02
Andreas
Hallo alle zusammen,
Ich habe ein Makro aufgenommen und das klappt soweit ganz gut.
Leider muß ich für jeden Datensatz das Makro ausführen was sich in die Länge zieht.
Ich möchte gerne das Makro einmal aktivieren und das soll so lange ausgeführt werden bis die Zellen oder die erste Zelle A6 im Blatt Rohdaten leer sind. Vielleicht könnte hier einer so nett sein und mir dabei helfen.
Hier mein Makro,
Sub Rohdaten_Einfügen()
' Rohdaten_Einfügen Makro
' Rohdaten Transformieren
' Tastenkombination: Strg+e
Columns("A:A").ColumnWidth = 37
Sheets("Transformiert").Select
Range("A2:J2").Select
Selection.ListObject.ListRows.Add (1)
Sheets("Rohdaten").Select
Range("A6,A7,A10,A16,A17,A19,A23,A25,A30,A31").Select
Range("A31").Activate
Selection.Copy
Sheets("Transformiert").Select
Range("A2:J2").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Sheets("Rohdaten").Select
Range("A1:A33").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
End Sub

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro ausführen bis Zellen leer sind
01.06.2020 07:40:37
Felix
Hallo Andreas,
so allgmein is aufgezeichneter Code ganz praktisch, aber nicht sehr schön und außerdem sehr rechenaufwändig
Bereich.Select
Selection.
Aktion
lässt sich meist zusammenfassen zu Bereich.Aktion
Sub Rohdaten_Einfügen()
' Rohdaten_Einfügen Makro
' Rohdaten Transformieren
' Tastenkombination: Strg+e
Sheets("Transformiert").Range("A2:J2").ListObject.ListRows.Add (1)
Sheets("Rohdaten").Range("A6,A7,A10,A16,A17,A19,A23,A25,A30,A31").Copy
Sheets("Transformiert").Range("A2:J2").PasteSpecial Paste:=xlPasteAll, Transpose:=True
Sheets("Rohdaten").Range("A1:A33").Delete Shift:=xlUp
End Sub
Das hier wäre nur dein Makro zusammengefasst. Probier es nochmal aus und versuch den Unterschied zu verstehen.
Wenn du Aktionen wiederholen möchtest gibt es 2 Möglichkeiten

For i = 1 To X
Aktion
Next i
Damit wird die Aktion X mal wiederholt. Setze Für X eine Zahl deiner Wahl ein und die Aktion wiederholt sich.

Do While [Bedingung]
Aktion
Loop
Damit wird die Aktion solange wiederholt, wie die Bedingung wahr ist.
Eine Bedingung wäre z.B.
Sheets("Rohdaten").Range("A6").Value  ""

Diese Bedingung bedeutet Wert der Zelle A6 ungleich nichts
Als solange A6 nicht leer ist wiederhole die Aktion.

Sub Rohdaten_Einfügen()
' Rohdaten_Einfügen Makro
' Rohdaten Transformieren
' Tastenkombination: Strg+e
Do While Sheets("Rohdaten").Range("A6").Value  ""
Sheets("Transformiert").Range("A2:J2").ListObject.ListRows.Add (1)
Sheets("Rohdaten").Range("A6,A7,A10,A16,A17,A19,A23,A25,A30,A31").Copy
Sheets("Transformiert").Range("A2:J2").PasteSpecial Paste:=xlPasteAll, Transpose:=True
Sheets("Rohdaten").Range("A1:A33").Delete Shift:=xlUp
Loop
End Sub

Probier dich mal selber daran aus.
Schöne Grüße Felix
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Makro ausführen bis Zellen leer sind


Schritt-für-Schritt-Anleitung

Um ein Excel VBA-Makro zu erstellen, das ausgeführt wird, bis eine Zelle leer ist, folge diesen Schritten:

  1. Öffne Excel und gehe zu deinem Arbeitsblatt, in dem sich die Daten befinden.

  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" und wähle "Einfügen" > "Modul".
  4. Kopiere den folgenden Code in das Modul:

    Sub Rohdaten_Einfügen()
       ' Rohdaten_Einfügen Makro
       ' Rohdaten Transformieren
       ' Tastenkombination: Strg+e
       Do While Sheets("Rohdaten").Range("A6").Value <> ""
           Sheets("Transformiert").Range("A2:J2").ListObject.ListRows.Add (1)
           Sheets("Rohdaten").Range("A6,A7,A10,A16,A17,A19,A23,A25,A30,A31").Copy
           Sheets("Transformiert").Range("A2:J2").PasteSpecial Paste:=xlPasteAll, Transpose:=True
           Sheets("Rohdaten").Range("A1:A33").Delete Shift:=xlUp
       Loop
    End Sub
  5. Schließe den VBA-Editor und kehre zu Excel zurück.

  6. Führe das Makro aus, indem du ALT + F8 drückst, das Makro auswählst und auf "Ausführen" klickst.


Häufige Fehler und Lösungen

  • Fehler: Excel-Formel nicht ausführen

    • Lösung: Stelle sicher, dass die Zellreferenzen korrekt sind und dass die Zelle A6 die richtige Bedingung hat.
  • Fehler: Objekt nicht gefunden

    • Lösung: Überprüfe, ob das Arbeitsblatt "Rohdaten" und "Transformiert" korrekt benannt sind.
  • Fehler: Ausführung des Makros dauert zu lange

    • Lösung: Reduziere die Anzahl der zu kopierenden Zellen oder optimiere den Code, um die Effizienz zu steigern.

Alternative Methoden

Es gibt verschiedene Ansätze, um ein ähnliches Ziel zu erreichen:

  1. Verwenden von For-Schleifen:

    For i = 6 To 33
       If Sheets("Rohdaten").Cells(i, 1).Value <> "" Then
           ' Aktionen hier
       End If
    Next i
  2. Do While-Schleife: Du kannst auch die Do While-Schleife verwenden, um die Zellen zu verarbeiten, bis eine leere Zelle gefunden wird, wie im Beispiel oben.


Praktische Beispiele

Hier ist ein Beispiel, das zeigt, wie du Daten aus einer Liste in eine andere verschieben kannst, bis eine bestimmte Zelle leer ist:

Sub Beispiel_Makro()
    Do While Sheets("Daten").Range("A1").Value <> ""
        ' Datenverarbeitung hier
        Sheets("Ziel").Range("A1").Value = Sheets("Daten").Range("A1").Value
        Sheets("Daten").Range("A1").Delete Shift:=xlUp
    Loop
End Sub

Tipps für Profis

  • Vermeide die Verwendung von Select und Selection: Dies erhöht die Effizienz deines Codes erheblich. Verwende stattdessen direkt die Zellreferenzen.

  • Nutze Fehlerbehandlung: Implementiere On Error Resume Next, um mögliche Laufzeitfehler zu ignorieren.

  • Testen in kleinen Schritten: Führe dein Makro schrittweise aus, um sicherzustellen, dass jede Aktion wie gewünscht funktioniert.


FAQ: Häufige Fragen

1. Wie kann ich das Makro automatisieren?
Du kannst das Makro über ein Ereignis wie Workbook_Open oder Worksheet_Change auslösen.

2. Was mache ich, wenn ich eine große Datenmenge habe?
Für größere Datenmengen kann es sinnvoll sein, den Code zu optimieren, indem du Arrays verwendest, um die Leistung zu steigern.

3. Wie kann ich überprüfen, ob die Zelle A6 leer ist?
Du kannst die Bedingung im Code so anpassen: If Sheets("Rohdaten").Range("A6").Value = "" Then.

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