Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: [VBA]tekst verdelen over meerdere cellen  (gelezen 10984 keer)

0 leden en 1 gast bekijken dit topic.

Offline robeike

  • Lid
  • *
  • Berichten: 20
  • Geslacht: Man
[VBA]tekst verdelen over meerdere cellen
« Gepost op: 13 april 2009, 17:52:22 »
Hallo ik moet een vba macro maken in excell voor het splitsen van tekst over meerdere cellen. Deze tekst word gekopieerd uit de cel waar de cursor staat of van het klembord gehaald.

De tekst ziet er ongeveer zo uit:
51   2778   1 547047

Zoals je ziet bestaat hij dus uit 4 delen, het aantal characters van ieder deel is niet constant. Maar ze worden wel altijd gescheiden door spaties.

De tekst moet altijd naar rechts opschuiven. Stel dat we plakken met de macro en we staan in cel A1 dan moet het eerste deel in deze cel komen"51", B1 = "2778", C1="1", D1="547047"

Van VBA in excel heb ik totaal geen verstand. Het is de eerste keer dat ik hiermee werk. Ik heb al een beetje zitten prutsen maar krijg die tekst maar niet van het klembord.

Mijn eerste gedacht was van de macro aan een key te binden. Als ik de cursor in een cel plaats en duw op de key dan word de macro uitgevoerd.

Dim tekst As String
tekst = ActiveSheet.Range("A1:A1").Copy

Ik hoopte dat zo de var tekst de inhoud ging krijgen van cel A1 maar blijkbaar niet.

alle hulp is welkom,

robeike  :D

edit:
Ik ben er nu al in geslaagd om de inhoud van een cel te kopieren naar die var. Wat ik nu heb gedaan is een for gemaakt die alle characters afgaat tot wanneer ie een spatie tegenkomt ondertussen plakt hij alle characters aan elkaar en hebben we dus een deel van de tekst. Dit deel word dan in de cel er naast geplakt. Daarna gaat ie weer verder.

Ik heb alleen een klein probleem en dat is dat ik deze var niet kan leegmaken telkens dat ik een deeltje heb weggeschreven...

Gigabyte ga ep45 ds3, 4gig ram 1066mhz, 500W, 320G hdd, E8400, ATI radeon 4870, eset smart security.

Offline robeike

  • Lid
  • *
  • Berichten: 20
  • Geslacht: Man
Re: [VBA]tekst verdelen over meerdere cellen
« Reactie #1 Gepost op: 14 april 2009, 21:54:56 »
We zijn er al een heel eind  8)
Alleen wil ik toch net dat ietsje meer  ;D
Men kan nu alleen cel per cel opsplitsen. Ik wil het zo maken dat hij dit doet voor ieder geselecteerde cel.

Ik zat al te denken aan het gebruik van een array, en dan zo ieder item afgaan. Hier heb je al een overzicht van wat ik heb.

Sub splitsen_chassisnr()
Dim CountY As Integer
Dim CountX As Integer
Dim chars As Integer
Dim tekst As String
Dim curChar As String
Dim stuk As String
Dim Spaces As Integer

tekst = ActiveCell.Text
CountY = ActiveCell.Row
CountX = ActiveCell.Column + 1
chars = Len(tekst)

    For i = 1 To chars
    curChar = Mid(tekst, i, 1)
        If curChar <> " " Then
        stuk = stuk + curChar
       
            If Spaces > 0 Then
                Spaces = Spaces - Spaces
            End If
           
            If i = chars Then
            ActiveSheet.Cells(CountY, CountX).Value = stuk
            stuk = String(0, 8)
            End If
           
        ElseIf curChar = " " Then
        Spaces = Spaces + 1
       
            If Spaces = 1 Then
            ActiveSheet.Cells(CountY, CountX).Value = stuk
            CountX = CountX + 1
            stuk = String(0, 8)
            End If
           
        End If
    Next
End Sub
Gigabyte ga ep45 ds3, 4gig ram 1066mhz, 500W, 320G hdd, E8400, ATI radeon 4870, eset smart security.

Offline dizzl

  • Ambassadeur
  • *****
  • Berichten: 2.346
  • I've Upped my standards,now,up yours!
Re: [VBA]tekst verdelen over meerdere cellen
« Reactie #2 Gepost op: 15 april 2009, 09:27:19 »
Dit is wat ik ervan gemaakt heb

Private Sub cmdSplits_Click()
    Dim objSheet As Worksheet
    Dim objRange As Range
    Dim txtWaarde As String
   
   ' Get the currently active WorkSheet
    Set objSheet = ActiveSheet
   
   ' Get Cell "A1"
    Set objRange = objSheet.Cells(1, 1)
   
   ' Stop de waarde van A1 in een var
   txtWaarde = objRange.Value
   
   
   
   'MsgBox txtWaarde
   Dim teller As Integer
   teller = 2 'startpositie om het eerste stuk te zetten
   
   'We kijken waar de eerste spatie staat
   plaatsSpatie = InStr(txtWaarde, " ")
   
   While plaatsSpatie > 1  'zolang er spaties te vinden zijn
        'Stop hetlinkse deel tot de spatie in de cel
        Cells(1, teller).Value = Left(txtWaarde, plaatsSpatie)
       
        'hou enkel het rechtse deel na de spatie over
        txtWaarde = Right(txtWaarde, Len(txtWaarde) - plaatsSpatie + 1)
       
        'Haal er de (eventuele) extra spaties vooraan nog af
        txtWaarde = LTrim(txtWaarde)
        'kijk opnieuw of we eenspatie hebben
        plaatsSpatie = InStr(txtWaarde, " ")
        'Verhoog teller om de volgende tekst in de volgende cel te kunnen stoppen
        teller = teller + 1
     
   Wend
   'zet nog het laatste stukje in de volgende cel
   Cells(1, teller) = txtWaarde
End Sub
Systeem  : Intel Core i5-4440 3.1Ghz, 3.1GHz 16Giga Ram 64Bits
Software : Windows 10 professional, Avira, Office 2016 Professional

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.284
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: [VBA]tekst verdelen over meerdere cellen
« Reactie #3 Gepost op: 15 april 2009, 12:48:56 »
...Het kan samengevat worden in 1 regeltje... ;D
Sub Splitsen()

    Range("A1").Resize(1, 4).Value = Split(WorksheetFunction.Trim(Replace(ActiveCell.Value, Chr(160), "")), " ")

End Sub
De replace-functie is toegevoegd omdat er een 'non breaking space' (= ASCII 160) in de string staat (2x). 'Replace' verwijderd deze eerst voor het geval dat je de data altijd zo aanlevert.

Groet, Leo

[da's prettig.... eindelijk weer 'ns een beetje tijd voor een reactie... ;))
______________________________

Groet, Leo

Offline robeike

  • Lid
  • *
  • Berichten: 20
  • Geslacht: Man
Re: [VBA]tekst verdelen over meerdere cellen
« Reactie #4 Gepost op: 16 april 2009, 16:47:26 »
beiden bedankt voor de reacties maar ik hou het toch bij dat van mij  ;) Ik weet dan tenminste waar ik met bezig ben.

Maar ik ben nu even bezig aan het zoeken om het zo te maken dat alle geselecteerde items afgegaan worden met die macro en dan zo 1 voor 1 worden opgesplitst.
Gigabyte ga ep45 ds3, 4gig ram 1066mhz, 500W, 320G hdd, E8400, ATI radeon 4870, eset smart security.

Offline robeike

  • Lid
  • *
  • Berichten: 20
  • Geslacht: Man
Re: [VBA]tekst verdelen over meerdere cellen
« Reactie #5 Gepost op: 16 april 2009, 18:16:41 »
Hah heb het al gevonden  8) lang leve google  :P
Het was zeer simpel eigenlijk. Ik weet dat de macro niet echt gemaakt is zoals het moet maar ik ben toch tevreden van mijn eerste brouwsel  :D

Sub splitsen_chassisnr()
Dim CountY As Integer
Dim CountX As Integer
Dim chars As Integer
Dim tekst As String
Dim curChar As String
Dim stuk As String
Dim Spaces As Integer
Dim oCell As Range

'gaat iedere cel af in de selectie
For Each oCell In Selection
tekst = oCell.Text
CountY = oCell.Row
CountX = oCell.Column + 1
chars = Len(tekst)

    For i = 1 To chars
    curChar = Mid(tekst, i, 1)
        If curChar <> " " Then
        stuk = stuk + curChar
       
            If Spaces > 0 Then
                Spaces = Spaces - Spaces
            End If
           
            If i = chars Then
            ActiveSheet.Cells(CountY, CountX).Value = stuk
            stuk = String(0, 8)
            End If
           
        ElseIf curChar = " " Then
        Spaces = Spaces + 1
       
            If Spaces = 1 Then
            ActiveSheet.Cells(CountY, CountX).Value = stuk
'raar maar waar, soms werd een cel in het vet gezet. Nu niet meer.
            ActiveSheet.Cells(CountY, CountX).Font.Bold = False

            CountX = CountX + 1
            stuk = String(0, 8)
            End If
           
        End If
    Next
Next
End Sub
Gigabyte ga ep45 ds3, 4gig ram 1066mhz, 500W, 320G hdd, E8400, ATI radeon 4870, eset smart security.

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.284
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: [VBA]tekst verdelen over meerdere cellen
« Reactie #6 Gepost op: 18 april 2009, 21:58:35 »
Zelf 'klooien' met VBA is het leukste dat er is. Zo leer je er inderdaad het meeste van. Vergeet daarnaast toch niet te kijken naar de tips die je krijgt van helpers die al langer 'aan 't kijken zijn'... ;) De kracht van goed programmeren zit 'm ook in het verkorten en versimpelen van de code. Maak dus vooral gebruik van reeds bestaande functies binnen VBA. Zo'n functie als 'Split' is bijvoorbeeld véél efficienter dan een lus. Maarrrrr... Laat je vooral niet stoppen in deze leuke ingeslagen weg. ;D

Wist je trouwens dat er een standaard functionaliteit in Excel zit die je probleem in 1 keer oplost? Via het menu kan je gaan naar Data > Text To Columns (data > tekst naar kolommen). Selecteer je cel maar 'ns en klik die optie aan. De wizard zal je dan verder helpen. Dit kan uiteraard óók direct met een hele selectie.

Groet, Leo
______________________________

Groet, Leo

 


www.combell.com