28. september 2016 - 09:03Der er
10 kommentarer og 1 løsning
opsplitning af tekststykke i celle med ; som opsplitter ..uden at bruge text to column
Hej Eksperter, jeg har et tekststykke, som er i en celle, men vil gerne have den splittet op i hver sin celle, hvor ; er opsplitteren. Hvordan går jeg uden at bruge text to column? Se teksstykke nedenfor.
Hej, da det gør den. Skal bruge det til en model, hvor jeg får data som ovenfor. Jeg ønsker kun at brugeren fremadrettet skal paste ind i modellen og ikke tænke på, hvad der skal laves om til hvad. Mvh. m.
Uden Tekst til kolonner-funktionen skal du først og fremmest bestemme positionerne, hvor semikolonerne står. Hvis din tekst står i celle A1, kan du finde det første semikolons position således: =SØG(";";A1).
Den første del af teksten kan "udtrækkes" således: =VENSTRE(A1;SØG(";";A1)-1) <= træk 1 fra for ikke at få semikolon med i "udtrækket".
Det næste semikolon finder du således: =SØG(";";A1;SØG(";";A1)+1). Her startes søgning +1 karakter efter det første semikolon.
Anden del af teksten kan så udtrækkes med MIDT-funktionen: =MIDT(A1; SØG(";";A1)+1 ; SØG(";";A1;SØG(";";A1)+1) - SØG(";";A1)+1)
Således fortsætter du, indtil du har været igennem alle semikoloner. Det kan være en ide at beregne positionerne først og så bruge disse værdier i MIDT-funktionerne, så de ikke bliver for lange og uoverskuelige.
Så det kan da lade sig gøre, men det er noget omstændigt, når Tekst til kolonner-funktionen også giver det ønskede resultat. Hvis udfordringen er, at du har kolonner imellem "split-teksterne" og det område, hvor du vil have resultatet, kan du f.eks. kopiere split-teksterne over i et midlertidigt ark, splitte, og så kopiere det opsplittede tilbage.
Alternativ: Sub opsplitningAf() Dim totalTekst As Variant, f As Integer totalTekst = Split(Range("A1"), ";") For f = 0 To UBound(totalTekst) Range("A1").Offset(0, f + 1) = totalTekst(f) Next f End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Dim totalTekst As Variant, F As Long, antalRk As Long, Ud As Integer antalRk = ActiveSheet.UsedRange.Rows.Count Application.EnableEvents = False Application.ScreenUpdating = False
For F = 1 To antalRk totalTekst = Split(Range("A" & F), ";") Ud = UBound(totalTekst) ActiveSheet.Range(Cells(F, 2), Cells(F, 2 + Ud)) = totalTekst Next F
Application.EnableEvents = True Application.ScreenUpdating = True End Sub
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.