Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1868to1872
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

Daten aus einer Zelle splitten

Daten aus einer Zelle splitten
05.02.2022 00:27:44
Julian
Hallo Excel Profil,
ich bins nochmal :)
Ich stehe vor folgendem Problem. Ich exportiere Shop Dateien, in welchem Kurse gebucht werden. Der Export Spuckt mit Zellen aus. Das Original steht in Spalte A.
Jetzt möchte ich mit Hilfe eines Makros, dass das Makro jedes Datum ab Spalte B einzeln auflistet. (siehe Datei)
https://www.herber.de/bbs/user/150894.xlsx
Weiß da jemand von Euch eine Lösung? Die Zeichenfolge und Menge ist leider immer unterschiedlich und mal mehr, mal weniger Daten.

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus einer Zelle splitten
05.02.2022 01:49:21
ralf_b

Sub splitdatum()
Dim x As Range
Dim artmp
Dim i As Long, y As Long
Dim pos As Long, cnt As Long
Dim sRange As String
cnt = 2
Do While Range("A" & cnt)  ""
y = 0
Set x = Range("A" & cnt)
If Right(x.Value, 1) = ")" Then
x.Offset(, 1 + y) = CDate(Left(x.Value, 10))
y = y + 1
Else
If Len(x) > 12 Then
sRange = Replace(x, "+", "")
sRange = Replace(sRange, "/", "")
artmp = Split(sRange, " ")
For pos = LBound(artmp) To UBound(artmp)
If artmp(pos)  "" Then
x.Offset(, 1 + y) = CDate(artmp(pos))
y = y + 1
End If
Next
Else
x.Offset(, 1 + y) = CDate(x.Value)
y = y + 1
End If
End If
cnt = cnt + 1
Loop
End Sub

Anzeige
AW: Daten aus einer Zelle splitten
05.02.2022 08:12:53
Julian
Jetzt bin ich zu blöd, es auf andere Spalten zu schreiben.
Der Code soll exakt das gleiche machen, aber nicht ab Spalte "A", sondern ab Spalte "BC"
Der Debugger bleibt bei x.Offset(, 1 + y) = CDate(artmp(pos)) stehen.
AW: Daten aus einer Zelle splitten
05.02.2022 08:38:01
{Boris}
Hi,

y = 0
bedeutet: Beginne in Spalte A (A ist die 1 - aber y wird ja direkt zu Beginn um 1 erhöht).
Für Beginn in Spalte BC muss demnach zu Beginn die Spaltennummer BB der Variablen y zugewiesen werden:

y = 54
Und sowas Range("A" & cnt) musst Du natürlich auch anpassen - aber das bekommst Du sicher hin ;-)
VG, Boris
Anzeige
AW: Daten aus einer Zelle splitten
05.02.2022 12:37:41
Julian
Das klingt alles logisch. Er bleibt aber immernoch an der Stelle stehen. Fällt Euch der Fehler auf?

Sub splitdatum()
Dim x As Range
Dim artmp
Dim i As Long, y As Long
Dim pos As Long, cnt As Long
Dim sRange As String
cnt = 2
Do While Range("BC" & cnt)  ""
y = 55
Set x = Range("BC" & cnt)
If Right(x.Value, 1) = ")" Then
x.Offset(, 1 + y) = CDate(Left(x.Value, 10))
y = y + 1
Else
If Len(x) > 12 Then
sRange = Replace(x, "+", "")
sRange = Replace(sRange, "/", "")
artmp = Split(sRange, " ")
For pos = LBound(artmp) To UBound(artmp)
If artmp(pos)  "" Then
x.Offset(, 1 + y) = CDate(artmp(pos))
y = y + 1
End If
Next
Else
x.Offset(, 1 + y) = CDate(x.Value)
y = y + 1
End If
End If
cnt = cnt + 1
Loop
End Sub

Anzeige
Ich hatte 54 geschrieben...
05.02.2022 12:50:18
{Boris}
Hi,
...denn 54 ist die Spalte vor BC - Du hast aber 55 draus gemacht - weshalb?
Ansonsten zeig Deine Mappe mit dem nicht funktionierenden Code.
VG, Boris
@Boris du bist noch dran, .....
05.02.2022 13:02:41
ralf_b
.. danke das du das übernimmst. Ich hatte deinen letzten Post nicht gesehen.
gruß
rb
AW: Daten aus einer Zelle splitten
05.02.2022 13:00:19
ralf_b
das Problem hättest du nicht, wenn du gleich die Beispieldatei korrekt gebaut hättest.
Sind die Beispieldaten denn wenigstens repräsentativ und vollständig was die Datenstruktur angeht?
y +1 muß die Startspalte für das Einfügen ergeben.
hier mal mit Erklärungen. Hoffentlich hilfts.

If Right(x.Value, 1) = ")" Then  'Prüfung ob eine Uhrzeit in Zelle steht, erkennbar an der letzten  Klammer
x.Offset(, 1 + y) = CDate(Left(x.Value, 10))
'  y = y + 1  'das kann hier evtl raus
Else
If Len(x) > 12 Then 'nochmals Prüfung ob in der Zelle mehr Zeichen als  datum + Zeit drin steht
sRange = Replace(x, "+", "")              'Trennzeichen raus, Ergebnis nach Variable sRange
sRange = Replace(sRange, "/", "")     'Trennzeichen raus, Ergebnis überschreibt Variable sRange
artmp = Split(sRange, " ")                                 'sRange in array aufteilen
For pos = LBound(artmp) To UBound(artmp)   'schleife über die Werte des Array
If artmp(pos)  "" Then                              'leere Werte vermeiden
x.Offset(, 1 + y) = CDate(artmp(pos))       'Datum eintragen
y = y + 1                                                   'Einfügespalte nach rechts rücken
End If
Next
Else
falls doch weniger als 13 Zeichen  in der Zelle stehen , dann wert direkt eintragen
x.Offset(, 1 + y) = CDate(x.Value)
' y = y + 1   'das kann evtl auch raus
End If
End If
cnt = cnt + 1  'Zeilenzähler in Spalte A nach unten
Loop
End Sub

Anzeige
AW: Daten aus einer Zelle splitten
05.02.2022 13:02:03
Julian
Hi, tut mir Leid, so weit habe ich mir da keine GEdanken gemacht, weil ich dachte, dass ich in der Lage wäre, die Spalten anzupassen.
Hier mal die Datei (Spalte BC) exakt wie im Ordiginal.
https://www.herber.de/bbs/user/150899.xlsm
Der "Kinderhundeführerschein"...
05.02.2022 13:08:31
{Boris}
Hi,
...macht im Durchlauf bei

artmp(pos) (für artmp(1) )
Probleme, da CDate damit im weiteren Verlauf logischerweise nix anfangen kann.
Ich hab mich jetzt nicht in den ganzen Code vertieft. Da Ralf das schon gemacht hat, wird er das sicher schnell erledigen können :-)
VG, Boris
Anzeige
Kinderhundeführerschein? war ja klar :)
05.02.2022 14:06:32
ralf_b
das hier auch die Datenbasis nicht ganz vollständig abgebildet wurde.
Jetzt müßte ich eigentlich total eingeschnappt sein und mir ein Papierkörnchen gönnen.
Ein Papierkörnchen trinke ich mit!
05.02.2022 14:45:06
{Boris}
Cheers! 🥃
VG Boris
AW: Ein Papierkörnchen trinke ich mit!
05.02.2022 14:50:59
ralf_b
na dann Prost,
PS: y = 54 haut nicht hin. Weil es ein Offset zu der Suchspalte ist und nicht die absolute Angabe der Spalte. Ich habe das diese Nacht geschrieben. Schon erstaunlich was ich so alles über Nacht vergesse.
gruß
rb
AW: Daten aus einer Zelle splitten
05.02.2022 14:47:08
ralf_b
so hier mein letzter Versuch, die Andern wollen auch noch in die Irre geführt werden. #teuflisches Lachen#

Sub splitdatum()
Dim x As Range
Dim artmp
Dim pos As Long, cnt As Long, y As Long
Dim sRange As String
cnt = 2  'startZeile der Daten
Do While Range("BC" & cnt)  ""
y = 0
Set x = Range("BC" & cnt)
sRange = Replace(x, "+", "")
sRange = Replace(sRange, "/", "")
artmp = Split(sRange, " ")
For pos = LBound(artmp) To UBound(artmp)
If artmp(pos)  "" Then
If IsDate(artmp(pos)) And Len(artmp(pos)) > 9 Then
x.Offset(, 1 + y).Value = CDate(artmp(pos))
y = y + 1
End If
End If
Next
cnt = cnt + 1
Loop
End Sub

Anzeige
AW: Daten aus einer Zelle splitten
05.02.2022 15:56:52
Julian
Es funktioniert!!!!!!! DANKE DANKE DANKE =) =) =) =)

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige