micmac
Goto Top

Excel 2007 Stringwurst zerlegen

Guten Tag,

Ich habe folgendes Problem:

Mir liegt eine Tabelle mit ca. 2000 Zeilen vor, die eine Spalte enthält, in deren Zellen ein String
in einer Wurst abgelegt ist:

Bsp.

Greinweg11EnnsdorfTeilewestlichesNiederösterreich4050

Ich suche nun nach einer Möglichkeit, diese "Wurst" zu zerteilen, und zwar in der Form, dass der String

bei Wechsel Kleinbuchstabe auf Zahl, Zahl auf Großbuchstabe, Kleinbuchstabe auf Großbuchstabe und

Kleinbuchstabe auf Zahl in entsprechende Spalten aufgeteilt wird.


Also: Greinweg 11 | Ennsdorf | Teile westliches Niederösterreich | 4050 |

Google hilft leider nicht weiter, daher hoffe ich auf Hilfe von Euch.
Hat jemand eine Idee ?

Lg

Michael

Content-ID: 287486

Url: https://administrator.de/contentid/287486

Ausgedruckt am: 25.11.2024 um 11:11 Uhr

BlackVictory
Lösung BlackVictory 04.11.2015, aktualisiert am 11.11.2015 um 14:23:27 Uhr
Goto Top
also mit

Function ErsterGrossbuchstabe(Zeichenkette As String) As Integer
Dim zeichen As String
Dim x As Integer
Dim laenge As Integer
laenge = Len(Zeichenkette)
For x = 1 To laenge
    zeichen = Mid(Zeichenkette, x, 1)
    Select Case zeichen
        Case "A" To "Z"  
            ErsterGrossbuchstabe = x
            Exit For
        Case "Ä", "Ö", "Ü"  
            ErsterGrossbuchstabe = x
            Exit For
    End Select
Next
End Function


kannst du nach dem ersten Großbuchstaben in dem Feld suchen.
Lochkartenstanzer
Lösung Lochkartenstanzer 04.11.2015, aktualisiert am 11.11.2015 um 14:23:30 Uhr
Goto Top
Moin,

cat exceldatei.alt | sed "s/[A-Z]/|&/g" >exceldatei.neu

sollte es (fast) tun. face-smile
122990
Lösung 122990 04.11.2015, aktualisiert am 11.11.2015 um 14:23:36 Uhr
Goto Top
Sub SplitLines()
    Set regex = CreateObject("vbscript.regexp")  
    regex.Global = True: regex.IgnoreCase = False: regex.MultiLine = True
    regex.Pattern = "(?=([a-z][A-Z])|([a-z]\d+)|(\d[A-Z]))"  

    With ActiveSheet
        For Each cell In .Range("A1:A" & .Cells(Rows.Count, "A").End(xlUp).Row)  
            Set matches = regex.Execute(cell.Value)
            Dim SplitArray()
            ReDim SplitArray(matches.Count)
            P = 0: I = 0
            For Each myMatch In matches
                SplitArray(I) = Mid(cell.Value, P + 1, myMatch.FirstIndex + 1 - P)
                P = myMatch.FirstIndex + myMatch.Length + 1
                I = I + 1
            Next
            SplitArray(I) = Mid(cell.Value, P + 1)
            cell.Resize(1, UBound(SplitArray) + 1).Value = SplitArray
        Next
    End With
End Sub

Macht aus
A
Greinweg11EnnsdorfTeilewestlichesNiederösterreich4050

schon mal das hier:

ABCDEF
Greinweg11EnsdorfTeilewestlichesNiederösterreich4050

Die Spalten kannst du dir dann nach Bedarf mit Formeln zusammenfassen.
Das Teilewestliches lässt sich natürlich jetzt nicht trennen (zwei Kleinbuchstaben).

Aber woher hast du solche komischen Daten, klingt mir eher danach als Hätte da ein Noob versucht das aus einem Browser rauszukopieren.
Gruß grexit
micmac
micmac 05.11.2015 um 12:01:51 Uhr
Goto Top
Liebe Leute, ich bedanke mich herzlichst. Und ja, diese Datei stammt von einem
Azubi, der nicht wirklich wusste was er tat.
Ich finde Eure Lösungen toll, die Reduktion aufs wesentliche (Ausschlußverfahren), das ist es!

Danke nochmals

L G

Michael
122990
122990 05.11.2015 aktualisiert um 12:38:46 Uhr
Goto Top
Und ja, diese Datei stammt von einem Azubi, der nicht wirklich wusste was er tat.
[Sarkasmus Modus an] Dann hätt ich für den "Stift" eine schöne Aufgabe => zu Fuß zerlegen lassen face-wink beim nächsten mal macht er's dann bestimmt besser, wenn er dann am Abend mit rauchenden Fingern und wunden Augen nach Hause stolpert face-big-smile [Sarkasmus Modus aus]
micmac
micmac 05.11.2015 um 13:20:32 Uhr
Goto Top
Er lässt "BesteGrüsse" und "DanKe1DaNke2Danke" ausrichten und verneigt sich vor seinem neuen Excel-Gott .
Ehre sei Dir, oh grexit in der excelsischen Höhe. face-smile

lg

Michael