Discussion:
VERT.ZOEKEN omgekeerde richting
(te oud om op te antwoorden)
Koemi
2009-01-26 13:11:01 UTC
Permalink
Heren,

onderstaande functie in een werkblad:
-------------------
=RECHTS(ALS(ISNB(VERT.ZOEKEN("*robotcore started*";Invoerblad!A:A;1;ONWAAR))
= WAAR; "Onbekend"; VERT.ZOEKEN("*robotcore
started*";Invoerblad!A:A;1;ONWAAR));11)
----------------------

Deze zoekt naar een bepaalde uitdrukking ('robotcore started') in de kolom
A:A op het werkblad "Invoerblad". Ik heb nu alleen het euvel dat excel nu
zoekt van top tot teen, maar dat zou hij eigenlijk andersom moeten doen...

Maar hoe? Wie kan mij hiermee helpen?
john philippen
2009-01-26 13:28:15 UTC
Permalink
volgens mij is de meest voor de handliggende oplossing om de lijst te
sorteren van teen tot top.

m.v.g.
john
--
Vragen is nooit dom.
Met een vraag blijven lopen wel.
Want dat lost nooit iets op.
Post by Koemi
Heren,
-------------------
=RECHTS(ALS(ISNB(VERT.ZOEKEN("*robotcore started*";Invoerblad!A:A;1;ONWAAR))
= WAAR; "Onbekend"; VERT.ZOEKEN("*robotcore
started*";Invoerblad!A:A;1;ONWAAR));11)
----------------------
Deze zoekt naar een bepaalde uitdrukking ('robotcore started') in de kolom
A:A op het werkblad "Invoerblad". Ik heb nu alleen het euvel dat excel nu
zoekt van top tot teen, maar dat zou hij eigenlijk andersom moeten doen...
Maar hoe? Wie kan mij hiermee helpen?
Koemi
2009-01-26 13:35:32 UTC
Permalink
Dat is idd het meest simpel, maar geen oplossing, omdat het gevraagde maar
een heel klein onderdeel is van een heel wat groter geheel aan macro's en
dergelijke (had ik er misschien even bij moeten zetten...)
Post by john philippen
volgens mij is de meest voor de handliggende oplossing om de lijst te
sorteren van teen tot top.
m.v.g.
john
--
Vragen is nooit dom.
Met een vraag blijven lopen wel.
Want dat lost nooit iets op.
Post by Koemi
Heren,
-------------------
=RECHTS(ALS(ISNB(VERT.ZOEKEN("*robotcore started*";Invoerblad!A:A;1;ONWAAR))
= WAAR; "Onbekend"; VERT.ZOEKEN("*robotcore
started*";Invoerblad!A:A;1;ONWAAR));11)
----------------------
Deze zoekt naar een bepaalde uitdrukking ('robotcore started') in de kolom
A:A op het werkblad "Invoerblad". Ik heb nu alleen het euvel dat excel nu
zoekt van top tot teen, maar dat zou hij eigenlijk andersom moeten doen...
Maar hoe? Wie kan mij hiermee helpen?
Niek Otten
2009-01-26 13:50:06 UTC
Permalink
Met de VERGELIJKEN() functie kun je ook van hoog naar laag gesorteerde
lijsten doorzoeken (laatste argument -1). Daarna kun je met INDEX() het
juiste element uit de andere kolom oppikken.
Wel even zelf checken of de betreffende sleutel wel aanwezig is.
--
Kind regards,

Niek Otten
Microsoft MVP - Excel
Post by Koemi
Dat is idd het meest simpel, maar geen oplossing, omdat het gevraagde maar
een heel klein onderdeel is van een heel wat groter geheel aan macro's en
dergelijke (had ik er misschien even bij moeten zetten...)
Post by john philippen
volgens mij is de meest voor de handliggende oplossing om de lijst te
sorteren van teen tot top.
m.v.g.
john
--
Vragen is nooit dom.
Met een vraag blijven lopen wel.
Want dat lost nooit iets op.
Post by Koemi
Heren,
-------------------
=RECHTS(ALS(ISNB(VERT.ZOEKEN("*robotcore
started*";Invoerblad!A:A;1;ONWAAR))
= WAAR; "Onbekend"; VERT.ZOEKEN("*robotcore
started*";Invoerblad!A:A;1;ONWAAR));11)
----------------------
Deze zoekt naar een bepaalde uitdrukking ('robotcore started') in de kolom
A:A op het werkblad "Invoerblad". Ik heb nu alleen het euvel dat excel nu
zoekt van top tot teen, maar dat zou hij eigenlijk andersom moeten doen...
Maar hoe? Wie kan mij hiermee helpen?
Koemi
2009-01-26 15:06:01 UTC
Permalink
Post by Niek Otten
Met de VERGELIJKEN() functie kun je ook van hoog naar laag gesorteerde
lijsten doorzoeken (laatste argument -1). Daarna kun je met INDEX() het
juiste element uit de andere kolom oppikken.
Wel even zelf checken of de betreffende sleutel wel aanwezig is.
--
Kind regards,
Niek Otten
Microsoft MVP - Excel
Met VERGELIJKEN en daarna INDEX. Hmmm... En een andere kolom?
Ik geloof dat ik iets beter moet uitleggen, want zo kan ik het niet
oplossen, helaas:

Zie onderstaande functie:

-----------------------
=RECHTS(ALS(ISNB(VERT.ZOEKEN("*robotcore started*";Invoerblad!A:A;1;ONWAAR))
= WAAR; "Onbekend"; VERT.ZOEKEN("*robotcore
started*";Invoerblad!A:A;1;ONWAAR));11)
---------------------

De data waarin gezocht wordt staat in kolom A:A van het werkblad 'Invoerblad'.
De (vele) regels zien er oa zo uit:
-----------------
[09/09/08 08:46:05] Message: *** robotcore started (V3.10) ***
--------------------

Deze data komt uit een log van een robot. Soms is er sprake van een
softwareupdate dan kan het voorkomen dat bijvoorbeeld de volgende regel er
ook tussen staat:
-----------------
[01/01/09 08:00:05] Message: *** robotcore started (V3.20) ***
--------------------

Deze regel staat dus verder naar onderen dan de vorige.

Ik wil nu dus graag mbv VERT.ZOEKEN die laatste melding naar voren krijgen,
want dat is immers het meest recente versienummer. Helaas wordt momenteel de
bovenste gemeld. Vandaar mijn vraag: kan VERT.ZOEKEN ook in omgekeerde
richting?

Ik vraag dit omdat ik verder niets met de data kan doen (dus niet de zaak
even omgekeerd sorteren oid). Dit dus ivm met het veel grotere geheel.

Misschien ben ik zo duidelijker?

Nog een kleine vraag erbij:

Momenteel wordt de data als volgt genoteerd:
------------------
(V3.20) ***
--------------------

Ik heb het uiteraard liever zo:
------------------
V3.20
--------------------

Dit moet volgens mij ook mogelijk zijn, maar omdat de functie voor mij al
redelijk complex aan het worden is, weet ik niet hoe dit op te lossen...
jan
2009-01-26 15:21:41 UTC
Permalink
Koemi,

Met verticaal zoeken zal dat niet lukken.
Met onderstaande matrixformule lukt denk ik wel wat je wilt:

=RECHTS(VERSCHUIVING(A1;MAX((LENGTE(SUBSTITUEREN(A1:A10000;"robotcore
started";""))<LENGTE(A1:A10000))*RIJ(A1:A10000))-1;0);11)

Deze dus invoeren als matrixformule met Ctrl+Shift+Enter.

Als de tekst voor robotcore... altijd dezelfde lengte (32?) heeft kan het ook met
deze matrixformule:

=Rechts(VERSCHUIVING(A1;(MAX((DEEL(A1:A10000;32;17)="robotcore
started")*RIJ(A1:A10000)))-1;0);11)

Jan
jan
2009-01-26 15:27:39 UTC
Permalink
Koemi,

En dan je vervolgvraag:

=LINKS(RECHTS(VERSCHUIVING(A1;MAX((LENGTE(SUBSTITUEREN(A1:A10000;"robotcore
started";""))<LENGTE(A1:A10000))*RIJ(A1:A10000))-1;0);10);5)

weer met Ctrl+Shift+Enter.

Daarbij is aangenomen dat het resultaat altijd uit 5 tekens zal bestaan.

Bovendien is in de formule aangenomen dat niet meer dan 10000 rijen in gebruik zijn.
Is dit veel minder of veel meer, dan kun je de waardes 10000 in de formule
aanpassen.

Jan
Koemi
2009-01-27 07:42:01 UTC
Permalink
Jan,

na enig gepuzzel heb ik deze functie werkend gekregen, helaas beïnvloedt
deze matrixformule de macro die ik absoluut nodig heb. Ik krijg geen
foutmeldingen, maar hij blijft ergens hangen want het duurt nu te lang.

Als dit de enige oplossing is, dan zal ik wat anders moeten bedenken...
Post by jan
Koemi,
=LINKS(RECHTS(VERSCHUIVING(A1;MAX((LENGTE(SUBSTITUEREN(A1:A10000;"robotcore
started";""))<LENGTE(A1:A10000))*RIJ(A1:A10000))-1;0);10);5)
weer met Ctrl+Shift+Enter.
Daarbij is aangenomen dat het resultaat altijd uit 5 tekens zal bestaan.
Bovendien is in de formule aangenomen dat niet meer dan 10000 rijen in gebruik zijn.
Is dit veel minder of veel meer, dan kun je de waardes 10000 in de formule
aanpassen.
Jan
jan
2009-01-27 09:17:00 UTC
Permalink
Koemi,

Om hoeveel rijen gaat het maximaal?
Als dat de 10000 lang niet haalt kun je de de formule sneller laten lopen door
minder rijen te te laten doorzoeken.
Is het misschien zo dat gedurende je macro meeredere keren opnieuw het hele blad
wordt berekend, dat kan de zaak ook vertragen (inderdaad is mijn formule niet wat
traag). Je zou het herberekenen aan het begin van de macro uit kunnen zetten en aan
het eind van de macro weer terug kunnen zetten op de standaardwaarde.

Een andere methode als je niet persé de formule in je werkblad hoeft te hebben:

Vanuit je macro zou je ook met Find iets kunnen regelen. Met Find kun je de laatste
waarde in de kolom vinden die voldoet aan je criteria. Dat moet denk ik de snelste
methode zijn.

Jan
jan
2009-01-27 09:25:34 UTC
Permalink
Wat er had moeten staan: mijn formule is wel wat traag
Niek Otten
2009-01-27 16:17:23 UTC
Permalink
Misschien moet je uitleggen wat de situatie is en je probeert te bereiken,
in plaats van dat we ons meteen op de formules storten
--
Kind regards,

Niek Otten
Microsoft MVP - Excel
Post by Koemi
Jan,
na enig gepuzzel heb ik deze functie werkend gekregen, helaas beïnvloedt
deze matrixformule de macro die ik absoluut nodig heb. Ik krijg geen
foutmeldingen, maar hij blijft ergens hangen want het duurt nu te lang.
Als dit de enige oplossing is, dan zal ik wat anders moeten bedenken...
Post by jan
Koemi,
=LINKS(RECHTS(VERSCHUIVING(A1;MAX((LENGTE(SUBSTITUEREN(A1:A10000;"robotcore
started";""))<LENGTE(A1:A10000))*RIJ(A1:A10000))-1;0);10);5)
weer met Ctrl+Shift+Enter.
Daarbij is aangenomen dat het resultaat altijd uit 5 tekens zal bestaan.
Bovendien is in de formule aangenomen dat niet meer dan 10000 rijen in gebruik zijn.
Is dit veel minder of veel meer, dan kun je de waardes 10000 in de formule
aanpassen.
Jan
Niek Otten
2009-01-27 08:59:49 UTC
Permalink
Een niet geteste poging. Bedenk wel dat je door A:A te gebruiken niet
(bijvoorbeeld) A1:A200, de hele kolom doorzoekt. Dus potentieel 65000 rijen
of, in het geval van Ecel 2007, een miljoen.
Dezez zoekt ook van top tot teen, maar gaat er van uit dat A aflopend
gesorteerd is.

=RECHTS(ALS(VERGELIJKEN("*robotcore
started*";Invoerblad!A:A;-1)<>"*robotcore
started*";"Onbekend";INDEX(Invoerblad!A:A;VERGELIJKEN("*robotscore
started*";Invoerblad!A:A;-1)));11)
--
Kind regards,

Niek Otten
Microsoft MVP - Excel
Post by Koemi
Heren,
-------------------
=RECHTS(ALS(ISNB(VERT.ZOEKEN("*robotcore
started*";Invoerblad!A:A;1;ONWAAR))
= WAAR; "Onbekend"; VERT.ZOEKEN("*robotcore
started*";Invoerblad!A:A;1;ONWAAR));11)
----------------------
Deze zoekt naar een bepaalde uitdrukking ('robotcore started') in de kolom
A:A op het werkblad "Invoerblad". Ik heb nu alleen het euvel dat excel nu
zoekt van top tot teen, maar dat zou hij eigenlijk andersom moeten doen...
Maar hoe? Wie kan mij hiermee helpen?
Koemi
2009-01-28 15:06:01 UTC
Permalink
Niek,

ik krijg geen foutmeldingen, maar helaas blijft de uitkomst 'Onbekend'...

Ook als er wel degelijk iets gevonden moet worden is de uitkomst 'Onbekend'.

Ik heb er nog wat mee zitten prutsen, maar ik krijg het niet goed, helaas...
Post by Niek Otten
Een niet geteste poging. Bedenk wel dat je door A:A te gebruiken niet
(bijvoorbeeld) A1:A200, de hele kolom doorzoekt. Dus potentieel 65000 rijen
of, in het geval van Ecel 2007, een miljoen.
Dezez zoekt ook van top tot teen, maar gaat er van uit dat A aflopend
gesorteerd is.
=RECHTS(ALS(VERGELIJKEN("*robotcore
started*";Invoerblad!A:A;-1)<>"*robotcore
started*";"Onbekend";INDEX(Invoerblad!A:A;VERGELIJKEN("*robotscore
started*";Invoerblad!A:A;-1)));11)
--
Kind regards,
Niek Otten
Microsoft MVP - Excel
Niek Otten
2009-01-28 15:22:51 UTC
Permalink
Hoe ziet je data er nou precies uit, hoeveel rijen zijn gevuld, wat voor
soort gegevens en hoe gesorteerd? En waarmee zoek je dan?
--
Kind regards,

Niek Otten
Microsoft MVP - Excel
Post by Koemi
Niek,
ik krijg geen foutmeldingen, maar helaas blijft de uitkomst 'Onbekend'...
Ook als er wel degelijk iets gevonden moet worden is de uitkomst 'Onbekend'.
Ik heb er nog wat mee zitten prutsen, maar ik krijg het niet goed, helaas...
Post by Niek Otten
Een niet geteste poging. Bedenk wel dat je door A:A te gebruiken niet
(bijvoorbeeld) A1:A200, de hele kolom doorzoekt. Dus potentieel 65000 rijen
of, in het geval van Ecel 2007, een miljoen.
Dezez zoekt ook van top tot teen, maar gaat er van uit dat A aflopend
gesorteerd is.
=RECHTS(ALS(VERGELIJKEN("*robotcore
started*";Invoerblad!A:A;-1)<>"*robotcore
started*";"Onbekend";INDEX(Invoerblad!A:A;VERGELIJKEN("*robotscore
started*";Invoerblad!A:A;-1)));11)
--
Kind regards,
Niek Otten
Microsoft MVP - Excel
Koemi
2009-01-28 15:51:02 UTC
Permalink
Niek,

zomaar een stukje logfile:
--------------------
Sun Sep 28 15:02:48 CEST 2008
[24/12/08 12:59:32] Message: Time config reloaded: 26 item(s)
[24/12/08 12:59:32] Message: *** robotcore started (V3.10) ***
[24/12/08 12:59:36] Message: Switching manual to Maintenance
[24/12/08 12:59:37] Message: Module remoteControl startup
[01/01/09 19:54:04] Message: Time config reloaded: 1 item(s)
[01/01/09 19:54:05] Message: *** robotcore started (V3.20) ***
[01/01/09 19:54:08] Message: Module remoteControl startup
[01/01/09 19:54:20] Message: GPRS Modem switched on
------------------------

Bovenstaande staat (een heel erg klein stukje) van het werkblad 'Invoerblad'
in kolom A:A.

Nu wil ik dus dat er gezocht word naar DE LAATSTE 'robotcore started' in
deze kolom A:A.

De uitkomst hiervan moet komen in cel G1 op het werkblad 'Test uitslag'.

Alleen wil ik niet de gehele tekst daar hebben. Ik wil alleen zien: 'V3.20'.

Staat er toevallig eens een keertje geen 'robotcore started', dan moet er
staan 'Onbekend'.

Meer is het niet.
Post by Niek Otten
Hoe ziet je data er nou precies uit, hoeveel rijen zijn gevuld, wat voor
soort gegevens en hoe gesorteerd? En waarmee zoek je dan?
--
Kind regards,
Niek Otten
Microsoft MVP - Excel
Post by Koemi
Niek,
ik krijg geen foutmeldingen, maar helaas blijft de uitkomst 'Onbekend'...
Ook als er wel degelijk iets gevonden moet worden is de uitkomst 'Onbekend'.
Ik heb er nog wat mee zitten prutsen, maar ik krijg het niet goed, helaas...
Post by Niek Otten
Een niet geteste poging. Bedenk wel dat je door A:A te gebruiken niet
(bijvoorbeeld) A1:A200, de hele kolom doorzoekt. Dus potentieel 65000 rijen
of, in het geval van Ecel 2007, een miljoen.
Dezez zoekt ook van top tot teen, maar gaat er van uit dat A aflopend
gesorteerd is.
=RECHTS(ALS(VERGELIJKEN("*robotcore
started*";Invoerblad!A:A;-1)<>"*robotcore
started*";"Onbekend";INDEX(Invoerblad!A:A;VERGELIJKEN("*robotscore
started*";Invoerblad!A:A;-1)));11)
--
Kind regards,
Niek Otten
Microsoft MVP - Excel
Koemi
2009-01-30 08:14:00 UTC
Permalink
Ben er nog mee bezig en heb het nog niet op kunnen lossen...

Niemand die een antwoord heeft?
Post by Koemi
Niek,
--------------------
Sun Sep 28 15:02:48 CEST 2008
[24/12/08 12:59:32] Message: Time config reloaded: 26 item(s)
[24/12/08 12:59:32] Message: *** robotcore started (V3.10) ***
[24/12/08 12:59:36] Message: Switching manual to Maintenance
[24/12/08 12:59:37] Message: Module remoteControl startup
[01/01/09 19:54:04] Message: Time config reloaded: 1 item(s)
[01/01/09 19:54:05] Message: *** robotcore started (V3.20) ***
[01/01/09 19:54:08] Message: Module remoteControl startup
[01/01/09 19:54:20] Message: GPRS Modem switched on
------------------------
Bovenstaande staat (een heel erg klein stukje) van het werkblad 'Invoerblad'
in kolom A:A.
Nu wil ik dus dat er gezocht word naar DE LAATSTE 'robotcore started' in
deze kolom A:A.
De uitkomst hiervan moet komen in cel G1 op het werkblad 'Test uitslag'.
Alleen wil ik niet de gehele tekst daar hebben. Ik wil alleen zien: 'V3.20'.
Staat er toevallig eens een keertje geen 'robotcore started', dan moet er
staan 'Onbekend'.
Meer is het niet.
Post by Niek Otten
Hoe ziet je data er nou precies uit, hoeveel rijen zijn gevuld, wat voor
soort gegevens en hoe gesorteerd? En waarmee zoek je dan?
--
Kind regards,
Niek Otten
Microsoft MVP - Excel
Post by Koemi
Niek,
ik krijg geen foutmeldingen, maar helaas blijft de uitkomst 'Onbekend'...
Ook als er wel degelijk iets gevonden moet worden is de uitkomst 'Onbekend'.
Ik heb er nog wat mee zitten prutsen, maar ik krijg het niet goed, helaas...
Post by Niek Otten
Een niet geteste poging. Bedenk wel dat je door A:A te gebruiken niet
(bijvoorbeeld) A1:A200, de hele kolom doorzoekt. Dus potentieel 65000 rijen
of, in het geval van Ecel 2007, een miljoen.
Dezez zoekt ook van top tot teen, maar gaat er van uit dat A aflopend
gesorteerd is.
=RECHTS(ALS(VERGELIJKEN("*robotcore
started*";Invoerblad!A:A;-1)<>"*robotcore
started*";"Onbekend";INDEX(Invoerblad!A:A;VERGELIJKEN("*robotscore
started*";Invoerblad!A:A;-1)));11)
--
Kind regards,
Niek Otten
Microsoft MVP - Excel
jan
2009-01-30 09:46:22 UTC
Permalink
Koemie,

Ik heb je nog een voorstel gedaan dat nog verder uitgewerkt zou kunnen worden.. Dat
heb je wellicht niet gezien, of wil je daar niets mee?

Jan
Koemi
2009-01-30 14:31:28 UTC
Permalink
Jan,

even teruggezocht in de lijst

-------------------------
{=RECHTS(ALS(VERGELIJKEN("*robotcore
started*";Invoerblad!A:A;-1)<>"*robotcore
started*";"Onbekend";INDEX(Invoerblad!A:A;VERGELIJKEN("*robotscore
started*";Invoerblad!A:A;-1)));11)}
---------------------------

Levert alleen op: "Onbekend".

---------------------------
{=RECHTS(VERSCHUIVING(Invoerblad!A1;(MAX((DEEL(Invoerblad!A1:A10000;32;17)="robotcore started")*RIJ(Invoerblad!A1:A10000)))-1;0);11)}
------------------------------
Levert op: #VERW! (staat 'Invoerblad!' op de juiste plaats?). Hier kom ik
niet uit.

----------------------
{=LINKS(RECHTS(VERSCHUIVING(A1;MAX((LENGTE(SUBSTITUEREN(Invoerblad!A1:A10000;"robotcore
started";""))<LENGTE(Invoerblad!A1:A10000))*RIJ(Invoerblad!A1:A10000))-1;0);10);5)}
-------------------------

Zelfde resultaat: #VERW!

En dan ga je andere dingen proberen, waar je ook niet mee verder komt.

Frusti!
Post by jan
Koemie,
Ik heb je nog een voorstel gedaan dat nog verder uitgewerkt zou kunnen worden.. Dat
heb je wellicht niet gezien, of wil je daar niets mee?
Jan
Koemi
2009-01-30 14:32:23 UTC
Permalink
Jan,

klein foutje bij de vorige opmerking:
----------------------------
{=LINKS(RECHTS(VERSCHUIVING(A1;MAX((LENGTE(SUBSTITUEREN(Invoerblad!A1:A10000;"robotcore
started";""))<LENGTE(Invoerblad!A1:A10000))*RIJ(Invoerblad!A1:A10000))-1;0);10);5)}
----------------------------

Levert een lege cel op... Dus geen #VERW!
Post by jan
Koemie,
Ik heb je nog een voorstel gedaan dat nog verder uitgewerkt zou kunnen worden.. Dat
heb je wellicht niet gezien, of wil je daar niets mee?
Jan
jan
2009-01-30 15:58:28 UTC
Permalink
Koemi,

Even afgezien van het resultaat van de formules (blijkbaar staat er meer in de cel
dan ik op grond van je eerdere berichten meende te mogen concluseren), je hebt
aangegeven dat de formule werkte alleen in combinatie met je macro wat aan de trage
kant.
Op grond daarvan heb ik twee suggesties gedaan die ik hieronder nog eens plak:

Om hoeveel rijen gaat het maximaal?
Als dat de 10000 lang niet haalt kun je de de formule sneller laten lopen door
minder rijen te te laten doorzoeken.
Is het misschien zo dat gedurende je macro meeredere keren opnieuw het hele blad
wordt berekend, dat kan de zaak ook vertragen (inderdaad is mijn formule WEL wat
traag; hoewel dat bij nader inzien m.i. wel meevalt...?). Je zou het herberekenen
aan het begin van de macro uit kunnen zetten en aan
het eind van de macro weer terug kunnen zetten op de standaardwaarde.

Een andere methode als je niet persé de formule in je werkblad hoeft te hebben:

Vanuit je macro zou je ook met Find iets kunnen regelen. Met Find kun je de laatste
waarde in de kolom vinden die voldoet aan je criteria. Dat moet denk ik de snelste
methode zijn.

Mocht je alsnog de eerder geboemde formules willen gebruiken (ze werken echt), dan
is het belangrijk om te weten of er na (V3.20) nog meer tekst in de betreffende cel
staat.

Jan
Koemi
2009-02-03 08:34:01 UTC
Permalink
Jan,

over de snelheid: daar zou ik mij minder druk over maken. Er zijn meer
tijdgebruikers in de macro aanwezig die een grotere invloed hebben dan deze
functie.

Ik vat het nog even samen:

Dit soort data wordt gezocht: [09/09/08 08:46:05] Message: *** robotcore
started (V3.10) *** --> ziet er altijd zo uit, alleen de tijd en datum kan
anders zijn. Aantal tekens blijft hetzelfde.

Er moet gezocht worden naar de laatste uitdrukking in de kolom A:A van wb
'Invoerblad' (zoeken naar '*robotcore started*'.
Gevonden waarde omzetten naar 'V3.10'.
Deze waarde weergeven in wb 'Test uitslag' cel C9.

Het aantal rijen zit rond de 10.000 maximaal.

Zoals de functie nu is:
----------------------------------
=RECHTS(ALS(VERGELIJKEN("*robotcore
started*";Invoerblad!A:A;-1)<>"*robotcore
started*";"Onbekend";INDEX(Invoerblad!A:A;VERGELIJKEN("*robotscore
started*";Invoerblad!A:A;-1)));11)
----------------------------------
Deze functie geeft alleen 'Onbekend' op, terwijl dat niet mogelijk is. Deze
functie is voor mij ook te complex om precies te begrijpen. Ik heb zelf de
uitdrukkingen 'Invoerblad!' toegevoegd, maar ik weet niet eens of ze wel op
de goede plek staan... Dus wellicht klopt de functie niet op deze manier.

De FIND methode als macro vind ik een prima idee, maar... hoe ziet dat er
dan weer uit?
Post by jan
Koemi,
Even afgezien van het resultaat van de formules (blijkbaar staat er meer in de cel
dan ik op grond van je eerdere berichten meende te mogen concluseren), je hebt
aangegeven dat de formule werkte alleen in combinatie met je macro wat aan de trage
kant.
Om hoeveel rijen gaat het maximaal?
Als dat de 10000 lang niet haalt kun je de de formule sneller laten lopen door
minder rijen te te laten doorzoeken.
Is het misschien zo dat gedurende je macro meeredere keren opnieuw het hele blad
wordt berekend, dat kan de zaak ook vertragen (inderdaad is mijn formule WEL wat
traag; hoewel dat bij nader inzien m.i. wel meevalt...?). Je zou het herberekenen
aan het begin van de macro uit kunnen zetten en aan
het eind van de macro weer terug kunnen zetten op de standaardwaarde.
Vanuit je macro zou je ook met Find iets kunnen regelen. Met Find kun je de laatste
waarde in de kolom vinden die voldoet aan je criteria. Dat moet denk ik de snelste
methode zijn.
Mocht je alsnog de eerder geboemde formules willen gebruiken (ze werken echt), dan
is het belangrijk om te weten of er na (V3.20) nog meer tekst in de betreffende cel
staat.
Jan
jan
2009-02-03 10:11:21 UTC
Permalink
Koemi,

=LINKS(RECHTS(VERSCHUIVING(Invoerblad!A1;MAX((LENGTE(SUBSTITUEREN(Invoerblad!A1:A12000;"robotcore
started";""))<LENGTE(Invoerblad!A1:A12000))*RIJ(Invoerblad!A1:A12000))-1;0);10);5)

Deze functie invoeren in C9 op werkblad Test Uitslag (of waar dan ook) en behandelen
als Matrixformule (na invoer in de formulebalk bevestigen met Ctrl+Shift+Enter) moet
de laatst gevonden waarde ophoesten zoals jij dat wilt.

Je had eerder deze formule zelf al voorzien van Invoerblad. Op slechts 1 plek was je
vergeten Invoerblad te plaatsen (voor de eerste A1).

Als dit verder voldoet, dan is de find-methode niet meer nodig denk ik.

Jan
jan
2009-02-03 14:42:51 UTC
Permalink
Koemi,

Kom je er een beetje uit, of wil die formule weer niet?

Hier dan met zoeken en plaatsen van de gevonden waarde m.b.v. VBA:

Sub TekstVinden_Plaatsen()
Dim rng As Range
Dim strF As String
strF = "robotcore started"
With Worksheets("Invoerblad")
Set rng = .Range("A:A").Find(strF, .Range("A1"), , , , xlPrevious)
End With
If Not rng Is Nothing Then
strF = Mid(rng, InStr(1, rng, strF, vbTextCompare) + 19, 5)
Worksheets("Test uitslag").Range("C9") = strF
End If
End Sub

Jan
Koemi
2009-02-09 10:31:01 UTC
Permalink
Jan,

excuses voor de late reactie; het griepvirus heeft een geduchte en helaas
geslaagde aanval geplaatst.

Met de functie wilde in eerste instantie functioneren. Helaas liep toen
excel vast en kon ik de aanpassingen niet meer voor elkaar krijgen. Ineens
kreeg ik een #VERW! foutmelding.

Toen heb ik de macro toegevoegd en het was meteen klaar!

Bedankt voor je meer dan uitgebreide hulp!
Post by jan
Koemi,
Kom je er een beetje uit, of wil die formule weer niet?
Sub TekstVinden_Plaatsen()
Dim rng As Range
Dim strF As String
strF = "robotcore started"
With Worksheets("Invoerblad")
Set rng = .Range("A:A").Find(strF, .Range("A1"), , , , xlPrevious)
End With
If Not rng Is Nothing Then
strF = Mid(rng, InStr(1, rng, strF, vbTextCompare) + 19, 5)
Worksheets("Test uitslag").Range("C9") = strF
End If
End Sub
Jan
Koemi
2009-02-09 10:33:01 UTC
Permalink
Jan,

het griepvirus woekert hier rond en had mij gevonden, zodoende dat ik een
poosje niet reageerde op je bericht. Excuses daarvoor.

Ik houd het kort: de macro functioneert zoals het hoort! De laatse waarde
wordt nu keurig gevonden. Enorm bedankt voor de toch wel uitgebreide hulp!
Post by jan
Koemi,
Kom je er een beetje uit, of wil die formule weer niet?
Sub TekstVinden_Plaatsen()
Dim rng As Range
Dim strF As String
strF = "robotcore started"
With Worksheets("Invoerblad")
Set rng = .Range("A:A").Find(strF, .Range("A1"), , , , xlPrevious)
End With
If Not rng Is Nothing Then
strF = Mid(rng, InStr(1, rng, strF, vbTextCompare) + 19, 5)
Worksheets("Test uitslag").Range("C9") = strF
End If
End Sub
Jan
Loading...