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

Forumthread: Loop bei erster leerer Zelle beenden und...

Loop bei erster leerer Zelle beenden und...
26.01.2017 21:10:41
Mike
Hallo,
ich bin neu hier und hoffe, Ihr könnt mir weiterhelfen.
Ich möchte mittels Makro die Werte aus Spalte A (Anzahl variabel) durch Kommas und Klammern ergänzen.
Mein Code funktioniert soweit, ich suche jedoch noch nach einer Lösung für folgende Punkte:
1) Die Werte werden hier manuall in Spalte A eingefügt und enthalten keine leeren Zellen, d.h. die erste leere Zelle bedeutet das Ende der Liste.
Wie kann ich vorgeben, dass der Loop bei der ersten leeren Zelle stoppt, damit nicht immer die ganze Spalte durchsucht wird ?
2) Wie kann ich das Komma nach dem letzten Wert in meiner Liste entfernen (alle anderen Kommas sollen bleiben) ?
3) Wie kann ich anschließend feststellen, ob die Anzahl der Werte (varRowCount) ein Vielfaches von 1000 ist, also z.B. 2000, 3000 etc. ?
Mein Code:

Option Explicit
Private Sub test()
Dim cell As Range
Dim varIdList As String
Dim varRange As Range
Dim varRowCount As Integer
Set varRange = Range("A:A")
varRowCount = 0
varIdList = "(" & vbCrLf
Range("C1").Value = ""
For Each cell In varRange
If cell.Value  "" Then
varIdList = varIdList & cell.Value & "," & vbCrLf
varRowCount = varRowCount + 1
End If
Next
varIdList = varIdList & ")"
Range("C1").Value = varRowCount
MsgBox (varIdList)
End Sub

Vielen Dank im Voraus für Eure Hilfe,
Mike
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Loop bei erster leerer Zelle beenden und...
26.01.2017 21:27:01
Luschi
Hallo Mike,
zu 1) & 2)

For Each cell In varRange
If cell.Value  "" Then
varIdList = varIdList & cell.Value & "," & vbCrLf
varRowCount = varRowCount + 1
Else
Exit For
End If
Next
'beachte: vbCrLf besteht aus 2 ASCII-Zeichen, deshalb '- 3' (mit dem letzten Komma)
varIdList = Left(varIdList, Len(varIdList) - 3) & vbCrLf
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Loop bei erster leerer Zelle beenden und...
26.01.2017 21:33:02
Mike
Hallo Luschi,
vielen Dank für die schnelle Antwort und die guten Erklärungen - das ist super so ! :)
VG und einen schönen Abend,
Mike
AW: Ohne machts mehr Spaß!
26.01.2017 21:31:04
Gerd
Hallo Mike,
wofür soll 3.) der X Mod 1000 = 0 gut sein?
Sub Verketten()
With Cells(1, 1).CurrentRegion.Columns(1)
MsgBox Join(WorksheetFunction.Transpose(.Cells), "," & vbLf)
Cells(1, 3).Value = .Cells.Count
End With
End Sub
Gruß Gerd
Anzeige
AW: Ohne machts mehr Spaß!
26.01.2017 21:36:46
Mike
Hallo Gerd,
danke für Deine Antwort !
Der Hintergrund zu Punkt 3) ist folgender:
Ich muss die so erstellte Liste noch weiter aufteilen und zwar jeweils bei vollen Tausendern.
Dann soll die Liste mit den bisherigen Werten mit einer Klammer geschlossen werden (so wie ganz am Ende) und dann eine neue Liste für die nächsten Werte mit einer Klammer geöffnet werden.
Es dürfen also immer nur max. 999 Werte innerhalb einer Klammer stehen.
Meine Idee dazu war eine Überprüfung auf volle Tausender und dann dazu ein neues If / Else.
Kann man so verstehen, was ich damit meine ?
VG,
Mike
Anzeige
AW: Ohne machts mehr Spaß!
26.01.2017 21:59:28
Mike
Hallo Gerd,
ich werde die Frage 3) nochmal separat posten und dann etwas ausführlicher beschreiben.
Vielen Dank und VG,
Mike
AW: Ohne machts mehr Spaß!
26.01.2017 21:36:15
Gerd
Hallo Mike,
wofür soll 3.) der X Mod 1000 = 0 gut sein?
Sub Verketten()
With Cells(1, 1).CurrentRegion.Columns(1)
MsgBox Join(WorksheetFunction.Transpose(.Cells), "," & vbLf)
Cells(1, 3).Value = .Cells.Count
End With
End Sub
Gruß Gerd
Anzeige
AW: Loop bei erster leerer Zelle beenden und...
26.01.2017 21:37:24
Kursawe,
Salve
nur kurz
ad 1) und 2)
arbeite nicht mit for each und range,
sondern pack Dir ne Zeilenvariable und durchlaufe mit "do while ... loop" die Spalte
Bsp (Rohcode)

dim zeile as long
'Optional auch noch
dim abbruchgewuenscht as boolean
zeile = 1
abbruchgewuenscht = false
varidlist =""
do while not isempty(cells(zeile,1)) and not abbruchgewuenscht
'Anweisungen
if zeile > 1 then varidlist = varidlist & ","
varidlist = varidlist & 
'in den Anweisungen kannst auch noch für Spezialfälle das zusätzliche Abbruchkriterien  _
einbaun,
wenn spezialfall, dann abbruchgewuenscht = true
zeile = zeile+1
loop
ad3)
mit dem vielfachen von 1000...
kommt drauf an
willst Du nur wissen, obs ne bestimmte Schwelle überschreitet, dann mach einfach ne Division mit Ganzzahlergebnis
wenn Du wissen willst, obs genau ne 1000erZahl ist, dann machs mit modulo, Ergebnis muss dann halt 0 sein
sorry... bin zwischen Tür und Angel, deswegen nicht genauer
aber glaub, Du solltest damit zurecht kommen
aufpassen... nimm als Zeilenzaehler ne long, und nicht ne integer, sonst bekommst n Überlauf bei großen Sheets...
Thomas
Anzeige
AW: Loop bei erster leerer Zelle beenden und...
26.01.2017 21:39:47
Mike
Hallo Thomas,
vielen Dank für die schnelle Antwort und die guten Tipps, v.a. bez. Long statt Integer - werde ich gerne berücksichtigen. :)
VG,
Mike
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Werte in Excel mit VBA durchlaufen und bearbeiten


Schritt-für-Schritt-Anleitung

  1. Vorbereitung des Makros: Öffne Excel und gehe zu Entwicklertools > Visual Basic, um den VBA-Editor zu öffnen. Füge ein neues Modul hinzu.

  2. Code implementieren: Verwende den folgenden Code, um die Werte in Spalte A zu durchlaufen und bei der ersten leeren Zelle die Schleife zu beenden:

    Option Explicit
    Private Sub Test()
       Dim cell As Range
       Dim varIdList As String
       Dim varRange As Range
       Dim varRowCount As Long
       Set varRange = Range("A:A")
       varRowCount = 0
       varIdList = "(" & vbCrLf
    
       For Each cell In varRange
           If cell.Value <> "" Then
               varIdList = varIdList & cell.Value & "," & vbCrLf
               varRowCount = varRowCount + 1
           Else
               Exit For ' Schleife beenden bei erster leerer Zelle
           End If
       Next cell
    
       ' Letztes Komma entfernen
       varIdList = Left(varIdList, Len(varIdList) - 3) & vbCrLf
       Range("C1").Value = varRowCount
       MsgBox varIdList
    End Sub
  3. Anpassungen vornehmen: Stelle sicher, dass du die Variablen und Range entsprechend deiner Excel-Version und deinem Bedarf anpasst.


Häufige Fehler und Lösungen

  • Fehler: Schleife durchläuft die gesamte Spalte: Stelle sicher, dass du die Bedingung If cell.Value <> "" Then korrekt implementierst und Exit For zum Beenden der Schleife verwendest.

  • Fehler: Letztes Komma bleibt: Achte darauf, dass du das letzte Komma mit Left(varIdList, Len(varIdList) - 3) korrekt entfernst, bevor du das Ergebnis anzeigst.


Alternative Methoden

Eine alternative Methode zur Verwendung von For Each ist die Verwendung einer Do While-Schleife, wie im folgenden Beispiel:

Dim zeile As Long
zeile = 1
varIdList = ""

Do While Not IsEmpty(Cells(zeile, 1))
    If zeile > 1 Then varIdList = varIdList & ","
    varIdList = varIdList & Cells(zeile, 1).Value
    zeile = zeile + 1
Loop

Diese VBA Schleife bis leere Zelle ist besonders nützlich, wenn du eine gezielte Kontrolle über den Durchlauf der Zellen benötigst.


Praktische Beispiele

  1. Werte zusammenfügen: Verwende den Code, um alle Werte in Spalte A in ein kommagetrenntes Format zu bringen.

  2. Zählen der Werte: Du kannst den varRowCount verwenden, um die Anzahl der in Spalte A enthaltenen Werte zu ermitteln und zu analysieren, ob diese ein Vielfaches von 1000 sind.


Tipps für Profis

  • Verwendung von Long statt Integer: Achte darauf, Long für Zeilenvariablen zu verwenden, um Überläufe bei großen Datenmengen zu vermeiden.

  • Komplexe Bedingungen: Wenn du komplexere Bedingungen für das Beenden der Schleife benötigst, kannst du zusätzliche Abbruchkriterien in deine vba do while exit-Bedingung einbauen.


FAQ: Häufige Fragen

1. Wie kann ich die Schleife bei einer bestimmten Bedingung beenden?
Du kannst eine zusätzliche Bedingung in der Schleife einfügen, z. B. If cell.Value = "Bestimmter Wert" Then Exit For.

2. Was mache ich, wenn ich mehr als eine Spalte durchlaufen möchte?
Du kannst eine weitere Schleife einfügen oder die Funktion Cells anpassen, um mehrere Spalten gleichzeitig zu bearbeiten.

3. Wie kann ich die Werte in einer neuen Spalte speichern?
Ändere die Range("C1").Value Zeile, um die Ausgabe in einer anderen Zelle oder Spalte zu speichern, z.B. Range("D1").Value.

4. Ist dieser Code in allen Excel-Versionen anwendbar?
Ja, der Code sollte in den meisten modernen Excel-Versionen funktionieren, solange VBA unterstützt wird.

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