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

Forumthread: Makro > Text in Spalten

Makro > Text in Spalten
Mandy
Hi,
ich suche eine Funktion (Makro) , die etwar das gleiche macht, wie "Text in Spalten"
Ich habe eine grosse Tabelle, die in etwar so aussieht:
In Spalte A steht ein String:
2009-01-01 12:39 Eingang:Raum - 1234567;B2233445566 -> B1B2B3B4
NUn möchte ich den String zerschneiden in verschiedene Teile.
In Spalte B soll dann nachher shten:
"2009-01-01 12:39"
In Spalte C soll dann nachher shten:
"Eingang"
In Spalte D soll dann nachher shten:
"Raum"
In Spalte E soll dann nachher shten:
"1234567"
In Spalte F soll dann nachher shten:
"B2233445566"
In Spalte G soll dann nachher shten:
"B1B2B3B4"
Dabei sollen folgende Trennzeichen definiert werden:
Spalte B: nach 20 Zeichen
Spalte C: bis ":" kommt
Spalte D: bis "-" kommt
Spalte E: bis Semikolon kommt
Spalte F: bis "->" kommt
Spalte G: Rest
Ein Makro deswegen, weil die Funktion öftern (immer wieder) ausgeführt werden soll und dass die Trennpunkte immer gleich sind.( Egal, wer die Daten trennt)
Kann man das per Makro definieren ?
Danke mal
Mandy
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Makro > Text in Spalten
08.07.2009 09:37:26
David
Hallo Mandy,
vielleicht reicht dir auch eine Formellösung:
Tabelle1
 ABCDEFG
12009-01-01 12:39 Eingang:Raum - 1234567;B2233445566 -> B1B2B3B42009-01-01 12:39EingangRaum1234567B2233445566B1B2B3B4
22009-01-01 12:39 Eingang:Raum - 1234567;B2233445566 -> B1B2B3B42009-01-01 12:39EingangRaum1234567B2233445566B1B2B3B4
3  WAHRWAHRWAHRWAHRWAHRWAHR

verwendete Formeln
Zelle Formel
B2 =LINKS(A2;16)
C2 =GLÄTTEN(WECHSELN(LINKS(A2;SUCHEN(":";A2;20)-1);B2;""))
D2 =TEIL(A2;SUCHEN(":";A2;20)+1;SUCHEN("-";A2;20)-SUCHEN(":";A2;20)-2)
E2 =TEIL(A2;SUCHEN("-";A2;10)+2;SUCHEN(";";A2)-SUCHEN("-";A2;10)-2)
F2 =TEIL(A2;SUCHEN(";";A2)+1;SUCHEN("->";A2)-SUCHEN(";";A2)-2)
G2 =TEIL(A2;SUCHEN("->";A2)+3;99)
B3 =IDENTISCH(B1;B2)
C3 =IDENTISCH(C1;C2)
D3 =IDENTISCH(D1;D2)
E3 =IDENTISCH(E1;E2)
F3 =IDENTISCH(F1;F2)
G3 =IDENTISCH(G1;G2)

Tabellendarstellung in Foren Version 1.8


Gruß
David
Anzeige
AW: Makro > Text in Spalten
08.07.2009 09:42:21
Chris
Servus Mandy,
als Makro würd ich's so machen (Hier ab Zeile 1 bis zur letzten in Spalte A):

Sub t()
Dim Teilstring As String, i As Long, lngLetzte As Long, TeilName As Variant, Index As Variant
lngLetzte = Cells(65536, 1).End(xlUp).Row
For i = 1 To lngLetzte
Teilstring = Cells(i, 1)
Range("B" & i) = "'" & Left(Teilstring, 16)
TeilName = Right(Teilstring, Len(Teilstring) - Len(Range("B" & i)))
Index = Split(TeilName, ":")
Range("C" & i) = Trim(Index(0))
TeilName = Trim(Index(1))
Index = Split(TeilName, "-")
Range("D" & i) = Trim(Index(0))
TeilName = Trim(Index(1)) & "-" & Index(2)
Index = Split(TeilName, ";")
Range("E" & i) = Trim(Index(0))
TeilName = Trim(Index(1))
Index = Split(TeilName, "->")
Range("F" & i) = Trim(Index(0))
Range("G" & i) = Trim(Index(1))
Next i
End Sub


Das Makro ist ohne Fehlerbehandlung, falls der String mal abweicht gibt's einen Fehler.
Gruß
Chris

Anzeige
AW: Makro > Text in Spalten
08.07.2009 10:54:32
Mandy
Hallo Chris,
danke, ein Teil funktioniert mal. Nur nochg eins:
ich habe gerade in meinen Daten gesehen, dass e svorkommen kann, dass ein Teil-String mal fehlt. ZB es steht nichtso drin:
2009-01-01 12:39 Eingang:Raum - 1234567;B2233445566 -> B1B2B3B4
sondern
2009-01-01 12:39 Eingang:Raum - -> B1B2B3B4.
also der Block 1234567;B2233445566 fehlt (bzw ist leer)
Wenn ich dann den Code ausführe, rutscht der Teilstring B1B2B3B4 im eine Spalte weiter nach links , wahrscheinlich aus der Folgerung heraus, weil da nichts drin steht.
Die Teilstrings sollten aber immer untereinander stehen. Sprich, wenn mal ei Teil fehlt, solte der nachfolgende Teil-String nicht in dessen Zellle rutschen.
Kann man das noch irgend wie verhindern ?
Sonst Danke
Mandy
Anzeige
AW: Makro > Text in Spalten
08.07.2009 17:53:21
Chris
Servus Mandy,
für den angegebenen Fall (2009-01-01 12:39 Eingang:Raum - -> B1B2B3B4) geht es so. Hier kann auch der Pfeil fehlen. Sollten aber das - oder der : fehlen gibt es trotzdem Verschiebungen, da ich diese dann nicht richtig zuordnen kann.
Sub t()
Dim Teilstring As String, i As Long, lngLetzte As Long, TeilName As Variant, Index As Variant,  _
k As Long, bol As Boolean
lngLetzte = Cells(65536, 1).End(xlUp).Row
For i = 1 To lngLetzte
Teilstring = Cells(i, 1)
Range("B" & i) = "'" & Left(Teilstring, 16)
TeilName = Right(Teilstring, Len(Teilstring) - Len(Range("B" & i)))
On Error Resume Next
For k = 1 To Len(TeilName)
If Mid(TeilName, k, 1) = ":" Then
bol = True
Exit For
End If
Next k
If bol Then
Index = Split(TeilName, ":")
Range("C" & i) = Trim(Index(0))
TeilName = Trim(Index(1))
bol = False
End If
For k = 1 To Len(TeilName)
If Mid(TeilName, k, 1) = "-" And Mid(TeilName, k + 1, 1)  ">" Then
bol = True
Exit For
End If
Next k
If bol Then
Index = Split(TeilName, "-")
Range("D" & i) = Trim(Index(0))
If UBound(Index) = 2 Then
TeilName = Trim(Index(1)) & "-" & Index(2)
Else
TeilName = Trim(Index(1))
End If
bol = False
End If
For k = 1 To Len(TeilName)
If Mid(TeilName, k, 1) = ";" Then
bol = True
Exit For
End If
Next k
If bol Then
Index = Split(TeilName, ";")
Range("E" & i) = Trim(Index(0))
TeilName = Trim(Index(1))
End If
For k = 1 To Len(TeilName)
If Mid(TeilName, k, 1) = "-" And Mid(TeilName, k + 1, 1) = ">" Then
bol = True
Exit For
End If
Next k
If bol Then
Index = Split(TeilName, "->")
Range("F" & i) = Trim(Index(0))
Range("G" & i) = Trim(Index(1))
bol = False
End If
On Error GoTo 0
Next i
End Sub
probier's mal aus.
Gruß
Chris
Anzeige
Danke Chris, so ist es OK
09.07.2009 07:45:20
Mandy
..Danke Dir, damit kann ich super leben.
Vielen Dank
Mandy
Sorry, habe einen kleinen Fehler gemacht...
09.07.2009 10:12:18
Mandy
Hi Chris,
habe gerade gesehen, ich habe einen kleinen Fehler bei der Aufteilung der Teilstrings gemacht:
Hier noch mal mein Beispiel:
2009-01-01 12:39 Eingang:Raum - 1234567;B2233445566 -> B1B2B3B4
in meinem forigen Trade habe ich geschrieben , dass ich den Teilstring: 1234567;B2233445566 geteilt haben will, das war falsch, soll zusammen bleiben.
Hier nochmal die Aufteilung:
2009-01-01 12:39
Eingang
Raum
1234567;B2233445566
B1B2B3B4
Sorry, war mein Fehler. was muss ich denn ändern ?
Danke
Mandy
Anzeige
AW: Sorry, habe einen kleinen Fehler gemacht...
09.07.2009 18:27:37
Chris
Servus Mandy,
nimm diesen Teil aus dem Makro:
Sub t()
For k = 1 To Len(TeilName)
If Mid(TeilName, k, 1) = ";" Then
bol = True
Exit For
End If
Next k
If bol Then
Index = Split(TeilName, ";")
Range("E" & i) = Trim(Index(0))
TeilName = Trim(Index(1))
End If
End Sub
und ändere:
Sub t()
If bol Then
Index = Split(TeilName, "->")
Range("F" & i) = Trim(Index(0))
Range("G" & i) = Trim(Index(1))
bol = False
End If
On Error goTo 0
End Sub
in:
Sub t()
If bol Then
Index = Split(TeilName, "->")
Range("E" & i) = Trim(Index(0))
Range("F" & i) = Trim(Index(1))
bol = False
End If
On Error goTo 0
End Sub

ich gehe davon aus, dass dann in Spalte G nichts mehr steht, da ja ein Teilstring fehlt.
Gruß
Chris
Anzeige
AW: Nachtrag
09.07.2009 18:36:51
Chris
Servus,
ändere den letzten Teil so:
Sub t()
If bol Then
Index = Split(TeilName, "->")
Range("E" & i) = Trim(Index(0))
Range("F" & i) = Trim(Index(1))
bol = False
Else
For k = 1 To Len(TeilName)
If Mid(TeilName, k, 1) = ";" Then
bol = True
Exit For
End If
Next k
If bol Then
Range("E" & i) = Trim(TeilName)
End If
End If
On Error GoTo 0
End Sub
Dann wird auch der Teilstring in E mit dem ;(xxx;yyy) gesetzt, wenn der -> fehlt.
Gruß
Chris
Anzeige
AW: Nachtrag
13.07.2009 08:51:13
Mandy
Hallo Chris,
Sorry, war unterwegs.
So , habe mal Deinen Code getestet, ich hoffe , habe alles richtig gemacht. Ein kleines Problem habe ich noch: wenn ein Teilstring E ("1234567;B2233445566") leer ist, dann wird F (Teilstring hinter dem "->")
nicht geschrieben.
Wenn E vorhanden, wird auch F aufgelöst.
Kannst Du sehen, warum ? Hier nochmal der Complete Code:
Danke
Private Sub CommandButton2_Click()
Dim Teilstring As String, i As Long, lngLetzte As Long, TeilName As Variant, Index As Variant,  _
_
k As Long, bol As Boolean
lngLetzte = Cells(65536, 1).End(xlUp).Row
For i = 1 To lngLetzte
Teilstring = Cells(i, 1)
Range("B" & i) = "'" & Left(Teilstring, 16)
TeilName = Right(Teilstring, Len(Teilstring) - Len(Range("B" & i)))
On Error Resume Next
For k = 1 To Len(TeilName)
If Mid(TeilName, k, 1) = ":" Then
bol = True
Exit For
End If
Next k
If bol Then
Index = Split(TeilName, ":")
Range("C" & i) = Trim(Index(0))
TeilName = Trim(Index(1))
bol = False
End If
For k = 1 To Len(TeilName)
If Mid(TeilName, k, 1) = "-" And Mid(TeilName, k + 1, 1)  ">" Then
bol = True
Exit For
End If
Next k
If bol Then
Index = Split(TeilName, "-")
Range("D" & i) = Trim(Index(0))
If UBound(Index) = 2 Then
TeilName = Trim(Index(1)) & "-" & Index(2)
Else
TeilName = Trim(Index(1))
End If
bol = False
End If
If bol Then
Index = Split(TeilName, "->")
Range("E" & i) = Trim(Index(0))
Range("F" & i) = Trim(Index(1))
bol = False
Else
For k = 1 To Len(TeilName)
If Mid(TeilName, k, 1) = ";" Then
bol = True
Exit For
End If
Next k
If bol Then
Range("E" & i) = Trim(TeilName)
End If
End If
On Error GoTo 0
Next i
End Sub

Anzeige
AW: Nachtrag
13.07.2009 15:40:38
Chris
Servus,
so sollte es passen:
Private Sub CommandButton2_Click()
Dim Teilstring As String, i As Long, lngLetzte As Long, TeilName As Variant, Index As Variant,  _
k As Long, bol As Boolean
lngLetzte = Cells(65536, 1).End(xlUp).Row
For i = 1 To lngLetzte
Teilstring = Cells(i, 1)
Range("B" & i) = "'" & Left(Teilstring, 16)
TeilName = Right(Teilstring, Len(Teilstring) - Len(Range("B" & i)))
On Error Resume Next
For k = 1 To Len(TeilName)
If Mid(TeilName, k, 1) = ":" Then
bol = True
Exit For
End If
Next k
If bol Then
Index = Split(TeilName, ":")
Range("C" & i) = Trim(Index(0))
TeilName = Trim(Index(1))
bol = False
End If
For k = 1 To Len(TeilName)
If Mid(TeilName, k, 1) = "-" And Mid(TeilName, k + 1, 1)  ">" Then
bol = True
Exit For
End If
Next k
If bol Then
Index = Split(TeilName, "-")
Range("D" & i) = Trim(Index(0))
If UBound(Index) = 2 Then
TeilName = Trim(Index(1)) & "-" & Index(2)
Else
TeilName = Trim(Index(1))
End If
bol = False
End If
For k = 1 To Len(TeilName)
If Mid(TeilName, k, 1) = "-" And Mid(TeilName, k + 1, 1) = ">" Then
bol = True
Exit For
End If
Next k
If bol Then
Index = Split(TeilName, "->")
Range("E" & i) = Trim(Index(0))
Range("F" & i) = Trim(Index(1))
bol = False
Else
For k = 1 To Len(TeilName)
If Mid(TeilName, k, 1) = ";" Then
bol = True
Exit For
End If
Next k
If bol Then
Range("E" & i) = Trim(TeilName)
End If
End If
On Error GoTo 0
Next i
End Sub
Gruß
Chris
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Excel: Text in Spalten mit VBA aufteilen


Schritt-für-Schritt-Anleitung

Um mit VBA die Funktion "Text in Spalten" zu automatisieren, kannst Du das folgende Makro verwenden. Es zerlegt einen String in mehrere Teile und platziert diese in verschiedenen Spalten.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Wähle im Projektfenster die gewünschte Arbeitsmappe aus und füge ein neues Modul hinzu (Einfügen > Modul).
  3. Füge den folgenden Code in das Modul ein:
Sub TextInSpaltenVBA()
    Dim Teilstring As String, i As Long, lngLetzte As Long, TeilName As Variant, Index As Variant
    lngLetzte = Cells(65536, 1).End(xlUp).Row
    For i = 1 To lngLetzte
        Teilstring = Cells(i, 1)
        Range("B" & i) = "'" & Left(Teilstring, 16) ' Datum und Uhrzeit
        TeilName = Right(Teilstring, Len(Teilstring) - Len(Range("B" & i)))

        ' Aufteilen der Teilstrings
        On Error Resume Next
        Index = Split(TeilName, ":")
        Range("C" & i) = Trim(Index(0)) ' Eingang
        TeilName = Trim(Index(1))

        Index = Split(TeilName, "-")
        Range("D" & i) = Trim(Index(0)) ' Raum
        TeilName = Trim(Index(1)) & "-" & Index(2)

        Index = Split(TeilName, ";")
        Range("E" & i) = Trim(Index(0)) ' 1234567;B2233445566
        TeilName = Trim(Index(1))

        Index = Split(TeilName, "->")
        Range("F" & i) = Trim(Index(0)) ' B2233445566
        Range("G" & i) = Trim(Index(1)) ' B1B2B3B4
    Next i
End Sub
  1. Schließe den VBA-Editor und kehre zu Excel zurück.
  2. 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: Teilstrings rutschen in die falschen Spalten.

    • Lösung: Stelle sicher, dass in den Daten die erwarteten Trennzeichen wie ":", "-", ";" vorhanden sind. Ansonsten kann es zu Verschiebungen kommen.
  • Fehler: Teilstrings fehlen oder sind leer.

    • Lösung: Implementiere eine Fehlerbehandlung im Code, um sicherzustellen, dass bei fehlenden Teilstrings die nachfolgenden Strings in den richtigen Spalten bleiben.

Alternative Methoden

Wenn Du keine VBA-Lösung verwenden möchtest, kannst Du auch die integrierte Funktion "Text in Spalten" in Excel nutzen:

  1. Markiere die Zelle(n) mit den Daten.
  2. Gehe zu Daten > Text in Spalten.
  3. Wähle Getrennt und klicke auf Weiter.
  4. Wähle die gewünschten Trennzeichen (z.B. Semikolon, Leerzeichen) und klicke auf Fertig stellen.

Praktische Beispiele

Hier sind einige Beispiele, um zu zeigen, wie das Makro funktioniert:

A (Original) B (Datum) C (Eingang) D (Raum) E (Nummer) F (B2233445566) G (B1B2B3B4)
2009-01-01 12:39 Eingang:Raum - 1234567;B2233445566 -> B1B2B3B4 2009-01-01 12:39 Eingang Raum 1234567;B2233445566 B2233445566 B1B2B3B4
2009-01-01 12:39 Eingang:Raum - -> B1B2B3B4 2009-01-01 12:39 Eingang Raum B1B2B3B4

Tipps für Profis

  • Nutze On Error Resume Next, um Fehler zu ignorieren, aber sei vorsichtig, da dies auch wichtige Fehler übersehen kann.
  • Du kannst das Makro erweitern, um weitere Trennzeichen zu berücksichtigen oder es an spezifische Anforderungen anzupassen.
  • Für eine effizientere Arbeit mit großen Datenmengen kannst Du die Berechnungseinstellungen während der Makroausführung auf xlCalculationManual setzen und nach Abschluss zurück auf xlCalculationAutomatic ändern.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, wenn die Struktur der Daten anders ist? Passe die Trennzeichen im Split-Befehl an, um die neuen Strukturen zu berücksichtigen.

2. Funktioniert das Makro auch in Excel Online? Nein, VBA-Makros sind nicht in Excel Online verfügbar. Du musst Excel Desktop verwenden.

3. Was mache ich, wenn ich ein Fehler im Makro bekomme? Überprüfe die Struktur deiner Daten und die verwendeten Trennzeichen. Stelle sicher, dass alle erwarteten Trennzeichen vorhanden sind.

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