Help!

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

Hulp bij posten

Recente topics

Auteur Topic: E nummers uit tekst halen  (gelezen 256 keer)

0 leden en 1 gast bekijken dit topic.

Offline Georgyboy

  • Ervaren lid
  • ***
  • Berichten: 264
  • Geslacht: Man
  • Oplossing.be
E nummers uit tekst halen
« Gepost op: 20 september 2022, 15:00:37 »
Goeiedag,

Vraagjes,
1) Kunnen we het aantal in dit geval E-Nummers optellen?
in dit geval E+3 cijfers.

Geprobeerd met: =AANTAL.ALS(B3:B10;"*E*") maar klopt niet.

2) Kunnen we ook het aantal E-Nummers op lijsten?
In dit geval : E412, E415, E322, E415

Alvast bedankt,
Groeten,
Georgyboy

Offline MollyVH

  • Excel-Expert
  • Volledig lid
  • *****
  • Berichten: 211
  • Hey, ik ben nieuw hier !
Re: E nummers uit tekst halen
« Reactie #1 Gepost op: 20 september 2022, 16:25:51 »
Hallo Georgyboy,

Ik heb het in de code bij jouw voorbeeld gehouden (gegevens in kolom B van rij 3 tot rij 10, bedoel ik), dus vooral om je de manier te tonen.
De resultaten komen daarbij in kolom D.
Probeer dus maar eens hiermee:
Sub e_nummers()

Dim arr()
With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "[E][0-9]{3}"
    For i = 3 To 10
        tekst = Cells(i, 2)
        Set r = .Execute(tekst)
        For Each it In r
            aantal = aantal + 1
            ReDim Preserve arr(1 To aantal)
            arr(aantal) = it
        Next it
    Next i
End With
Cells(3, 4) = "aantal: " & aantal
Cells(5, 4).Resize(UBound(arr)) = Application.Transpose(arr)

End Sub

Groetjes,
Molly

Offline Georgyboy

  • Ervaren lid
  • ***
  • Berichten: 264
  • Geslacht: Man
  • Oplossing.be
Re: E nummers uit tekst halen
« Reactie #2 Gepost op: 20 september 2022, 16:57:02 »
Hartelijk Dank MollyVH  _/-\o_

Dit is het resultaat die ik zocht  :)

Vraagje,
Is het mogelijk om je mooie code per regel even uit te leggen, bij wijze om je mooi werkende code beter te begrijpen.

Ben nu al zéér tevreden!

Groeten,
Georges

Offline JEC

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 348
Re: E nummers uit tekst halen
« Reactie #3 Gepost op: 20 september 2022, 20:27:15 »
Hier nog een variant met Regex

Sub jec()
 Dim x00, it
 ReDim ar(0)

 With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = "E\d{3}"
    Set x00 = .Execute(Join(Application.Transpose(Cells(3, 2).CurrentRegion)))
    ar(0) = "Aantal: " & x00.Count
    For Each it In x00
       ReDim Preserve ar(UBound(ar) + 1)
       ar(UBound(ar)) = it
    Next
    Cells(3, 18).Resize(UBound(ar) + 1) = Application.Transpose(ar)
 End With
End Sub

Als je alleen het aantal wilt, is dit voldoende

Function jec(rng As Range) As Long
 With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = "E\d{3}"
   jec = .Execute(Join(Application.Transpose(rng))).Count
 End With
End Function
« Laatst bewerkt op: 20 september 2022, 20:53:17 door JEC »

Offline JEC

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 348
Re: E nummers uit tekst halen
« Reactie #4 Gepost op: 20 september 2022, 20:33:43 »
Formule variant. Voor office 365 laat hij alles gelijk zien. Laat maar weten als je die versie nog niet hebt.

=SUBSTITUEREN(XML.FILTEREN("<x><y>"&SUBSTITUEREN(TEKST.COMBINEREN(;;B3:B10);" ";"</y><y>")&"</y></x>";"//y[contains(., 'E') and translate(.,'1234567890','')!=.]");",";"")

Offline Georgyboy

  • Ervaren lid
  • ***
  • Berichten: 264
  • Geslacht: Man
  • Oplossing.be
Re: E nummers uit tekst halen
« Reactie #5 Gepost op: 21 september 2022, 07:52:44 »
Goedemorgen,

Wauw jullie zijn echt fantastisch, hartelijk dank!  _/-\o_
De versie Excel is 2016.

Met vriendelijke groeten,
Georgyboy

Offline MollyVH

  • Excel-Expert
  • Volledig lid
  • *****
  • Berichten: 211
  • Hey, ik ben nieuw hier !
Re: E nummers uit tekst halen
« Reactie #6 Gepost op: 21 september 2022, 09:33:15 »
Dag Georges,

Citaat
Is het mogelijk om je mooie code per regel even uit te leggen
Je hebt gelijk, dat had er wel bij gemogen…
Een woordje uitleg over RegExp misschien toch beter buiten de code: het is simpel gezegd een methode om patronen te definiëren waarmee software ‘tekst’ kan vinden. Als je zin zou hebben om je daar verder in te verdiepen zal een beetje googelen wel uitkomst bieden. Eerlijk gezegd vind ik het zelf ook niet altijd even makkelijk om dat patroon te beschrijven, maar voor je vraag viel dat enorm mee.
Overige uitleg vind je dus in de ‘aangepaste’ code.

Groetjes,
Molly

Sub e_nummers()

Dim arr() 'definitie van een array om de resultaten in te verzamelen
With CreateObject("VBScript.RegExp")
    .Global = True                          'aangeven dat ALLE overeenkomsten moeten behouden blijven
                                            'met False zou E415 uit rij 7 er niet bij komen
    .Pattern = "[E][0-9]{3}"                'E gevolgd door 3 maal een karakter uit 0 tot 9
    For i = 3 To 10
        tekst = Cells(i, 2)
        Set r = .Execute(tekst)             'uitvoeren van de zoekactie
        For Each it In r                    'voor elke waarde uit dat resultaat:
            aantal = aantal + 1
            ReDim Preserve arr(1 To aantal) 'de array met 1 element uitbreiden
            arr(aantal) = it                'en de waarde aan dat laatste element toekennen
        Next it
    Next i
End With
Cells(3, 4) = "aantal: " & aantal
Cells(5, 4).Resize(UBound(arr)) = Application.Transpose(arr)
    'transpose enkel om de array-elementen verticaal op het werkblad te zetten

End Sub

Offline Georgyboy

  • Ervaren lid
  • ***
  • Berichten: 264
  • Geslacht: Man
  • Oplossing.be
Re: E nummers uit tekst halen
« Reactie #7 Gepost op: 21 september 2022, 10:31:23 »
Dankjewel !  _/-\o_

Beter kan een vraagsteller niet wensen  :thumbsup:

Offline Georgyboy

  • Ervaren lid
  • ***
  • Berichten: 264
  • Geslacht: Man
  • Oplossing.be
Re: E nummers uit tekst halen
« Reactie #8 Gepost op: 21 september 2022, 11:03:46 »
Beste Jec,

Even je code geprobeerd (bij wijze van bijleren) maar krijg geen resultaat, doe ik iets verkeerd?

Sub jec2()
 Dim x00, it
 ReDim ar(0)

 With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = "E\d{3}"
    Set x00 = .Execute(Join(Application.Transpose(Cells(3, 2).CurrentRegion)))
    ar(0) = "Aantal: " & x00.Count
    For Each it In x00
       ReDim Preserve ar(UBound(ar) + 1)
       ar(UBound(ar)) = it
    Next
    Cells(3, 18).Resize(UBound(ar) + 1) = Application.Transpose(ar)
 End With
End Sub


Deze werkt ook perfect  _/-\o_

Function jec(rng As Range) As Long
 With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = "E\d{3}"
   jec = .Execute(Join(Application.Transpose(rng))).Count
 End With
End Function


Offline Georgyboy

  • Ervaren lid
  • ***
  • Berichten: 264
  • Geslacht: Man
  • Oplossing.be
Re: E nummers uit tekst halen
« Reactie #9 Gepost op: 21 september 2022, 12:00:52 »
Sorry voor mijn reactie Jec,

Je code werkt wel! op bestand in vraagstelling.
Bij kopiëren naar mijn bestand gebeurd er niets, ik doe ergens iets verkeerd...

Zie wel In bijlage

  - : [_NewEnum] :  : <Niet-ondersteund objecttype>

Offline Georgyboy

  • Ervaren lid
  • ***
  • Berichten: 264
  • Geslacht: Man
  • Oplossing.be
Re: E nummers uit tekst halen
« Reactie #10 Gepost op: 21 september 2022, 14:58:09 »
Nogmaals sorry voor mijn reactie JEC,

Gevonden:
Uitkomst staat in kolom "R", wat ik niet direct zag
Als de tekst vanaf regel 5 start, dan foutmelding
  Set x00 = .Execute(Join(Application.Transpose(Cells(3, 2).CurrentRegion)))
Georgyboy,

Offline JEC

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 348
Re: E nummers uit tekst halen
« Reactie #11 Gepost op: 21 september 2022, 17:25:30 »
Geen probleem! Ik heb hier nog een sleepbare formule voor je omdat je met een oudere versie werkt.
Deze moet je afsluiten met control shift enter en dan doortrekken naar beneden en naar rechts.

=ALS.FOUT(INDEX(SUBSTITUEREN(XML.FILTEREN("<x><y>"&SUBSTITUEREN($B3;" ";"</y><y>")&"</y></x>";"//y[contains(., 'E') and translate(.,'1234567890','')!=.]");",";"");KOLOM(A1));"")

 


www.combell.com