Avatar billede Butterfly Ekspert
18. februar 2014 - 13:08 Der 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.
Avatar billede supertekst Ekspert
18. februar 2014 - 13:11 #1
Må det være VBA?

og så velkommen til Eksperten..
Avatar billede MadsHaupt Juniormester
18. februar 2014 - 13:16 #2
I VBA er der mange muligheder for at dele en streng, så du er nødt til at fortelle mere om hvordan du vil havde den delt op.
Avatar billede Butterfly Ekspert
18. februar 2014 - 13:21 #3
Ja meget gerne VBA
Avatar billede Butterfly Ekspert
18. februar 2014 - 13:23 #4
Teksstrengen skal deles i lige store stykker, med 7 karakter i hvert stykke og de skal stå i hver sin celle under hinanden
Avatar billede kasperth Juniormester
18. februar 2014 - 13:47 #5
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...

[IMG]http://i58.tinypic.com/2j0dxd1.jpg[/IMG]
Avatar billede MadsHaupt Juniormester
18. februar 2014 - 13:52 #6
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.
Avatar billede kasperth Juniormester
18. februar 2014 - 13:53 #7
Jo Mads.. virker fint - også hvis den sidste tekststreng ikke er 7..
Avatar billede MadsHaupt Juniormester
18. februar 2014 - 14:24 #8
Her er hvad funktionen præcist gør.

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.
Avatar billede MadsHaupt Juniormester
18. februar 2014 - 14:26 #9
kasperth husk når du har fået svar på dit spørgsmål så skal du bede mig om at lægge et svar, og så skal du accepter mit svar.
Avatar billede kasperth Juniormester
18. februar 2014 - 14:28 #10
Hej Mads,

Det skal jeg nok huske, hvis du en dag besvarer et spørgsmål jeg har stillet ;)
Avatar billede MadsHaupt Juniormester
18. februar 2014 - 14:34 #11
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.
Avatar billede MADOlsen Forsker
18. februar 2014 - 14:59 #12
+1 til kasperth! :-)
Avatar billede MadsHaupt Juniormester
18. februar 2014 - 15:13 #13
Jeg ved ikke helt hvad "+1 til kasperth" er, kan du ikke forklare lidt nærmere hvad det er?.
Avatar billede MADOlsen Forsker
18. februar 2014 - 15:18 #14
Kasperth's kommentar i #10 var bare et sjovt svar til din kommentar i #9, hvilket havde udløst en "like", hvis det havde været på Facebook.

Hvis du tjekker det oprindelige spørgsmål, vil du nemlig se, at dette slet ikke er kasperths, hvorfor du jo så ikke har hjulpet ham så meget... ;-)
Avatar billede Butterfly Ekspert
18. februar 2014 - 17:27 #15
til MadsHaupt
Jeg har så lidt forstand på det, så jeg kan ikke få koden til at virke, hvad skal jeg sætte før og efter?
Avatar billede Butterfly Ekspert
18. februar 2014 - 17:29 #16
Jeg arbejder i Excel
Avatar billede MadsHaupt Juniormester
18. februar 2014 - 17:37 #17
Jeg ved desværre ikke noget om Excel, jeg arbejder med Windows programmer, så jeg kan kun hjælpe dig med VBA.
Avatar billede MadsHaupt Juniormester
18. februar 2014 - 17:41 #18
Butterlfy skriv noget af din kode, så kan jeg se og fortælle dig hvor den skal sættes ind.
Avatar billede Butterfly Ekspert
18. februar 2014 - 18:35 #19
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.
 
Sub DelTekst()
'
    Selection.TextToColumns Destination:=Range("A4"), DataType:=xlFixedWidth, _
        FieldInfo:=Array(Array(0, 1), Array(7, 1)), TrailingMinusNumbers:=True
    Range("B4").Select
   
End Sub
Avatar billede supertekst Ekspert
18. februar 2014 - 19:04 #20
Har en alternativ totalløsning som jeg kan vise senere hvis det er interessant
Avatar billede Butterfly Ekspert
19. februar 2014 - 06:50 #21
Supertekst det er interessant
Avatar billede supertekst Ekspert
19. februar 2014 - 07:55 #22
Ok
Avatar billede supertekst Ekspert
19. februar 2014 - 08:23 #23
Dim tekst As String
Public Sub opdelString()
    tekst = Range("A3")
   
    For r = 1 To Len(tekst)
        If Len(tekst) > 0 Then
            Cells(r + 3, 1) = Left(tekst, 7)
            tekst = Mid(tekst, 8)
        Else
            Exit For
        End If
    Next r
End Sub
Avatar billede Butterfly Ekspert
19. februar 2014 - 08:47 #24
Formlen går i stå ved For r
Avatar billede supertekst Ekspert
19. februar 2014 - 09:03 #25
Hvilken melding?
Avatar billede supertekst Ekspert
19. februar 2014 - 09:35 #26
Nok fordi r ikke er blevet erklæret

Dim tekst As String, r As Integer
Public Sub opdelString()
    tekst = Range("A3")
   
    For r = 1 To Len(tekst)
        If Len(tekst) > 0 Then
            Cells(r + 3, 1) = Left(tekst, 7)
            tekst = Mid(tekst, 8)
        Else
            Exit For
        End If
    Next r
End Sub
Avatar billede MadsHaupt Juniormester
19. februar 2014 - 09:57 #27
Butterlfy kommer der en fejlmeddelelse?.
Avatar billede MADOlsen Forsker
19. februar 2014 - 10:00 #28
#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!
Avatar billede Butterfly Ekspert
19. februar 2014 - 12:22 #29
#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.
Avatar billede Butterfly Ekspert
19. februar 2014 - 12:36 #30
TAK til alle
Så har jeg fået det til at virke, mange tak for alle bidrag.
Avatar billede MadsHaupt Juniormester
19. februar 2014 - 13:43 #31
Butterlfy prøv det her:
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
Avatar billede MADOlsen Forsker
19. februar 2014 - 13:48 #32
#MadsHaupt: Læs nu for f***** lige de forrige kommentarer, spørger har forlængst fået løst problemet!
Avatar billede supertekst Ekspert
19. februar 2014 - 14:08 #33
Fint - så kan vil afslutte sagen..
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester