Registriert seit: 09.10.2022
Version(en): 2016
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
Registriert seit: 25.11.2021
Version(en): 2019, 365
21.10.2022, 00:25
(Dieser Beitrag wurde zuletzt bearbeitet: 21.10.2022, 00:33 von Ralf A.)
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
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
(20.10.2022, 23: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!
Registriert seit: 29.09.2015
Version(en): 2030,5
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
Registriert seit: 09.10.2022
Version(en): 2016
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
Registriert seit: 05.09.2019
Version(en): Office 365
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
Registriert seit: 09.10.2022
Version(en): 2016
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
Registriert seit: 29.09.2015
Version(en): 2030,5
21.10.2022, 12:57
(Dieser Beitrag wurde zuletzt bearbeitet: 21.10.2022, 12:58 von snb.)
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
Registriert seit: 05.09.2019
Version(en): Office 365
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:1 Nutzer sagt Danke an UweD für diesen Beitrag 28
• RobertH
Registriert seit: 29.09.2015
Version(en): 2030,5
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
Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:1 Nutzer sagt Danke an snb für diesen Beitrag 28
• RobertH
|