Opgelost Tekst in cel opsplitsen

Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.
Ja daar werkt het inderdaad, maar als ik nu ga werken met meerdere rijen en de aan te passen rij zit ergens in het midden of er zijn meerdere te bewerken rijen dan krijg ik zoals boven vermeld.

Ik heb de code slechts veranderd alsvolgt:
Code:
=DROP(REDUCE("";E1:E100;LAMBDA(x;y;VSTACK(x;
LET(R;LAMBDA(R;a;b;LET(c;LEN(a)<133;d;IF(c;a;TEXTBEFORE(LEFT(a;133);". ";-1;;1)&".");
IF(c;DROP(VSTACK(b;d);1);R(R;MID(a;LEN(d)+2;6^6);VSTACK(b;d)))));R(R;y;""));"")));1)
 
Lastig te zeggen zonder voorbeeld. Probeer deze macro eens

Code:
Sub jecc()
 Dim a(10000, 0), ar, sp, t
 Dim j As Long, jj As Long, y As Long
 ar = Range("E1", Range("E" & Rows.Count).End(xlUp))
 
 For j = 1 To UBound(ar)
   sp = Split(ar(j, 1), ".")
   For jj = 0 To UBound(sp) - 1
     t = Trim(Join(Array(t, sp(jj) & "."), ""))
     If Len(t & " " & sp(jj + 1)) > 132 Or jj = UBound(sp) - 1 Then
       a(y, 0) = t
       y = y + 1
       t = ""
     End If
   Next
   y = y + 1
 Next
 [E1].Resize(y + 1) = a
End Sub
 
Ik denk dat ik het probleem bij de vba code gevonden heb.
Als er één enkele zin is die meer dan 132 karakters telt dan kan hij de zin niet trimmen want hij vindt geen punt.

x = Trim(Left(t, InStrRev(t, ".")))

Ik heb in dit stuk code de . vervangen door een spatie en het werkte wel. Dit is ook de reden dat het voordien gewerkt had en nu niet, omdat ik nu net een voorbeeld had met een zin langer dan 132 maar zonder een punt in.
 
Als het werkt is het mooi. Probeer de laatste macro anders ook nog even voor de zekerheid.
Zonder recursie en zou dit issue ook moeten oppakken
 
Voor de geïnteresseerde nog een oplossing in Power Query ook.

PHP:
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    MaxLength = 132,

    SplitText = (text) =>
        let
            sp = Text.Split(text, ". "),
            result = List.Accumulate(sp, [CurrentPart="", Result={}], (s,c) =>
                let
                    newPart = s[CurrentPart] & c & ". ",
                    length = Text.Length(newPart)
                in
                    if length <= MaxLength then [CurrentPart=newPart, Result=s[Result]] else [CurrentPart=c & ". ", Result=s[Result] & {s[CurrentPart]}]
            )
        in
            result[Result] & {result[CurrentPart]} & {null},


    expCol = List.Transform(Source[Column1], SplitText),
    convTbl = Table.FromList(expCol, Splitter.SplitByNothing()),
    out = Table.ExpandListColumn(convTbl, "Column1")
in
    out
 

Bijlagen

Laatst bewerkt:
Zoals eerder aangegeven zijn de geformuleerde criteria niet eenduidig. In een 5-regelige VBA code is dit alles zonder enig risico op te lossen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan