• 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.

Reeks van 4 getallen vinden en kopieren

Status
Niet open voor verdere reacties.

barrypieters

Gebruiker
Lid geworden
21 jun 2016
Berichten
5
Beste allemaal,

Ik heb hulp nodig bij het volgende. Ik wil graag een reeks van 4 getallen uit een grotere reeks van tekens copieren naar een aparte kolom. De grotere reeks van tekens bevat getallen, letters, en speciale tekens. De vier getallen die ik wil kopiëren, worden vooraf gegaan door een '/' of een spatie. Ze worden gevolgd door een spatie. Soms komt de reeks met de 4 getallen twee keer voor in de grotere reeks.

Voorbeeld van een source string waarin de 4 te kopiëren getallen twee keer voorkomen:
/TRTP/iDEAL/IBAN/NL18ABNS0475399679/BIC/ABNANL2A/NAME/HNMB DE TIJL CJ/REMI/3034 0040009877922268 3034 Dommelstraat waterbouw Hars & van de Paal agenten/EREF/29-02-2016 23:31 0030001487922268

Te kopieren getallen:
3034

Voorbeeld van een source string waarin de 4 te kopieren getallen maar één keer voorkomen:
/TRTP/iDEAL/IBAN/NL45RAGO0147170842/BIC/RABONL2U/NAME/A.B.R. STEIN/REMI/Bestelling mededeling 3028 0030001487559269 Windpark Huig Hars ? van de Paal agenten/EREF/29-02-2016 19:16 0030001487559269

Te kopieren getallen:
3028

Ik ben op zoek naar een formule voor in kolom B die de getallen kan vinden in de reeks tekens in kolom A.
Als de 4 getallen twee keer voorkomen, heb ik het liefst dat ze maar één keer getoond worden in kolom B.

Als het mogelijk is, wil ik wegblijven van macros. Moet wat dat betreft realistisch zijn qua vaardigheden die ik bezit.

Bij voorbaat dank voor jullie hulp.

Barry
 
En nu nog even melden dat je de vraag ook gesteld hebt in mrexcel.com

Maak een UDF in een macromodule:

Code:
Function F_snb(c00)
   F_snb=""
   sn=split(split(c00,"/")(10))

   for j=0 to ubound(sn)
      if format(val(sn(j)))=sn(j) then exit for
   next
   if j<=ubound(sn) then F_snb=sn(j)
End Function
Als de gegevens in cel A1 staan:
In cel B1 zet je dan : =F_snb(A1)
 

Bijlagen

  • __tis bar snb.xlsb
    12,9 KB · Weergaven: 32
Laatst bewerkt:
Hier nog een formule-variant die in dit specifieke geval werkt volgens mij...
Code:
=DEEL(A1;SOMPRODUCT(KLEINSTE(ALS.FOUT(VIND.SPEC({"0 ";"1 ";"2 ";"3 ";"4 ";"5 ";"6 ";"7 ";"8 ";"9 "};A1);100000);1))-3;4)
 
Hoi snb,

Ik heb net succesvol de UDF aan mijn werkboek toegevoegd. Ben mezelf ook maar gaan verdiepen in BVA, teneinde de formule te bedenken. Je hebt de uitdaging op ingenieuze wijze geherdefinieerd en een zeer compactie functie weten te schrijven. En de functie werkt perfect, behalve wanneer de betalende partij van een en/of-rekening betaald. Dan staat het getal dat ik wil hebben niet achter de 10e 'slash-forward', maar achter de 11e.

Ik heb een tweede versie van de UDF gemaakt, waarbij ik de limiet van de split-functie op 11 i.p.v. 10 zet. Voor alle cellen waar de oorspronkelijke functie geen waarde teruggeeft, geeft deze aangepaste functie de benodigde waarde. Voor mij een voorzichtig bewijs dat ik de VBA-taal kan volgen en jouw functie begrijp (tot op bepaalde hoogte)

Ik heb nog geen kennis om alles in één functie te proppen (dit zijn echt mijn eerste stappen in BVA), m.a.w. om rekening te houden met de mogelijkheid dat de waarde niet achter de 10 slash-forward maar achter de 11e slash-forward staat. Als dat eenvoudig te doen is, hoor ik het graag.

Groeten,

Barry
 
Probeer eens:

Code:
Function F_snb(c00)
   F_snb=""
   sn=split(c00,"/")
   sn=split(sn(10) & " " & sn(11))

   for j=0 to ubound(sn)
      if format(val(sn(j)))=sn(j) then exit for
   next
   if j<=ubound(sn) then F_snb=sn(j)
End Function
 
Laatst bewerkt:
Volgens mij een haakje openen teveel bij sn=(split(c00,"/").
Ik heb het eerste haakje openen weggehaald en het werkt prima.
 
Hoi snb,

Om vervolgens het IBAN-nummer uit de string te halen, ben ik aan het werk gegaan met de eerste versie van de functie die je schreef. Ik heb hier van gemaakt:
Function IBANEXTRACT(c00)
IBANEXTRACT = ""
sn = Split(Split(c00, "/")(4))

For j = 0 To UBound(sn)
If Format(Val(sn(j))) = sn(j) Then Exit For
Next
If j <= UBound(sn) Then IBANEXTRACT = sn(j)
End Function

Die functie resulteert echter niet in de gewenste waarden
Waar het volgens mij misgaat, is bij mijn begrip van 'Format(Val(sn(j))) = sn(j).
Volgens mij klopt mijn aanpak niet. Zit ik wel in de buurt?

Groeten,

Barry
 
Gebruik svp code markeringen (code tags) rondom VBA code.

Mij lijkt dit voldoende

Code:
Function F_iban(c00) As String
  On Error Resume Next
  F_iban = Split(c00, "/")(4)
End Function
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan