pimre Creative Commons License 2024.10.10 0 0 38242

Szia, kezdem azzal, hogy borzasztóan nehéz ennyire következetlen adatbevitellel kezdeni valamit.

 

Én mindenesetre megpróbálkoztam az általad írt minta alapján úgy szétszedni az adataidat, hogy lehessen kezdeni valamit. 

 

Nem vacakoltam azzal, hogy az eredményt összefűzzem, és + jeleket tegyek az egyes részek közé. Csak annyit tettem, hogy a 10. (J) oszloptól kezdődően külön oszlopokban tegyem az egyes adatrészeket.

Feltételeztem továbbá, hogy van fejléc, ezért a 2. sortól indítottam a keresést. És mivel kevés példa volt, csak 3 mintával foglalkoztam:

 

GK-8201 Bgkfdez - BZ-88888 Jobtagj -UU-87896 Hjulohdt

8201 Bgkfdez - BZ-88888 Jobtagj -UU-87896 Hjulohdt

GK8201 Bgkfdez - BZ-88888 Jobtagj -UU87896 Hjulohdt

 

 

Ezeknél a program jól szedi szét a sorokat. Nézd meg, hogy a többi is működik-e.

 

Ez a program:

 

 

Option Explicit

Const kezdooszlop As Long = 10 '  oszlop

Sub konvertal()

Dim ws As Worksheet, utolsosor As Long, i As Long, sor As Long, celoszlop As Long, forrasstring As String, adatstring As String

Set ws = ActiveSheet

utolsosor = ws.Range("A" & Rows.Count).End(xlUp).Row

For sor = 2 To utolsosor

    celoszlop = kezdooszlop

    forrasstring = ws.Cells(sor, 1)

    Do

        If Not karkeres(forrasstring) Then Exit Do

        If Asc(UCase(Left(forrasstring, 1))) > 64 And Asc(UCase(Left(forrasstring, 1))) < 91 Then

            ws.Cells(sor, celoszlop) = Left(forrasstring, 2) ' Ha az első karakter betű, akkor úgy veszem, hogy a második is az. Enélkül túl bonyolult lenne

            forrasstring = Mid(forrasstring, 3)

        End If

        celoszlop = celoszlop + 1 ' Ha betű volt, akkor jó, egyébként a céloszlop üresen marad, és jön a következő

        If Not karkeres(forrasstring) Then Exit Do

        If Asc(Left(forrasstring, 1)) > 47 And Asc(Left(forrasstring, 1)) < 58 Then ' Ha szám

            adatstring = Left(forrasstring, 1)

            i = 2

            While Asc(Mid(forrasstring, i, 1)) > 47 And Asc(Mid(forrasstring, i, 2)) < 58 ' Amíg folyamatosan számok jönnek

                adatstring = adatstring & Mid(forrasstring, i, 1)

                i = i + 1

                If i > Len(forrasstring) Then forrasstring = forrasstring & " " ' Hogy ne akadjon ki

            Wend

            ws.Cells(sor, celoszlop) = adatstring

            forrasstring = Mid(forrasstring, i)

        End If

        celoszlop = celoszlop + 1

        If Not karkeres(forrasstring) Then Exit Do

        If Asc(UCase(Left(forrasstring, 1))) > 64 And Asc(UCase(Left(forrasstring, 1))) < 91 Then ' Ha karakter

            adatstring = Left(forrasstring, 1)

            i = 2

            While Asc(UCase(Mid(forrasstring, i, 1))) > 64 And Asc(UCase(Mid(forrasstring, i, 1))) < 91 ' Amíg folyamatosan betűk jönnek

                adatstring = adatstring & Mid(forrasstring, i, 1)

                i = i + 1

                If i > Len(forrasstring) Then forrasstring = forrasstring & " " ' Hogy ne akadjon ki

            Wend

            ws.Cells(sor, celoszlop) = adatstring

            forrasstring = Mid(forrasstring, i)

        End If

        celoszlop = celoszlop + 1

    Loop Until Len(forrasstring) = 0

'    Wend ' azután az egész kezdődik előlről, amíg van újabb tétel a sorban

Next sor

End Sub

Function karkeres(forrasstring) As Boolean

    karkeres = True

    While Not (Asc(UCase(Left(forrasstring, 1))) > 64 And Asc(UCase(Left(forrasstring, 1))) < 91 Or Asc(Left(forrasstring, 1)) > 47 And Asc(Left(forrasstring, 1)) < 58)

        forrasstring = Mid(forrasstring, 2) ' Ha nem karakter és nem szám, akkor töröljük

        If Len(forrasstring) = 0 Then

            karkeres = False ' Jelzi, hogy vége

            Exit Function

        End If

    Wend

End Function

 

 

 

 

Előzmény: Andyyy42 (38236)