Waardes in tabel splitsen naar meerdere velden

Status
Niet open voor verdere reacties.

RoyMcCoy72

Nieuwe gebruiker
Lid geworden
23 okt 2019
Berichten
4
Geachte slimme mensen,

ik ben bezig om in Acces in een tabel waardes te gaan splitsen naar meerdere velden.
In Tabel X heb ik een tekstveld waar verschillende waardes, opbouw en lengtes zitten. Echter de waarde waarop ik deze kolom wil splitsen is een "_"

Dus snel voorbeeld

Tabel X:

SPLITSVELD Veld 1 Veld 2 Veld 3 Veld 4
XXXX__ZZ-01 XXXX ZZ-01
XXXX__ZZ-01_WW XXXX ZZ-01 WW
XXXX__ZZZZ-01_WW XXXX ZZZZ-01 WW
XXXX__ZZZZ-01_WW XXXX ZZZZ-01 WW
XXXX__ZZZ-01_WW XXXX ZZZ-01 WW
XXXX__ZZZ-01_WW XXXX ZZZ-01 WW
XXXX__YY-01_VV_13 XXXX YY-01 VV 13
XXXX__YYY-01_VV_13 XXXX YYY-01 VV 13
XXX__YYY-02_VV_13 XXX YYY-02 VV 13
XXXX__YYY-02_VV_13 XXXX YYY-02 VV 13
XXXX__YYY-03_VV_13 XXXX YYY-03 VV 13
XXXX__YYY-03_VV_13 XXXX YYY-03 VV 13

Kan iemand mij helpen om Veld 1 tm Veld 4 te vullen met de waardes vanuit splitsveld?

PS, ik heb een voorbeeld in Excel erbij gedaan, indien de tabel in dit stukje niet goed weergegeven wordt.

Alvast bedankt
Roy
 

Bijlagen

Je voorbeeld is niet erg consequent, zo heb je in het eerste 'blok' twee underscores zitten en verderop niet. De data moet wel consequent zijn opgebouwd als je zoiets wilt gaan doen. Als de data in je tabel terecht moet komen, zou ik er een functie voor maken, dat werkt het veiligst. Met een query kan het ook wel, maar die is nogal ingewikkeld omdat je verschillende lengtes hebt, en dus steeds op verschillende plekken iets moet uitlezen. Of niet.
 
Dat klopt, de underscore staat in het algemeen op dezelfde plaats, maar dat kan afwijken.
Vandaar dat ik naar een oplossing was naar het zoeken op specifieke waarde.

In Excel kan je dat mooi doen via tekst naar kolommen en dat aangeven dat ie op de underscore moet splitsen.
Zoiets dergelijks zou ik graag ook in Acces willen doen.

Mag ook in nieuwe tabel.

Grtz
Roy
 
Access Kent niet een functie als TekstNaarKolommen dus dat zul je moeten programmeren of met een query moeten doen.
Ik ga dan voor een functie (Split) i.c.m. een recordset.
 
Of je exporteert het veld naar Excel, splitst het daar en importeert het resultaat in Access.

vrGroeten
Noëlla
 
Dan zou ik zeggen: gebruik eerst replace om de dubbele underscores __ te vervangen door een enkele _ . En gebruik daarna een functie als:
Code:
Public Function GetStringPart(strText As String, strDelimiter As String, intPart As Integer) As String
On Error GoTo Err_GetStringPart

    Dim intLoc As Integer
    Dim intCounter As Integer
    Dim strPart As String
    Dim strResult As String
    
    If Len(strText) = 0 Or intPart < 1 Then
        strResult = ""
    Else
                intLoc = 1
        strPart = strText
        While intCounter < intPart And intLoc > 0
            If Len(strPart) > 0 Then
                If Right(strPart, 1) <> strDelimiter Then strPart = strPart & strDelimiter
                intLoc = InStr(intLoc, strPart, strDelimiter)
                If intLoc = 0 Then
                    strResult = strText
                Else
                    strResult = Left(strPart, intLoc - 1)
                    strPart = Right(strPart, Len(strPart) - intLoc)
                End If
                intCounter = intCounter + 1
            Else
                strResult = ""
                intCounter = intPart
            End If
        Wend
    End If
    GetStringPart = strResult

Exit_GetStringPart:
    Exit Function
    
Err_GetStringPart:
    GetStringPart = "#ERROR in getStringPart#"

End Function
argumenten: strText = tekstveld dat je wil omzetten
delimiter : in jou geval "_"
intPart: 1 voor eerste veld, 2 voor 2de veld, ...
 
Dat lijkt mij nou typisch zo'n functie in bericht #7 waar je geen moer aan hebt, want die doet toch totaal niet wat gevraagd wordt? Dit wel :)
Code:
Function funSplitsen()
Dim rs As Recordset
Dim arr As Variant
Dim i As Integer
Set rs = CurrentDb.OpenRecordset("Splitsen")
    With rs
        Do While Not .EOF
            arr = Split(Replace(.Fields(0), "__", "_"), "_")
            .Edit
            For i = LBound(arr) To UBound(arr)
                .Fields(i + 1).Value = arr(i)
            Next i
            .Update
            .MoveNext
        Loop
    End With
End Function
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan