Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1536to1540
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
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
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
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige