Beste Excellers,
Het volgende probleem komt zo vaak voor dat het me goed lijkt om samen een topic op te bouwen rond mogelijke alternatieven in verband met de "formule-soort"
=ALS(ISFOUT(formule);"";formule)Deze discussie is enkel nuttig wanneer het gaat over "veel" formules. Als je er "slechts" 500 hebt, is het niet zo belangrijk.
AANMOEDIGING:Zien sommige dingen er op het eerste zicht ingewikkeld uit, is het toch aangeraden wat moeite te doen - al is het een paar uurtjes - en niet te kiezen voor gemakkelijke oplossingen. Het gebruikscomfort van je project hangt er van af !!
PROBLEEMin E3:E7
=INDEX($B$3:$B$9;VERGELIJKEN(D3;$A$3:$A$9;0)) A B C D E
1 DATA WERKRUIMTE
2 CODE NAAM INVOER RESULTAAT
3 222 aaa 444 ggg
4 777 bbb 111 ccc
5 111 ccc 789 #N/B
6 333 ddd 555 eee
7 555 eee 1234 #N/B
8 666 fff
9 444 ggg
Blad1[Table-It] version 06 by Erik Van GeitRANGE FORMULA (1st cell)
E3:E7 =INDEX($B$3:$B$9,MATCH(D3,$A$3:$A$9,0))
[Table-It] version 06 by Erik Van Geit
Dikwijls is de reactie: "Ik wil die #N/B niet zien staan: dat oogt niet mooi." Over "mooi" kunnen we eindeloos van mening wisselen. Voor Excel en jouw computer is echter de rekensnelheid van belang.
In dit voorbeeld wordt #N/B behandeld, maar hetzelfde is waar voor alle mogelijk foutmeldingen in cellen zoals #WAARDE en #DEEL/0.OPLOSSING 1De beste oplossing is eigenlijk:
Laat het gewoon staan !!! Wat is er eigenlijk mis mee om #N/B in een cel te zien staan? Zo zie je tenminste duidelijk dat er wat aan de hand is, namelijk
Niet
Bepaald!
Veel voorkomend argument is dat formules die naar deze cellen verwijzen, ook fouten geven. Maar dat kan opgelost worden: dit is 1 van de redenen voor deze topic. Hoe lossen we dat dan op? Daar kunnen we het later over hebben.
Goed, je hebt hiervan kennis genomen, maar ...
Je wil toch persé een lege cel of een andere tekst laten verschijnen in plaats van #N/B. Zie dan oplossing 2 - een paar mogelijkheden.
INTERMEZZO: doe het liefst NIET zoVaak wordt het volgende als oplossing genomen.
(de hoofdreden van deze topic)
=ALS(ISNB(INDEX($B$3:$B$9;VERGELIJKEN(D3;$A$3:$A$9;0)));"";INDEX($B$3:$B$9;VERGELIJKEN(D3;$A$3:$A$9;0)))Pas functie aan de omstandigheden aan: ISFOUT (zoekt naar allerlei fouten), is ruim trager dan ISNB (zoekt enkel naar "is niet bepaald")Excel heeft nu echter dubbel zoveel werk te verrichten. Voorbeeld ter vergelijking:
Men vraagt je om het aantal kasten waar boeken in liggen op een fiche in te vullen. Voorwaarde: als er een kast op slot is hoef je niets in te vullen. Hier volgt de werkwijze zoals jij het aan Excel vraagt via deze lange formule. Doe alle deuren open om te zien of ze allemaal open kunnen en doe dan alle deuren opnieuw open om te tellen waar er boeken liggen.Liefst anders oplossen dus.
OPLOSSING 2A1. Voeg eventueel een kolom in na E.
(als er al data in F staan)2. Verberg kolom E.
3. formule in kolom F
=ALS(ISNB(E3);"";E3)of met tekst
=ALS(ISNB(E3);"FOUT !";E3)Nu wordt die "zware formule" slechts 1 keer berekend.
OPLOSSING 2BEen UDF (User Defined Function) = een door de gebruiker gedefinieerde functie.
Function myMatch(c As Range, MatchRng As Range, LookupRng As Range) As String
Dim temp As String
On Error Resume Next
temp = LookupRng(Application.WorksheetFunction.Match(c, MatchRng, 0))
myMatch = IIf(temp = vbNullString, "ERROR", temp)
End Function
Formule op je blad:
=myMatch(D3;$A$3:$A$9;$B$3:$B$9)Excell-groet,
Erik