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

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

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige