Tekst splitsen
- 10/06/2007
Voorbeeldbestanden bij dit artikel: | |
Inleiding
In deze topic wilde iemand een lange tekst opsplitsen in 2 kleinere delen. Dat is niet echt ingewikkeld, want functies LINKS, RECHTS en DEEL zijn daarvoor geknipt. Zie bvb. hier. Maar het wordt moeilijker…
Vereisten
Er mogen in beide delen van de formule ook maar maximaal 25 karakters staan. Die 25 kunnen we best in een aparte cel zetten en dit als een parameter in de oplossing beschouwen. Door dit getal te veranderen heb je onmiddellijk de juiste oplossing en moet je dit niet in elke formule aanpassen. OK dit maakt het al wat lastiger, maar voor echte Excel pro’s zoals de lezers en mezelf is dit nog kinderspel.
Maar het blijft niet zo vanzelfsprekend: je moet splitsen op spaties! M.a.w. je moet de limiet van 25 tekens per deel moet verlagen als zou blijken dat je een woord zou afbreken. Dan wordt het pas echt lastig…
VBA-code
In bovenstaand bestandje staan mijn formules. Voor de vraagsteller was deze oplossing perfect. Hij vroeg enkel om te splitsen in 2 delen, niet meer. Ik heb de formules niet extensief getest, aangezien ik op het einde ook zelf bijna door de bomen het bos niet meer zag! Dit, samen met de nood aan een algemenere methode om in meer dan 2 delen te splitsen, leidden ertoe dat ik ook een nieuwe functie schreef in VBA om dit op te lossen. In bovenstaand bestandje staat mijn code ook, maar ik zet ze hier tevens op de site.
Option ExplicitFunction SplitText(str As String, iPart As Byte, iMaxChars As Integer) As String' Wim Gielis ' https://www.wimgielis.com''''' ' Gecustomiseerde functie om tekst in delen te splitsen. ' Woorden worden niet afgebroken, ' en je kan het maximale aantal karakters per deel opgeven ' 09/06/07, revised 10/06/07 '''''''function arguments: 'str: string to be split 'iPart: which part do you want to retrieve? 'iMaxChars: maximal number of characters in each part 'e.g. put in cell A1: This is a stupid example sentence to explain the SplitText function '=SplitText(A1, 1, 20) would give: This is a stupid '=SplitText(A1, 2, 20) would give: example sentence to '=SplitText(A1, 3, 20) would give: explain the '=SplitText(A1, 4, 20) would give: SplitText function Dim arrWords As Variant Dim iCnt As Integer Dim j As Integer Dim iPartCounter As Integer Dim sTemp As String If iPart < 1 Then SplitText = "Part number should at least be 1" Exit Function End If SplitText = "" If str <> "" Then str = Application.Trim(str) str = Replace(str, Chr(32), " ") str = Replace(str, Chr(160), " ") arrWords = Split(str) ReDim Preserve arrWords(UBound(arrWords) + 1) arrWords(UBound(arrWords)) = "a" '(dummy to avoid an error message later on) iPartCounter = 1 j = 0 Do While iPartCounter <= iPart iCnt = 0 sTemp = "" Do While Len(sTemp) - 1 <= iMaxChars And j + iCnt < UBound(arrWords) sTemp = sTemp & " " & arrWords(j + iCnt) iCnt = iCnt + 1 Loop If Len(sTemp) - 1 > iMaxChars Then iCnt = iCnt - 1 If iPartCounter = iPart Then If Len(sTemp) - 1 > iMaxChars Then SplitText = Trim(Left(sTemp, Len(sTemp) - Len(arrWords(j + iCnt)))) Else SplitText = Trim(sTemp) End If End If iPartCounter = iPartCounter + 1 If j + iCnt = UBound(arrWords) Then Exit Function j = j + iCnt Loop End IfEnd Sub
Hiervan ben ik veel meer tevreden dan van de oplossing met de formules. Ik dacht ook aan het gebruik van de optie Data > Tekst naar kolommen…, maar dat gaat niet voor custom functions (zelf geschreven functies in VBA). Die kunnen nl. niets zetten in andere cellen dan de huidige cel. Hopelijk kan de code voor jullie ook nuttig zijn.