• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Tekstregel splitsen op kolombreedte en hele woorden

Status
Niet open voor verdere reacties.

wossiew

Gebruiker
Lid geworden
13 mrt 2017
Berichten
7
Is het binnen Excel mogelijk om een tekstregel uit te splitsen over 4 kolommen met een vaste breedte waarbij hele woorden NIET worden afgebroken.

Voorbeeld zin 1: W-WWB-150-010-W001 WWB Tracing Waswater Effluentleiding
Dit wil ik op de volgende manier krijgen:
Kolom 1: W-WWB-150-010-W001
Kolom 2: WWB Tracing
Kolom 3: Waswater
Kolom 4: Effluentleiding

Voorbeeldzin 2: P-RAW-R01-SOR-030-020-X001 R01 Sorteerder Zeefreiniger Eindstand (Invoer)
Kolom 1: P-RAW-R01-SOR-030-020-X001
Kolom 2: R01 Sorteerder
Kolom 3: Zeefreiniger
Kolom 4: Eindstand (Invoer)
 
Laatst bewerkt:
Dat kan wel, maar hoe moet Excel weten waar de splitsingen moeten komen?
Oftewel: welke spaties moeten wel of niet als splitsing worden aangemerkt?
In je eerste voorbeeld zou namelijk ook in kolom 2: WWB en in kolom 3: Tracing Waswater kunnen komen.
 
Dat klopt, daar zoek ik juist de oplossing voor.
Ik wil kunnen scheiden op het aantal karakters maar dan niet midden in een woord.
Of ik willen kunnen scheiden naar de breedte van een kolom waarbij hele woorden niet worden afgekapt.
In mijn engineeringsprogramma zit wel zo'n functie, daar kun je een uitlijningsvak activeren waarbij je een breedte opgeeft en aan kan geven woorden nooit afbreken.Uitlijningsvak.jpg
Het resultaat is dan zoals dit:Uitlijningsvak_02.jpg

Ik ben benieuwd of er in Excel ook zo'n mogelijkheid bestaat
 
Geef even aan hoeveel tekens er maximaal in een kolom mogen staan. Het afbreken vindt dan plaats op de eerste spatie na het bereiken van dat maximum.
Is zeker wel te doen met VBA. Met functies zou ik het ff zo niet weten....
 
@Ginger De eerste kolom 15 tekens, kolom 2,3 en 4 op 8 tekens als dat mogelijk is, anders alle kolommen op 15 tekens.
 
Geef even aan hoeveel tekens er maximaal in een kolom mogen staan. Het afbreken vindt dan plaats op de eerste spatie na het bereiken van dat maximum.
Is zeker wel te doen met VBA. Met functies zou ik het ff zo niet weten....

@Ginger De eerste kolom 15 tekens, kolom 2,3 en 4 op 8 tekens als dat mogelijk is, anders alle kolommen op 15 tekens.
 
Dit was er wéér zo 1 die me in eerste instantie makkelijker leek dan toen ik er mee aan de slag ging. Ik heb er dit van weten te maken als functie...
Code:
Function DeelTekst(Tekst As String, Deel As Integer) As String
Dim Opslag(1 To 4) As String, TempTekst() As String
Dim i As Integer, x As Integer
    
    TempTekst = Split(Tekst)
    Opslag(1) = TempTekst(0)
    For x = 2 To 3
        Do
            i = i + 1
            Opslag(x) = Trim(Opslag(x) & " " & TempTekst(i))
        Loop While Len(Trim(Opslag(x) & " " & TempTekst(i + 1))) <= 15
    Next x
    Opslag(4) = Trim(Replace(Tekst, Join(Opslag), ""))
    DeelTekst = Opslag(Deel)
    
End Function
Het zal vást véél simpeler kunnen en wacht dus ook reikhalzend de one liner van snb af... :D

Aan Wossiew de eer om dit maar 'ns in het echt te gaan testen en kijken of het nog een beetje wil performen op grote hoeveelheden gegevens.
 

Bijlagen

  • Tekst in delen - RedHead.xlsm
    15,5 KB · Weergaven: 69
@Jolivanes, Ik kan het niet goed bekijken omdat ik geen lid ben van dat forum. Maar wat ik zo tussen de regels lees, is dit toch niet het gelijke aan de vraag van Wossiew.

@Wossiew, beviel de oplossing niet?
 
@ Ginger.
Nee, inderdaad niet maar ik hoopte dat iemand zoals U het misschien zou kunnen aanpassen.
BTW, er word gevraagd voor maximaal 15 letters.
Eindstand (Invoer) is volgens mij meer letters. En ik heb ook in Nederland leren tellen. Wel een paar dagen geleden.
 

Bijlagen

  • Wossiew And Ginger HelpMij Forum 913663.xlsm
    19,5 KB · Weergaven: 40
Laatst bewerkt:
Ik dacht aan:

Code:
Sub M_snb()
   Cells(8, 1) = Replace(Cells(8, 1), " ", "_", , 4)
   Cells(8, 1).TextToColumns , , , , , , , , -1, "_"
End Sub
 
Dit was er wéér zo 1 die me in eerste instantie makkelijker leek dan toen ik er mee aan de slag ging. Ik heb er dit van weten te maken als functie...
Code:
Function DeelTekst(Tekst As String, Deel As Integer) As String
Dim Opslag(1 To 4) As String, TempTekst() As String
Dim i As Integer, x As Integer
    
    TempTekst = Split(Tekst)
    Opslag(1) = TempTekst(0)
    For x = 2 To 3
        Do
            i = i + 1
            Opslag(x) = Trim(Opslag(x) & " " & TempTekst(i))
        Loop While Len(Trim(Opslag(x) & " " & TempTekst(i + 1))) <= 15
    Next x
    Opslag(4) = Trim(Replace(Tekst, Join(Opslag), ""))
    DeelTekst = Opslag(Deel)
    
End Function
Het zal vást véél simpeler kunnen en wacht dus ook reikhalzend de one liner van snb af... :D

Aan Wossiew de eer om dit maar 'ns in het echt te gaan testen en kijken of het nog een beetje wil performen op grote hoeveelheden gegevens.

@Ginger
Het ziet er veelbelovend uit, ik krijg echter bij een paar cellen als resultaat '#WAARDE' zodra ik '<=15' op '<=11' zet gaat het wel goed maar worden de tekst in de kolommen wel kort.
Heeft u enig idee waarom ik het resultaat #WAARDE krijg?

Uitlijningsvak_03.jpg
 
Kan je dat plaatje ff als echte bijlage plaatsen? Dan kan ik voor je kijken. Heb zo effe geen idee.
 
Bij deze
 

Bijlagen

  • Tekst in delen - RedHead.xlsm
    18,8 KB · Weergaven: 49
Tja.... Ik heb dit er nu van gemaakt...
Code:
Function DeelTekst(Tekst As String, Deel As Integer) As String
Dim Opslag(1 To 4) As String, TempTekst() As String
Dim i As Integer, x As Integer
    
    TempTekst = Split(Tekst)
    Opslag(1) = TempTekst(0)
    For x = 2 To 3
        Do
            i = i + 1
            Opslag(x) = Trim(Opslag(x) & " " & TempTekst(i))
            If i = UBound(TempTekst, 1) Then Exit Do
        Loop While Len(Trim(Opslag(x) & " " & TempTekst(i + 1))) <= 15
    Next x
    Opslag(4) = Mid(Tekst, InStr(1, Tekst, " " & Opslag(3)) + Len(Opslag(3)) + 2)
    DeelTekst = Opslag(Deel)
    
End Function
Maar dan heb je niet altijd 4 kolommen omdat er niet voldoende tekens in de string zitten.

@snb, je code deelt de string op in alle losse elementen, maar dat was niet de bedoeling... ;)
 
Bedankt voor je hulp, ik ben hier ontzettend veel mee geholpen.
Hier kan ik wel iets mee, kan het altijd nog verder aan(laten)passen indien nodig.
 
Dat lijkt me stug.

Code:
Sub M_snb()
   sn = Cells(1).CurrentRegion
   
   For j = 2 To UBound(sn)
      sn(j, 3) = Replace(Cells(j, 1), " ", "_", , 4 + (Mid(sn(j, 1), 3, 1) <> "W"))
   Next
   
   Cells(1).CurrentRegion = sn
   Columns(3).TextToColumns , , , , , , , , -1, "_"
End Sub
 
Laatst bewerkt:
@snb, 2 typo's?
Code:
Sub M_snb()
   sn = Cells(1).CurrentRegion
   
   For j = 2 To UBound(sn)
      sn(j, [COLOR="#FF0000"][SIZE=4]1[/SIZE][/COLOR]) = Replace(Cells(j, 1), " ", "_", , 4 + (Mid(sn(j, 1), 3, 1) <> "W"))
   Next
   
   Cells(1).CurrentRegion = sn
   Columns([COLOR="#FF0000"][SIZE=4]1[/SIZE][/COLOR]).TextToColumns , , , , , , , , -1, "_"
End Sub

Maar nog wordt de hele string per "woord" in stukken geknipt.... ;)
 
Het kan wel vertikaal. Maak de kolom de gewenste breedte en selecteer (Start tab): Doorvoeren (helemaal rechts op het lint), Uitvullen.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan