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

Forumthread: Schleife durchlaufen bis Zeile leer

Schleife durchlaufen bis Zeile leer
Mario
Hallo Forumsgemeinde,
bin leider in VBA noch ziemlich lausig unterwegs. :-)
Brauche eigentlich nur eine einfache Schleife und kriegs nicht hin. Im Prinzip soll die Spalte A so lange durchlaufen werden bis kein Wert mehr vorhanden ist.
Beispiel
Spalte A
3333 - Wenn in Spalte A Wert kopiere aus einer anderen Liste die Werte in Spalte B bis D
3334 - nächster Kopiervorgang
usw. bis Spalte A leer.
Danke im Voraus für eure Hilfe
mfg
Mario
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Schleife durchlaufen bis Zeile leer
29.07.2009 21:30:49
Peter
Hallo Mario,
da Du nich verraten hast, welche Daten aus einer anderen List kopiert werden sollen, habe ich einfach Range("B2:D2").Value angegeben.
Option Explicit
Public Sub Kopieren()
Dim WkSh_Q   As Worksheet ' das Quell-Tabellenblatt - die Herkunft der Daten
Dim WkSh_Z   As Worksheet ' das  Ziel-Tabellenblatt - die Ausgabe
Dim lZeile   As Long
Application.ScreenUpdating = False
Set WkSh_Q = ThisWorkbook.Worksheets("Tabelle2") ' den Tabellenblattnamen ggf. anpassen!
Set WkSh_Z = ThisWorkbook.Worksheets("Tabelle1") ' den Tabellenblattnamen ggf. anpassen!
For lZeile = 1 To WkSh_Z.Cells(Rows.Count, 1).End(xlUp).Row
If WkSh_Z.Range("A" & lZeile).Value  "" Then
WkSh_Z.Range("B" & lZeile & ":D" & lZeile) = WkSh_Q.Range("B2:D2").Value
End If
Next lZeile
Application.ScreenUpdating = True
End Sub
Gruß Peter
Anzeige
AW: Schleife durchlaufen bis Zeile leer
29.07.2009 23:05:36
Mario
Hallo Peter,
erst mal danke für deine Hilfe. Komm damit leider nicht ganz zurecht - beschreib es jetzt nochmals genauer.
Habe in Tabelle 1 in Spalte A und B fixe Werte. In Tabelle 2 (C3:X3) habe ich Formeln (sverweis auf andere Dateien) fix hinterlegt.
Jetzt soll folgendes geschehen.
Start ist in Tabelle 1 (C3) - wenn B3 leer, dann kopiere aus Tabelle 2 (C3:X3) in Tabelle 1 (als erstes die Formeln) - danach das Ergebnis der Formeln nochmals kopieren (nur Werte)
nächste Zeile
Tabelle 1 (C4) - wenn B4 leer, dann kopiere aus Tabelle 2 (C3:X3) in Tabelle 1 (als erstes die Formeln) - danach das Ergebnis der Formeln nochmals kopieren (nur Werte)
usw.
Problem ist, dass ich ungefähr 12000 Zeilen mittels sverweis aus anderen Dateien auslesen muss und das funktioniert mit runterziehen nicht wirklich (da hängt sich die Datei immer auf). Das hoffe ich zu verhindern indem ich immer nur die eine Zeile aus Tabelle 2 kopiere, einfüge (damit die Daten gelesen werden können) und gleich danach nochmals kopiere und nur mehr die Werte einfüge. Danach gehts weiter mit der nächsten Zeile usw..
Ich bin mir zwar sicher, dass das ganze mittels vba sicher noch einfacher gehen würde, aber wie gesagt sind meine VBA-Kentnisse ziemlich lausig. Vielleicht kannst du oder jemand anders mir nochmals helfen.
mfg
Mario
Anzeige
Viele Formeln und Werte
30.07.2009 00:50:54
Erich
Hi Mario,
erst mal ein Klärungsversuch:
In 'Tabelle 2'!C3:X3 stehen 22 SVERWEIS-Formeln.
Das Suchkriterium in den Formel ist vermutlich B3, oder?
Der durchsuchte Bereich befindet sich in anderen Mappen. Sind diese geöffnet?
Das Verfahren, nachdem du vorzugehen beabsichtigst, ist vermutlich suboptimal.
Du willst ja erst die Formel kopieren, dann deren Werte.
Es könnte z. B. günstiger sein, spaltenweise vorzugehen.
(Formel in die Spalte kopieren, Formeln durch Werte ersetzen oder
Formel in VBA auswerten lassen und gleich nur Werte in die Zellen schreiben).
Eine kleine Beispielmappe (mit wenigen Zeilen) könnte da schon mehr Aufschluss geben.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Viele Formeln und Werte
30.07.2009 07:32:49
Mario
Hallo Erich,
danke, dass du mir so spät noch geantwortet hast.
Habe jetzt eine Testdatei angehängt - einen sverweis habe ich in der Tabbelle Formeln unterhalb als Text reinkopiert (sonst wäre die Datei zu gross und vor allem würde sowieso nichts angezeigt) :-)
Hier die Testdatei:
https://www.herber.de/bbs/user/63527.xls
Das mit dem Sverweis direkt über vba habe ich schon probiert aber irgendwie habe ich immer einen Fehler drinnen, darum hätte ich es jetzt so probiert (wollte die Datei eigentlich heute fertig bringen)
Wäre echt nett wenn du mir weiterhelfen könntest. Bin natürlich auch jederzeit für andere Vorschläge offen.
mfg
Mario
Schöne Grüße nach Kamp-Lintfort
Anzeige
noch Rückfragen
30.07.2009 09:16:16
Erich
Hi Mario,
zuerst ein Tipp:
Zwischen A1&B1 und VERKETTEN(A1;B1) gibt es keinen Unterschied,
außer dass es mit dem VERKETTEN mehr Zeichen und Platz braucht.
Also: VERKETTEN() braucht man nicht.
Deine Mappe reicht leider noch nicht ganz aus für die Entscheidung, wie man die Aufgabe effizient lösen kann.
Ist es so, dass
1. der Buchstabe in Sp. A über das Quell-Tabellenblatt entscheidet?
2. wenn A5&B5 in Spalte A des Quellblatts gefunden wird,
die Spalten D:O der Fundzeile in die Zellen C5:N5 des Zielblatts sollen?
Anders formuliert: Läuft der dritte SVERWEIS-Parameter in den Spalten C bis N von 4 bis 14?
Dann könnte man mit VBA A5&B5 in Spalte A des richtigen Quellblatts suchen und dann
die Werte aus der Fundzeile in einem Rutsch kopieren.
Eine Frage, die ich schon mal gestellt habe:
Ist die Quellmappe geöffnet, wenn du die Formeln kopierst?
Noch eine Frage:
Sind die Suchbegriffe in Spalte A der Quellblätter sortiert?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Schleife durchlaufen bis Zeile leer


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und aktiviere die Entwicklertools:

    • Gehe zu "Datei" > "Optionen" > "Menüband anpassen" und aktiviere die Entwicklertools.
  2. Füge ein neues Modul hinzu:

    • Klicke auf "Visual Basic" in der Entwicklertools-Registerkarte, dann auf "Einfügen" > "Modul".
  3. Kopiere den folgenden VBA-Code in das Modul:

    Public Sub SchleifeDurchlaufen()
       Dim WkSh_Q As Worksheet ' Quell-Tabellenblatt
       Dim WkSh_Z As Worksheet ' Ziel-Tabellenblatt
       Dim lZeile As Long
    
       Application.ScreenUpdating = False
    
       Set WkSh_Q = ThisWorkbook.Worksheets("Tabelle2") ' Tabellennamen anpassen
       Set WkSh_Z = ThisWorkbook.Worksheets("Tabelle1") ' Tabellennamen anpassen
    
       For lZeile = 1 To WkSh_Z.Cells(Rows.Count, 1).End(xlUp).Row
           If WkSh_Z.Range("A" & lZeile).Value <> "" Then
               WkSh_Z.Range("B" & lZeile & ":D" & lZeile).Value = WkSh_Q.Range("B2:D2").Value
           End If
       Next lZeile
    
       Application.ScreenUpdating = True
    End Sub
  4. Führe das Makro aus:

    • Drücke F5 oder gehe zu "Run" > "Run Sub/UserForm".

Häufige Fehler und Lösungen

  • Fehler: "Typen nicht übereinstimmend"

    • Überprüfe, ob die Daten in den Zellen, die du kopierst, den richtigen Datentyp haben.
  • Problem: Das Makro stoppt bei einer leeren Zelle

    • Stelle sicher, dass die Bedingung If WkSh_Z.Range("A" & lZeile).Value <> "" korrekt ist.
  • Fehler: "Objektvariable nicht gesetzt"

    • Achte darauf, dass die Tabellennamen in Set WkSh_Q und Set WkSh_Z korrekt sind.

Alternative Methoden

  • Excel Formeln: Wenn du die Schleife nicht verwenden möchtest, kannst du auch die WENN-Bedingung in Kombination mit INDEX und VERGLEICH verwenden, um Werte zu kopieren.

  • Array-Methoden: Um die Performance zu verbessern, kannst du die Daten in ein Array laden, die Schleife darauf anwenden und anschließend zurück ins Arbeitsblatt schreiben.


Praktische Beispiele

  • Kopieren von Werten: Um aus einer bestimmten Zeile Werte zu kopieren, kannst du anpassen:

    If WkSh_Z.Range("B" & lZeile).Value = "" Then
       WkSh_Z.Range("C" & lZeile & ":X" & lZeile).Value = WkSh_Q.Range("C3:X3").Value
    End If
  • Durchlaufen einer Spalte bis zur letzten Zeile: Verwende die Funktion End(xlUp) um die letzte Zeile effizient zu finden.


Tipps für Profis

  • ScreenUpdating deaktivieren: Setze Application.ScreenUpdating = False am Anfang deines Codes, um die Geschwindigkeit zu erhöhen.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um unerwartete Fehler zu erfassen und zu protokollieren.

  • Optimierung: Wenn du große Datenmengen verarbeitest, consideriere die Verwendung von Range.Value anstelle von Zelle für Zelle.


FAQ: Häufige Fragen

1. Wie kann ich die Schleife anpassen, um nur bestimmte Zellen zu bearbeiten? Du kannst die Bedingung in der Schleife anpassen, um nur bestimmte Zeilen oder Spalten zu verarbeiten.

2. Was ist der Unterschied zwischen For Each und For Schleifen in VBA? For Each durchläuft eine Sammlung von Objekten, während For auf einen Zähler basiert und eine bestimmte Anzahl von Iterationen ermöglicht.

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