Clever-Excel-Forum

Normale Version: Fester Block aus ZahlTextZahlTextZahl usw. trennen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo!

Ich habe einen festen Block in Spalte A nach dem Muster ZahlTextZahlTextZahl usw.

Bsp:

1.224Sicherheits-, Reinigungs-, Reparatur- und weitere Dienstleistungen351Management, Beratung, Recht, Steuern263IT, Computer, Telekommunikation90Öffentlicher Dienst, Organisationen74Gesundheit, Soziales68Einzelhandel, Großhandel, Außenhandel53Hotel, Gaststätten, Tourismus, Kunst, Kultur, Freizeit45Banken, Finanzdienstleistungen, Immobilien, Versicherungen38Medien, Informationsdienste38Bau, Architektur30Bildung, Erziehung, Unterricht27Abfallwirtschaft, Energieversorgung, Wasserversorgung19Konsum- und Gebrauchsgüter19Fahrzeugbau, Fahrzeuginstandhaltung18Werbung, Öffentlichkeitsarbeit18Metall, Maschinenbau, Anlagenbau17Wissenschaft, Forschung, Entwicklung12Arbeitnehmerüberlassung, Zeitarbeit11Logistik, Transport, Verkehr10Elektro, Feinmechanik, Optik, Medizintechnik3Nahrungs- und Genussmittelherstellung3Rohstoffverarbeitung, Glas, Keramik, Kunststoff, Holz3Arbeitsvermittlung, privat2Chemie, Pharma, Biotechnologie1

Wie kann man das trennen damit das (nach Spalten getrennt) so aussieht:

Spalte B 1.224
Spalte C §111§
Spalte D Sicherheits-, Reinigungs-, Reparatur- und weitere Dienstleistungen
Spalte E §222§
Spalte F 351
Spalte G §222§
Spalte H Management, Beratung, Recht, Steuern
Spalte I §222§
Spalte J 263
Spalte K §222§
Spalte L IT, Computer, Telekommunikation
Spalte M §222§
Spalte N 90
usw.
LETZTE SPALTE  (ohne Bezug) §333§

Die Anzahl der möglichen Blöcke variert aber der Aufbau ist immer gleich ...

Vielen Dank
Hi,

wer verschickt oder erstellt denn solche Daten? Ohne sinnvolle und erkennbare Struktur?

Zunächst einmal ist alles Text. Somit ist 1.224 nicht als Zahl identifizierbar, weil selbst dann, wenn ich Zeichen für Zeichen darauf prüfen würde, ob es eine Zahl ist, schon beim 1000er Trennzeichen, dem Punkt, eine extra Prüfung einbauen müsste, ob Punkt oder Zahl. 
Am Ende ist es auch nicht besser. Biotechnologie1 ist wohl als Gesamtbegriff zu werten, weil die 1 am Ende nicht als Zahl sondern als zum Text zugehörig gewertet werden müsste. Wie soll da eine vernünftige Entscheidung getroffen werden?
Auch ist die Blockaufteilung, wie Du sie angegeben hast absolut nicht nachvollziehbar. (Vergleiche Deinen Block aus A und die gewünschte Zuordnung) Das passt hinten und vorne nicht.

Meine Empfehlung: Überarbeitet die Struktur so, dass eine eindeutige Trennung möglich ist. Z. Bsp. so, dass Ihr jeden Block durch Semikolon oder ein anderes, eindeutig zu identifizierendes Zeichen trennt und zwischen Zahlen und Text ein anderes eindeutiges Zeichen einfügt.
(20.10.2022, 22:31)RobertH schrieb: [ -> ]Ich habe einen festen Block in Spalte A nach dem Muster ZahlTextZahlTextZahl usw.

Ja. Und der kommt irgendwo her. Woher? Und landet bei Dir. Wie landet er bei Dir? Leg Dich hin, wir müssen reden!
Code:
Sub M_snb()
  c00 = Replace([A1], ".", "")
  ReDim sn(Len(c00))
 
  For j = 1 To Len(c00)
    If Val(Mid(c00, j, 1)) > 0 Then
      If n > 0 Then sn(t) = Mid(c00, n, j - n)
      sn(t + 1) = Val(Mid(c00, j))
      j = j + Len(sn(t + 1))
      n = j
      t = t + 2
    End If
  Next
 
  MsgBox Join(sn, vbLf)
End Sub

NB. 100% einverstanden mit Ralf & LCoh
Hallo snb ...

vielen Dank für den Code.

Ich habe in der leeren Mappe1 den Code und in A1 zum testen einen meiner Blöcke eingefügt .

Wenn ich den Code ausführe öffnet sich eine Art Pop up wo die Daten sauber getrennt erscheinen ...

Was muss ich machen damit die Daten getrennt in die Spalten ab B1 übertragen werden?

Robert
Hallo

so?

Code:
Sub M_snb()
    Dim LR As Integer, i As Integer
    Dim c00 As String, SN, n, t, j
   
    LR = Cells(Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte
   
   
    For i = 1 To LR
        c00 = Replace(Cells(i, 1), ".", "")
        ReDim SN(Len(c00))
       
        For j = 1 To Len(c00)
            If Val(Mid(c00, j, 1)) > 0 Then
                If n > 0 Then SN(t) = Mid(c00, n, j - n)
                SN(t + 1) = Val(Mid(c00, j))
                j = j + Len(SN(t + 1))
                n = j
                t = t + 2
            End If
        Next
        n = 0
        t = 0

        Cells(i, 2).Resize(1, UBound(SN)).Value = SN
    Next
End Sub
Hi UweD ...

super, Klasse

Aktuell steht der erste Zahlen/Text Block in A1 und B1 ist leer.

Frage 1:

Kann man die Formel so anpassen, das die erste Zahl in A1 bleibt und der erste Text in B1 usw. Also wie jetzt nur A1 in A1 und B1 getrennt quasi.

Frage 2: 

Kann man (dann noch) zwischen jeden Zahl/Text Block eine leere Spalte packen?

A1 = Zahl
B1 = Text
C1 = Leer
D1 = Zahl
E1 = Text
F1 = Leer

usw.

Danke
Ich habe dir 98% der Lösung gezeigt.
Ich hatte gehofft dass du die 2% selbst erstellen möchtest.

Und es gibt noch unbeantwortete Fragen : Ralf A, LCohen
Code:
Sub M_snb()
    Dim LR As Integer, i As Integer
    Dim c00 As String, SN, n, t, j
  
    LR = Cells(Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte
  
  
    For i = 1 To LR
        c00 = Replace(Cells(i, 1), ".", "")
        ReDim SN(Len(c00))
      
        For j = 1 To Len(c00)
            If Val(Mid(c00, j, 1)) > 0 Then
                If n > 0 Then SN(t) = Mid(c00, n, j - n)
                SN(t + 1) = Empty
                t = t + 1
                SN(t + 1) = Val(Mid(c00, j))
                j = j + Len(SN(t + 1))
                n = j
                t = t + 2
            End If
        Next
        n = 0
        t = 0

        Cells(i, 1).Resize(1, UBound(SN)).Value = SN
    Next
    Columns("A:B").Delete
End Sub


LG UweD
Code:
Sub M_snb()
  sn = Cells(1).CurrentRegion.Resize(, Columns.Count)

  For j = 1 To UBound(sn)
    c00 = Replace(sn(j, 1), ".", "")
    n = 0
    t = 0
    For jj = 1 To Len(c00)
      If Val(Mid(c00, jj, 1)) > 0 Then
        If n > 0 Then sn(j, t - 1) = Mid(c00, n, jj - n)
        sn(j, t + 1) = Val(Mid(c00, jj))
        jj = jj + Len(sn(j, t + 1))
        n = jj
        t = t + 3
      End If
    Next
  Next

  Cells(1).Resize(UBound(sn), UBound(sn, 2)) = sn
End Sub
Seiten: 1 2