Herbers Excel-Forum - das Archiv

kombinieren von 2 Split-Makros

Bild

Betrifft: kombinieren von 2 Split-Makros
von: Anton

Geschrieben am: 14.12.2006 17:38:41
Hallo Leute,
ich habe zwei Makros, die einen Datensatz splitten sollen.
Beide funktionieren sehr gut. (Dem Author nochmals herzlichen Dank dafür)
Meine Frage:
Wie muss ich die beiden schachteln, damit die datensätze nicht vermischt werden?
Hier der Code:
Sub Datensätze_teilen_klammer()
Dim LetzteZeile1 As Long
Dim aktiveZeile As Long
Dim Satz, SplitSatz, S, Zei
'Start-bedingung
LetzteZeile1 = ActiveSheet.UsedRange.Rows.Count
For aktiveZeile = LetzteZeile1 To 1 Step -1
If (Cells(aktiveZeile, 1).Value) <> "" Then
'Datensätze (Spalte A) anhand von " ) ( " in verschiedene Spalten trennen
'For Zei = 1 To Range("A65536").End(xlUp).Row
Satz = Mid(Cells(aktiveZeile, 1), 3)
Satz = Left(Satz, Len(Satz) - 2)
SplitSatz = Split(Satz, " ) ( ")
If UBound(SplitSatz) > 255 Then Msgbox "Houston, wir hamm das watt, wann kommt XL2007?"
For S = 0 To UBound(SplitSatz)
Cells(aktiveZeile, S + 1) = SplitSatz(S)
Next S
End If
Next aktiveZeile
End Sub

Sub Datensätze_teilen_schrägstrich()
'Datensätze (Spalte A) anhand von " / " in verschiedene Spalten trennen
Dim Satz, SplitSatz, S, Zei
For Zei = 1 To Range("A65536").End(xlUp).Row
Satz = Mid(Cells(Zei, 1), 3)
Satz = Left(Satz, Len(Satz) - 2)
SplitSatz = Split(Satz, " / ")
If UBound(SplitSatz) > 255 Then Msgbox "Houston, wir hamm das watt, wann kommt XL2007?"
For S = 0 To UBound(SplitSatz)
Cells(Zei, S + 1) = SplitSatz(S)
Next S
Next Zei
End Sub

...und so kann ein Datensatz aussehen:
( 25 / 1827437.001 / Bilanz & Buchhaltung / 16 / gekündigt ) ( 25 / 1827437.001 / Buchführungs Plus / 43 / gekündigt ) ( 25 / 1827437.001 / Buchführungs Plus / / in Ansicht gekündigt ) ( 25 / 1827437.001 / ControllerPlus Excel-Basic Upd / / in Ansicht gekündigt ) ( 25 / 1827437.001 / BBS Buchen u.Bilanzieren / 45 / gekündigt ) ( 25 / 1827437.001 / BBS Buchen u.Bilanzieren / 43 / gekündigt ) ( 25 / 1827437.001 / Buchführungs Plus / / in Ansicht gekündigt ) ( 25 / 1827437.001 / Kontierungs-Praxis-abc / 43 / gekündigt )
Wer von Euch kann mir bitte weiterhelfen?
Mein Dank geht schon jetzt in Eure Richtung.
Servus,
Anton
Bild

Betrifft: AW: kombinieren von 2 Split-Makros
von: fcs

Geschrieben am: 14.12.2006 20:07:12
Hallo Anton,
ersetze mit der Methode Replace in der Variablen Satz alle ") (" durch " / " führe dann den Split aus. Oder halt anders herum, je nachdem mit welchem Makro du arbeiten willst.
Gruss
Franz
Sub Datensätze_teilen_schrägstrich()
'Datensätze (Spalte A) anhand von " / " in verschiedene Spalten trennen
Dim Satz, SplitSatz, S, Zei
For Zei = 1 To Range("A65536").End(xlUp).Row
Satz = Mid(Cells(Zei, 1), 3)
Satz = Left(Satz, Len(Satz) - 2)
Satz = Replace(Satz, ") (", " / ")
SplitSatz = Split(Satz, " / ")
If UBound(SplitSatz) > 255 Then MsgBox "Houston, wir hamm das watt, wann kommt XL2007?"
For S = 0 To UBound(SplitSatz)
Cells(Zei, S + 1) = SplitSatz(S)
Next S
Next Zei
End Sub

Bild

Betrifft: AW: kombinieren von 2 Split-Makros
von: Erich G.

Geschrieben am: 14.12.2006 21:10:27
Hallo Anton,
ein etwas umfangreicherer Vorschlag, der dazu noch etwas länger läuft - er hat aber auch seine Vorteile.
Damit Werte wie 1827437.001 nicht in Zahlen umgewandelt werden,
bekommen die Zielzellen vor dem Einfügen das Zahlformat "@" für Text.
Im ersten Durchlauf wird nur ermittelt, wie viele (Text-)Spalten gebraucht werden.
In den Langetexten kommen hin und wieder zwei Schrägstriche vor, die durch nur ein Leerzeichen getrennt sind.
Hier wird dann ein zusätzliches Leerzeichen eingefügt, damit der Split richtig klappt. (Es entsteht eine leere Zelle.)
Und hier der Code:
Option Explicit
Sub Split_Klammern_Schraegstrich()
' Spalte A anhand von " ) ( " und " / " in verschiedene Spalten trennen
Dim lngL As Long, zz As Long, strQ As String, strErg() As String
Dim ss As Integer, intM As Integer
Const strTa = " / / "
Const strTb = " /  / "
Const strT1 = " ) ( "
Const strT2 = " / "
Sheets(1).Activate
lngL = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
For zz = 1 To lngL
If Len(Cells(zz, 1)) > 4 Then
strQ = Cells(zz, 1)
strQ = Right(strQ, Len(strQ) - 2)
strQ = Left(strQ, Len(strQ) - 2)
strQ = Replace(strQ, strTa, strTb)
strQ = Replace(strQ, strT1, strT2)
strErg = Split(strQ, strT2)
If UBound(strErg) + 1 > Columns.Count Then
MsgBox "Houston, wann kommt XL2007? - Zeile " & zz
Else
intM = IIf(intM > UBound(strErg), intM, UBound(strErg))
End If
End If
Next zz
Range(Cells(1, 1), Cells(lngL, intM + 1)).NumberFormat = "@"
For zz = 1 To lngL
If Len(Cells(zz, 1)) > 4 Then
strQ = Cells(zz, 1)
strQ = Right(strQ, Len(strQ) - 2)
strQ = Left(strQ, Len(strQ) - 2)
strQ = Replace(strQ, strTa, strTb)
strQ = Replace(strQ, strT1, strT2)
strErg = Split(strQ, strT2)
If UBound(strErg) + 1 <= Columns.Count Then _
Range(Cells(zz, 1), Cells(zz, UBound(strErg) + 1)) = strErg
End If
Next zz
Range(Columns(1), Columns(intM + 1)).AutoFit
Range(Rows(1), Rows(lngL)).AutoFit
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Bild

Betrifft: herzlichen Dank
von: Anton

Geschrieben am: 15.12.2006 09:32:16
Hallo Erich,
herzlichen Dank für Deinen Code.
Er funzt hervorragend.
Deinen Aspekt mit den Zahlen im Textformat finde ich richtig. -Daran hatte ich garnicht gedacht.
Kann es sein, dass die Zahlen ein K.O.-Kriterium beim ersetzen spielen?
Ich hatte nämlich versucht in einem Zug mehrere Text-stücke zu ersetzen....
:-( klappte leider nicht.
Jetzt trenne ich erst alles auf, ersetzen dann, und schließlich wird daraus wieder ein Datensatz.
Dir und FCS nochmals vielen Dank für die Zeilen.
Servus,
Anton
Bild

Betrifft: Danke für Rückmeldung - freut mich! (oT)
von: Erich G.
Geschrieben am: 15.12.2006 09:43:10
 Bild
Excel-Beispiele zum Thema "kombinieren von 2 Split-Makros"
Msg- und InputBoxes kombinieren und nach Ergebnis verzweigen