Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Fester Block aus ZahlTextZahlTextZahl usw. trennen
#1
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
Antworten Top
#2
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.
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#3
(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!
Antworten Top
#4
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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#5
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
Antworten Top
#6
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
Antworten Top
#7
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
Antworten Top
#8
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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#9
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
[-] Folgende(r) 1 Nutzer sagt Danke an UweD für diesen Beitrag:
  • RobertH
Antworten Top
#10
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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • RobertH
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste