18. februar 2014 - 13:08Der er
28 kommentarer og 5 løsninger
Dele en lang tekststreng
Jeg har en lang tekststreng i celle A3 den ønsker jeg at dele i lige store stykker (á 7 karakter) i hver celle nedenunder. Tekststrengen er en blandig af både tal og bogstaver. Jeg ved ikke hvor lang tekststrengen er, kun at den er delelig med 7, så formlen skal fortsætte til enden af tekststrengen.
Jeg er stor tilhænger af VBA - men er man ikke vant til det og først skal sætte sig ind i det, så kan det være en lidt stor mundfuld - her er en løsning, som ikke er så fancy, men som virker. Teksten i A1 bliver delt.
Herefter kan du vælge kopier -> indsæt værdier og værsgo...
Det vil ikke altid kunne lad sig gøre, fordi den sidste del vil ikke altid kunne være 7 karakter.
Her er hvordan man gør, du skal bruge denne funktion:
Function SplitString(ByVal str As String) As String() Dim result(Math.Truncate(str.Length / 7) As String Dim resultindex As Integer = 0 For i = 0 To str.Length - 1 Step 7 result(resultindex) = str.Substring(i, Math.Min(7, str.Length - i)) resultindex += 1 Next Return result End Function
Funktionen vil dele strengen op hver gang der er 7 karakter, den returnere en array med alle delene, så er det op til dig hvordan du vil bruge delene.
Først bliver variablen "result" sat lig med en String array med længden af strengen delt i 7, rundet op til nærmeste hele tal. Funktionen Math.Truncate runder tallet ned til nærmeste hele tal, grunden til at længden bliver en højere er at man i VBA ikke angiver længden men hvad det sigte index i array'en er.
Så bliver variablen "resultindex" sat til 0. Derefter starter dar et loop, der starter med 0 og bliver ved så længe at variablen "i" er mindre end længden på strengen. Inde i loopet sætter den først det index som variablen "resultindex" er, på variablen "result".
Funktionen "Substring" skærer en streng ud fra variablen "str" der starter ved det index som variablen "i" er, og har en længde på den mindste værdig af 7 og længden på strengen - værdien af variablen "i".
Math.Min funktionen bliver i det her tilfælde brugt til at undgå fejl, fordi når den tager det mindste tal og man nævner antallet af karakter der er tilbage så er man sikker på at værdien ikke bliver højere end antallet af det karakter der er tilbage.
Jeg kan moske godt hjælpe dig med lidt mere, men så er jeg nødt til at vide hvad du præcist programmere i, om det er asp.net, Windows programmer, Excel eller noget helt tredje.
Dette er hvad jeg kan finde ud af. Men så skal jeg selv gøre det hele teksten igennem, - det gi'r jo ingen mening, for så kan jeg jo lige så godt gøre det manuelt.
#MadsHaupt: Læs nu lige de foregående indlæg, inden du smider en kommentar. Supertekst har allerede spurgt om det samme, og måske endda fundet en løsning på problemet!
#Supertekst Jeg troede For r = 1 To Len(tekst) var erklæringen. Jeg skal vist finde noget andet at give mig til. Mange tak for jeres svar og jeres tid.
Dim tekst As String Public Sub opdelString() tekst = Range("A3")
Dim result(Math.Truncate(Len(tekst) / 7) As String Dim resultindex As Integer = 0 For i = 0 To Len(tekst) - 1 Step 7 result(resultindex) = tekst.Substring(i, Math.Min(7, str.Length - i)) resultindex += 1 Next i
For r = 0 To result.Length - 1 Cells(r + 3, 1) = result(i); Next r 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.