• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

String delen in 3 kolommen

Status
Niet open voor verdere reacties.

Bergsma1

Gebruiker
Lid geworden
7 feb 2012
Berichten
40
Hoi,

Ik heb geen kennis van VBA en heb me tot nu toe er vaak onderuitgewerkt, maar nu heb ik een VBA script nodig dat een string omzet in kolummen

In de bijlage de string met twee type seperatoren, deze kan ik natuurlijk aanpassen naar een enkele mocht dat handig zijn

Seperator "," separeert de strings in kortere strings en separator ";" separeert in 3 gegevenstypen die ik graag in 3 kolummen gesplitst wil hebben.

Kan iemand dit oplossen? Volgens mij moet het niet enorm lastig zijn.

Regards,
RonBekijk bijlage Split.xlsx
 
Bedankt! de code werkt perfect. Heb de code ondertussen geintergreerd in de rest van de macro
 
± 80x sneller.
Code:
Sub hsv()
Dim sn
sn = Split(Cells(1), ",")
   Cells(3, 1).Resize(UBound(sn)) = Application.Transpose(sn)
   Cells(3, 1).Resize(UBound(sn)).TextToColumns , , , , , , , , 1, ";", , ".", ","
End Sub
 
Laatst bewerkt:
Geweldige code ! Super !!! :thumb:

Kleine opmerking: ik aanvaard dat die code 2 tot 3 keer sneller is, maar voor 80 keer sneller zie ik graag het bewijs. ;)
 
Dag MDN111,

Nee, dat was gekheid, was puur bedoeld om even je aandacht te trekken dat tussentijdse interacties naar het werkblad tijd kost.
Je hebt een loop van 81 (ubound(a) waar ik er niet één heb.
Daarbij heb je 81*3 interacties naar het blad (.cells(i+3,1)= ) waar ik er maar één heb (application.transpose(sn)).
Enkel 'texttocolumns' is een toevoeging waarbij ik een tweede interactie maak, en die is traag.

Voor een loop zou ik het in een array zetten die het in het werkgeheugen schrijft, en dan de array in één keer wegschrijven naar het blad.
Onderstaande code is 4 keer sneller dan mijn vorige. ;)
Code:
Sub Separate()
Dim a, b, i As Long, j As Long
a = Split(ThisWorkbook.Sheets(1).Cells(1, 1), ",")
ReDim arr(UBound(a), 2)
    For i = 0 To UBound(a) - 1
        b = Split(a(i), ";")
         For j = 0 To 2
           arr(i, j) = b(j)
         Next j
    Next
 Cells(3, 1).Resize(UBound(a), 3) = arr
End Sub
 
Dag HSV !

Bedankt voor de verduidelijking, ik had het zelf ook al wel begrepen toen ik je code zag. Ik had alleen voor de sport een timer in beide procedures ingevoegd en de tijden even bekeken ;).
Nu zit ik mij natuurlijk af te vragen waarom je bij je eerste antwoord niet meteen je tweede methode gebruikt hebt? :confused:

Wat ik uit je tweede code ook leer, is dat je zelfs de Excel-Vba-help functie niet altijd moet geloven. Bij het ReDim-statement staat er namelijk "The ReDim statement is used to size or resize a dynamic array that has already been formally declared using a Private, Public, or Dim statement with empty parentheses (without dimension subscripts).". Blijkbaar niet dus.

Grtz,
MDN111.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan