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

Steven89

Gebruiker
Lid geworden
14 apr 2020
Berichten
22
Dag,

In kolom L en K heb ik textvelden, in deze tekstvelden staat tussen de tekst de naam van machinenummers die starten met 'm' of 'M' gevolgd door 4 cijfers. Dus bv. m1234 of M1234.
Ik zou deze er automatisch uit moeten kunnen halen en in kolom P moeten plaatsen. Dus bv:

in kolom K staat: 2016 Mar.28 Logi 300MM XT-Dry M6821 MI
dan zou er in kolom P M6821 moeten komen te staan.

Moest er geen machine nummer gevonden worden mag er N/A weer gegeven worden.

Heeft iemand een idee hoe ik dit kan aanpakken met VBA ?

Alvast bedankt.

Mvg,

Steven
 
Heb je het voorbeeldbestand? Heb je in dat bestand beschikking tot al je machinenummers? En moet het per se met VBA?
 
Hi JVeer,

Dank je voor het snelle antwoord. Ik heb geen voorbeeldbestand van de machine nummers aangezien dit altijd andere benamingen kunnen zijn maar wel altijd 'm' of 'M' gevolgd door 4 cijfers of letters. Vb. m1234 of M4JX2 mER40 enz...

Het moet niet in VBA te zijn maar ik dacht misschien dat dit de beste mogelijkheid was.

Alvast bedankt.

Mvg,

Steven
 
Maak dan s.v.p. even een voorbeeldje met de verschillende opties hoe de tekst eruit kan zien. Of zet ze in een post hieronder.

Ik zal op het verkeerde spoor door te zoeken naar M plus 5 cijfers. Maar het kan dus ook letters bevatten.
 
example

Hi all,

Zie de bijlage, in kolom A en B de tekst waar de machine nummers in voorkomen en dit zou in dit voorbeeld dan in kolom C terecht moeten komen.

Alvast bedankt.

Mvg,

steven
 

Bijlagen

  • Example.xlsx
    12 KB · Weergaven: 37
zie bijlage
 

Bijlagen

  • Example (2).xlsb
    21,4 KB · Weergaven: 51
Laatst bewerkt:
Hier ook nog een formule-variant:
Code:
C2: =ALS.FOUT(DEEL(B2;MAX((DEEL(B2;RIJ($1:$1000);1)="m")*ISGETAL(--DEEL(B2;RIJ($2:$1001);4))*RIJ($1:$1000));5);NB())
Let op: mogelijk invoeren als matrixfunctie (met Control+Shift+Enter, afhankelijk van Excel-versie)
 

Bijlagen

  • Example (AC).xlsx
    13,5 KB · Weergaven: 46
Laatst bewerkt:
Als ook:

Code:
=DEEL(B2;ZOEKEN(255;VIND.SPEC("m"&{0;1;2;3;4;5;6;7;8;9};B2));5)

Of nog korter.
Code:
=DEEL(B2;ZOEKEN(255;VIND.SPEC("m"&RIJ($1:$10);B2));5)
 
Laatst bewerkt:
Dank AlexCEL.
 
De formule van HSV zoekt enkel naar een M met een cijfer achter en checkt verder niet daar nog eens 3 cijfers achter staan. (1e fout)
Dus er wordt gezocht naar het eerste voorkomen van 2 karakters (hoofdletterongevoelig) : m1, m2, m3,m4,m5,m6,m7,m8,m9,m10 (geen m0 !!!, 2e fout)
Komen er meerdere oplossingen naar voor, bv een m3 en een m8 (als er 2 m3's zijn doet toch enkel de 1e mee), dan is de keuze tussen beiden willekeurig.

Persoonlijk vind ik die zoeken-functie enorm krachtig en heb ze al vaker gebruikt, maar ze is niet te sturen als je meerdere opties als mogelijke oplossing hebt.
Als je de help er op naleest, dan vraagt ze dat de resultaten netjes gesorteerd staan om goed te werken, wat in de praktijk natuurlijk meestal niet het geval is.

Stoei even met teksten als "xxx xxx xxxxxxxx xxxxx m1xxxxx m23xxx xxxm345xxx xm0123456789xxx m1234xxxx" en andere gekke teksten.
Gebruik de functie formules>formules evalueren. Dan merk je op dat er gekozen zal worden posities 24, 32 en 42, dus "m1xxx", "m23xx" of "m345x". Waarom de keuze valt op de laatste is hier logisch, want de cijfertjes zijn toevallig wel netjes oplopend. Gooi straks die knipsels maar even door elkaar zodat die sortering niet netjes is.
De enige goeie keuzes "m0123" en "m1234" komen nooit in beeld.
 
Laatst bewerkt:
Werkt prima in het voorbeeld.
 
jij tevreden en TS tevreden, dan is het OK voor mij.

Ik zat anders in constructies als TEKST(RIJ($A$1:$A$10000)-1;"\M0000") te zoeken, maar dat is
1. niet mijn ding
2. zal snel tot performatieproblemen leiden.

=DEEL(B3;ZOEKEN(255;VIND.SPEC("m"&TEKST(RIJ($1:$10000)-1;"0000");B3));5)

Zie bijlage rij 2.
PS. mijn functie zoekt de eerste, Alexcel's matrixformule de laatste (vervang anders die max door min en ...), maakt niets uit als er maar 1 is.
 

Bijlagen

  • Example (2) (1).xlsb
    24,1 KB · Weergaven: 36
Laatst bewerkt:
Denk dat het ook lastig is om een functie te schrijven die het in 100% van de gevallen goed heeft, door de mogelijke variaties. Net als bij adressen of namen splitsen...

Alle hierboven oplossingen werken volgens mij voor tenminste 95%, misschien wel meer, dus ik hoop en denk dat TS hier verder wel mee uit de voeten kan.

Vond het wel een leuke puzzel, en daarvoor ben ik hier... op naar de volgende.
 
Ik kan het niet eerder testen dan vanavond, maar misschien een idee om de functie INDIRECT er tussen te zetten.
Indirect(rij(1:9999)).
 
Dit vergelijken met adressen opsplitsen, nou, dat is toch van een andere orde, als je met cijfers in de straatnaam of met busnummers etc begint.
Dit is in principe, daarmee vergeleken, kinderspel : opzoeken van een letter gevolgd door 4 cijfers.

Zolang er maar 1 goede combinatie is, is er geen probleem, jouw matrixformule en mijn function geven die terug.
Als er meerdere zijn (niet de vraag van TS), dan loopt het iets moeilijker bij jou, je reddingsboei is die MAX in de formule om de goeie van de slechte (=0) onderscheiden.
Zodoende geef je,makkelijkshalve, altijd de laatste.
So far, so good, we kunnen verschillen in mening over wenselijkheid van matrixformules, maar je levert tenminste een goed resultaat en dat voor de volle 100%.

Bij de oorspronkelijke HSV had ik 2 bedenkingen geformuleerd, waardoor het fout kon gaan, dus die mag je anders afvlaggen op 95%.
Ik zat anders ook in zijn denkrichting van "indirect" te zoeken, maar zag nog geen gaatje.
 
Laatst bewerkt:
Wat denk je hiervan?

Hele zware formule, maar het is het idee.
Niet geschikt voor de te doorzoeken getalgrootte.

Code:
=DEEL(B2;ZOEKEN(255;VIND.SPEC("m"&RIJ(INDIRECT("1:9999"))-1;B2));5)

Ik heb het al wat vaker gebruikt, maar dan voor weekdag en voor maar drie formules.
Plaats onderstaande in een cel, en met de muis ga je op INDIRECT staan, druk F9, dan zie je een matrix als resultaat.

Code:
=RIJ(INDIRECT("1:99"))

Mijn vorige formule met een paar nullen uitgebreid.
Code:
=DEEL(B2;ZOEKEN(255;VIND.SPEC("m"&RIJ($1:$10000)-1;B2));5)

Zoals het eerste getal met de nul in B3 werkt ook in jouw bestand @cow18.
Matrixformule.
Code:
=DEEL(B2;INDEX(ALS.FOUT(VIND.SPEC("m"&RIJ($1:$10000)-1;B2);"");VERGELIJKEN(WAAR;ISGETAL(ALS.FOUT(VIND.SPEC("m"&RIJ($1:$10000)-1;B2);""));0));5)

En nu ben ik er wel klaar mee. :D
 
Laatst bewerkt:
volgens mij blijf je in de fout gaan zolang je geen TEKST(RIJ($1:$10000)-1;"0000" of variant erin verwerkt.
Maar inderdaad, ik hou het ook voor bekeken.
TS heeft na #9 niet meer gereageerd, dus die is tevreden.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan