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

Woord dat start met 'm' of 'M'

Status
Niet open voor verdere reacties.
Code:
Function F_snb(c00)
   sn = Filter(Split(Replace(c00, "(", " (")), "m", , 1)
   
   For j = 0 To UBound(sn)
      If LCase(Left(sn(j), 1)) & Len(sn(j)) = "m5" Then Exit For
   Next
   
   If j <= UBound(sn) Then F_snb = sn(j)
End Function
 
ik moet toegeven, als je naar de opgegeven voorbeelden kijkt, dan is het goed gevonden.knap.
in dezelfde trant, deze. (Kan nog foutgaan met een komma of een punt in de eerste 4 volgende karakters)
Code:
Function F_cow(c00)
   sn = Split(c00, "m")

   For j = 0 To UBound(sn)
      If Len(sn(j)) >= 4 And IsNumeric(Left(sn(j), 4)) Then F_cow = "M" & Left(sn(j), 4): Exit Function
   Next

   F_cow = "foutje"
End Function
 
Laatst bewerkt:
Vermits ik de thread met interesse aa n het volgen ben, hier ook mijn bijdrage, vooral in het licht van deze zin uit post 3
maar wel altijd 'm' of 'M' gevolgd door 4 cijfers of letters. Vb. m1234 of M4JX2 mER40 enz...
 

Bijlagen

@cow

Je resultaten zijn een stuk beter als je de ondergrens van de lus met 1 verhoogt:

For j = 1 To UBound(sn)

@wher

Met deze string
[Mm]\w{4}

en deze funktie
Code:
Function F_snb2(c00, c01)
  With CreateObject("VBScript.RegExp")
     .Pattern = c01
     F_snb2 = .Execute(c00)(0)
  End With
End Function
en deze aanroep

PHP:
=iferror(F_snb2(B2;$D$1);"")
 
Laatst bewerkt:
Dat is inderdaad korter, de UDF is gerecycleerd uit een ander bestand waar meerdere matches gezocht werden, vandaar de loop.
 
@WHER

In jou voorbeeld heeft hij enkel een ongewenste match als M gevolgd word door 4 letters, is het mogelijk om deze er gewoon uit te laten?
Dus als M gevolgd word door 4 letters dat deze niet meegeteld word ?

Mvg,

Steven
 
Zie bijlage. De eenvoudigste oplossing is waarschijnlijk een aanpassing aan het regex-patroon in cel D1, maar dat lukte mij niet.
 

Bijlagen

Dag WHER,

In het blauw gebied optie 2 geeft hij nu wel niets weer als er ergens in de tekst een 'm' gevolgd door 4 letters instaat. bv. in G2 geeft hij niets omdat daar Machine staat maar het resultaat zou dan M7929 moeten zijn zoals in E2?
Kan dit ?

Als ook kan er in 1 formule gekeken worden naar 2 tabelen of het Machine# voorkomt dus gelijk in kolom A en B ?

Alvast super bedankt !

Mvg,

Steven
 
Probleem in G2 zou opgelost moeten zijn, zie bijlage.
Kolom A en B lukt me niet.
 

Bijlagen

Code:
Function F_cow(c00)
   Application.Volatile
   On Error GoTo einde
   sn = Split(LCase(c00), "m")
   F_cow = ""
   For j = 1 To UBound(sn)
      If Len(sn(j)) < 4 And j < UBound(sn) Then sn(j) = sn(j) & "M" & sn(j + 1)
      If Len(sn(j)) >= 4 Then
         cijfers = 0
         For i = 1 To 4
            cijfers = cijfers - IsNumeric(Mid(sn(j), i, 1))
         Next
         If cijfers >= 3 Then F_cow = "M" & Left(sn(j), 4): Exit Function
      End If
   Next
einde:
   F_cow = ""                                    ' foutje" & Err.Number
End Function
 
@WHER

Als ik in je code kijk moet normaal als hij dan geen machine # vind "not matched" terug geven. Echter krijg ik #VALUE! error terug.
kan het zijn dat hij niet in deze else terecht komt?

Mvg,

Steven
 
Zet een "als.fout" rond de bestaande formule, dat lijkt mij de eenvoudigste aanpak.
Bijvoorbeeld in G20:
PHP:
=ALS.FOUT(ALS(SOM(--(ISGETAL(DEEL(F_snb2(B20;$D$1);RIJ($2:$5);1)*1)));F_snb2(B20;$D$1);F_snb3(B20;$D$1));"")
Tussen de dubbele quotes kan je desgewenst nog een tekst zetten i.p.v. de lege string
 
Regex (laatste teken is een spatie):
[Mm]\w{4}\

formule

PHP:
=F_snb2(B2;$D$1)

UDF:

Code:
Function F_snb2(c00, c01)
  With CreateObject("VBScript.RegExp")
     .Pattern = c01
     F_snb2 = .Execute(Replace(c00, "(", " "))(0)
  End With
End Function
 
@WHER

Werkt perfect !

Nu moet ik alleen nog beetje proberen te begrijpen hoe het juist allemaal werkt :D

Alvast heel hard bedankt iedereen !

Mvg,

Steven
 
Bekijk de oplossing van snb in post #33 ook eens, die werkt perfect in het voorbeeldbestand.
 
@WHER

Ik vrees dat er ergens nog een foutje inzit of ik doe weer iets niet juist.
Ik heb de file even uitgebreid naar een 15000 regels en als ik dan even Optie 2 probeer: blauw gebied, optie2: formule inbrengen in G2 ( met ctrl+shift+enter), naar beneden slepen.

Dan komen er toch nog mismatchen voor bv G1462 geeft 'machi' terug hetzelfde in G1558 en nog een paar.
G2929 en G2930 geeft hij 'Micro' terug G3092 geeft hij "multi" terug G5273 en G5274 G5712 enz ;) Als je een filter op kolom G zet zie je er nog wel een aantal.

Hetzelfde voor Kolom H.

Alvast bedankt.

Mvg,

Steven
 

Bijlagen

@WHER ook als ik in de kolom I volgende zet : =IF(G7<>"Not found", G7,IF(H7<>"Not found",H7,"Succes")) krijg ik als resultaat "0" ipv M7929
 
Ik vrees dat deze aanpak toch niet naar het gewenste resultaat zal leiden, zoveel variabelen zijn moeilijk te vatten.
 
Plaats even een normaal voorbeeld bestand. Deze is nauwelijks te openen. meer dan 28000 matrixformules maakt het niet echt werkbaar.
 
Spijtig genoeg is het een bestand van 15000 regels dus spijtig ook veel formules :(
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan