Help!

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

Hulp bij posten

Recente topics

Auteur Topic: Splitten met Quotes  (gelezen 693 keer)

0 leden en 1 gast bekijken dit topic.

Offline Veerj

  • Volledig lid
  • **
  • Berichten: 203
Splitten met Quotes
« Gepost op: 19 augustus 2021, 19:40:50 »
Leuke uitdaging:

In cel A1 staat:  Een,Twee,"Drie,Vier",Vijf,Zes,"Zeven,Acht",Negen,"Tien,Elf,Twaalf"
Je wilt dat de geretourneerde array er uitziet als onderstaand(noem het Arr voor dit voorbeeld):

Arr(0) > Een
Arr(1) > Twee
Arr(2) > "Drie,Vier"
Arr(3) > Vijf
Arr(4) > Zes
Arr(5) > "Zeven,Acht"
Arr(6) > Negen
Arr(7) > "Tien,Elf,Twaalf"

Ik ben benieuwd naar jullie methoden.
« Laatst bewerkt op: 19 augustus 2021, 20:42:34 door Veerj »

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.165
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: Splitten met Quotes
« Reactie #1 Gepost op: 19 augustus 2021, 21:02:09 »
So h... da's een breinbreker!!!   :'(
Ik zie ook na een uurtje puzzelen niet hoe je er voor kan zorgen dat de komma in je waarde tussen de dubbele quotes even kan worden aangepast naar bijvoorbeeld een pipe (|) zodat je daarna wel kan splitsen op de komma zonder dat je dubbele quotes waarde ook opgesplitst worden.
Misschien na een nachtje slapen dat het lukt.... ;)
______________________________

Groet, Leo

Offline Veerj

  • Volledig lid
  • **
  • Berichten: 203
Re: Splitten met Quotes
« Reactie #2 Gepost op: 19 augustus 2021, 21:04:25 »
Hahah, ik heb eventueel een tip waarmee je kunt starten!  ;D

Offline Warme bakkertje

  • Excel-Expert
  • Volledig lid
  • *****
  • Berichten: 136
  • Geslacht: Man
Re: Splitten met Quotes
« Reactie #3 Gepost op: 20 augustus 2021, 08:46:20 »
Aan het denken gezet door de opmerking van Leo, hier mijn kleine bijdrage.

Function SplitString(SplitsTekst As String, SplitsTeken As String, _
                Optional GroepsTeken As String, Optional VervangTeken As String)
    S = SplitsTekst
    If Len(GroepsTeken) > 0 Then
        For N = 1 To Len(S)
            If Mid(S, N, Len(GroepsTeken)) = GroepsTeken Then
                GroepAanwezig = Not GroepAanwezig
            End If
            If Mid(S, N, 1) = SplitsTeken Then
                If GroepAanwezig Then
                    Mid(S, N, 1) = VervangTeken
                End If
            End If
        Next N
    End If
    Arr = Split(S, SplitsTeken)
    For N = LBound(Arr) To UBound(Arr)
        Arr(N) = Replace(Arr(N), VervangTeken, SplitsTeken)
    Next
    SplitString = Arr
End Function

Sub tst()
    'x = SplitString(Range("A1"), ",", """", "|")
    x = SplitString(Range("A1"), Chr(44), Chr(34), Chr(124))
    For i = 0 To UBound(x)
        Cells(3, i + 5) = x(i)
    Next
End Sub
Windows 10 Home   NLD 64bit

Microsoft Office Professional Plus 2016 US

Offline Veerj

  • Volledig lid
  • **
  • Berichten: 203
Re: Splitten met Quotes
« Reactie #4 Gepost op: 20 augustus 2021, 10:56:51 »
Hi Warme Bakkertje,

Vindingrijke oplossing! Zo zie ik alweer, er leiden meerdere wegen naar Rome.
Ik zal vandaag of morgen mijn oplossing plaatsen.

In de tussentijd komen er misschien nog meerdere oplossingen  :)

Offline RedHead

  • Excel-Expert
  • Ambassadeur
  • *****
  • Berichten: 2.165
  • Geslacht: Man
  • Met Excel lukt 't wel.... (toch???)
Re: Splitten met Quotes
« Reactie #5 Gepost op: 20 augustus 2021, 12:05:25 »
Ons Warme Bakkertje heeft inderdaad de weg gevolgd die ik voor ogen had. Met dit verschil dat hij er wl is uitgekomen en ik gisteren na dat uurtje dus volkomen verstrikt zat in m'n lussen. Ha ha ha...  ;D
Verder heb ik nog hl even wat met Regex zitten bekijken. Maar daar kwam ik in de gauwigheid ook niet uit met het vinden van de "volgende instantie van de dubbele quote groep". De 1e is vindbaar. Ook met formules trouwens.
Ik ben wel benieuwd wat jij er dan van hebt gemaakt Veerj. ;)
______________________________

Groet, Leo

Offline Veerj

  • Volledig lid
  • **
  • Berichten: 203
Re: Splitten met Quotes
« Reactie #6 Gepost op: 20 augustus 2021, 12:45:39 »
@Redhead, Ik heb het in de eerste instantie ook met Regex geprobeerd. Is gelukt maar dan is de volgorde anders. Die zal ik vanmiddag ook plaatsen.

Mijn oplossing is wat anders dan die van Warme Bakkertje. Ik begin met een split op dubbele quotes. Misschien kun je daar iets mee!

Offline Veerj

  • Volledig lid
  • **
  • Berichten: 203
Re: Splitten met Quotes
« Reactie #7 Gepost op: 20 augustus 2021, 16:12:58 »
Hieronder mijn oplossing

Sub jvr()
  arr = Split([A1], """")
 
  For i = 0 To UBound(arr) Step 2
     arr(i) = Replace(arr(i), ",", "|")
  Next
 
  jv = Split(Join(arr, """"), "|")
  [E3].Resize(, UBound(jv) + 1) = jv
End Sub

Als functie:

Function jvr(cell As String)
  arr = Split(cell, """")
  For i = 0 To UBound(arr) Step 2
      arr(i) = Replace(arr(i), ",", "|")
  Next
  jvr = Split(Join(arr, """"), "|")
End Function


@Redhead, hieronder met Regex. Je zult zien dat de volgorde anders is.

Function QuotedSplit(cell As String) As Variant
  With CreateObject("VBscript.Regexp")
   .Pattern = """(.*?)"""
   .Global = True
   Set ar = .Execute(cell)
  End With
  For Each it In ar
    arr = arr & it & "~"
    cell = Replace(Replace(cell, Replace(it, "~", ""), ""), ",,", "~")
  Next
 QuotedSplit = Split(Join(Array(arr, Replace(cell, ",", "~"))), "~")
End Function
« Laatst bewerkt op: 20 augustus 2021, 16:21:07 door Veerj »

Offline Warme bakkertje

  • Excel-Expert
  • Volledig lid
  • *****
  • Berichten: 136
  • Geslacht: Man
Re: Splitten met Quotes
« Reactie #8 Gepost op: 29 augustus 2021, 09:17:40 »
Eentje in de juiste volgorde.

Function SpitQ(st, n&)
    On Error Resume Next: SpitQ = ""
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "(""[^""]*"")|[^,]+"
        SpitQ = .Execute(st)(n - 1)
    End With
End Function

In E2
=SpitQ($A$1;COLUMNS($E1:E1))en doortrekken naar rechts.
Windows 10 Home   NLD 64bit

Microsoft Office Professional Plus 2016 US

Offline Veerj

  • Volledig lid
  • **
  • Berichten: 203
Re: Splitten met Quotes
« Reactie #9 Gepost op: 30 augustus 2021, 09:04:17 »
Mooi gevonden! :)

 


www.combell.com