19/11/2021

Laatste ingevulde waarde (tekst) in Calc

Filed under: — cybrarian @ 12:08 pm

Ik heb een hele rij met versienummers van software in een LibreOffice Calc rekenblad gezet:
(ik heb de cellen geformatteerd als tekst, om de versienummers niet als getallen met decimaal punt te laten interpreteren)

programma1 | 0.0.3 | 0.0.4
programma2 |
programma3 | 0.1.2 | 0.1.3 | 0.1.4 | 0.1.5

De kolommen hebben bovenaan een weeknummer in dit geval, maar kunnen maanden, dagen zijn, of eender wat.
Ik heb iets meer dan 52 kolommen, invullen begint aan kolom E en loopt tot kolom BM.

Nu wil ik in een kolom vooraan de hoogste versie weergeven. Voor de eerste rij is dat 0.0.4, tweede niets, derde 0.1.5.

Calc moet dus in de rij zoeken naar de laatste ingevulde waarde, en die weergeven (bv rij 4 voor “programma1”).

Het was een beetje zoeken, maar dat kan het eenvoudigst (lijkt me) met LOOKUP:

=LOOKUP(2;1/(E4:BM4<>"");E4:BM4)

De middelste range E4:BM4 is de rij waarin gezocht wordt.
Achteraan staat de range E4:BM4, dat is de range waaruit hij een waarde terug gaat geven.
(je kan ook een waarde uit een range ernaast laten teruggeven, bv als je een klantnaam opzoekt en dan de bijhorende klantnummer uit aanpalende rij/kolom wil gebruiken).

Het eerste stuk blijkt een truukje te zijn om Calc te laten zoeken naar niet-lege waarden in de rij.

Niet lege waarde voor een reeks E4:BM4<>"" geeft een reeks met antwoorden: TRUE, TRUE, FALSE, FALSE, …

Een range met booleaanse waarden wordt ook geïnterpreteerd als nullen en énen: 1, 1, 0, 0 …

In deze reeks kan je zoeken naar een nul, een één, of een twee (wat niet voorkomt).

De eigenschap van LOOKUP is :
– dat die zoekt tot hij een gezochte waarde vindt
– fouten overslaat.
– als hij iets niet vindt, de laatste dichtstbijwaarde geeft.

Door de range van waarden 0,1,1 als noemer te zetten tov teller 1/ krijgen we een reeks waarbij 1/0 telkens een fout geeft en 1/1 een 1:

1, 1, ERROR, ERROR, …

Hierin zoeken naar een 2 (die niet voorkomt) brengt de zoek tot het einde van de reeks, die bevat een ERROR, vorige ook, vorige ook .. tot hij bij de laatste niet-error waarde komt die het “dichtst bij een twee” is, en dat is de kolom van de laaatste waarde uit de reeks die wij willen (hier kolom F).
We krijgen dus de waarde terug die in Kolom F staat, en dat is de laatste ingevulde waarde “0.0.4” in ons voorbeeld.

De formule =LOOKUP(2;1/(E4:BM4<>"");E4:BM4) ingevuld in de kolom vooraan, en gekopieerd naar beneden geeft het resultaat (vet):

0.0.4 | programma1 | 0.0.3 | 0.0.4
#N/A | programma2 |
0.1.5 | programma3| 0.1.2 | 0.1.3 | 0.1.4 | 0.1.5

Reacties zijn gesloten.

Powered by WordPress