Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: INFO: vermijd =ALS(ISFOUT(formule);"";formule)  (gelezen 29751 keer)

0 leden en 1 gast bekijken dit topic.

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
INFO: vermijd =ALS(ISFOUT(formule);"";formule)
« Gepost op: 19 april 2007, 13:07:37 »
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 !!


PROBLEEM
in 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 Geit
RANGE 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 1
De 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 zo
Vaak 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 2A
1. 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 2B
Een 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

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
EXCEL 2007
« Reactie #1 Gepost op: 26 juni 2007, 18:12:26 »
In Excel versie 2007 heeft een nieuwe functie zijn intrede gedaan, speciaal met het oog op dit probleem.

Kijk in de help onder "IFERROR" (in het Nederlands klinkt dat wellicht zo :"ALS.FOUT")

Hier alvast enkele nuttige links. Vond iemand er in het Nederlands?
https://blogs.msdn.com/excel/archive/2005/10/20/483205.aspx

https://office.microsoft.com/en-us/excel/HA012317651033.aspx

https://msdn2.microsoft.com/en-us/library/aa730921.aspx

Offline spyder

  • Ambassadeur
  • *****
  • Berichten: 5.265
  • PC probleem zit meestal tussen scherm en rugleun
Re: INFO: vermijd =ALS(ISFOUT(formule);"";formule)
« Reactie #2 Gepost op: 26 juni 2007, 20:29:47 »
Hoi Erik,

Citaat
in het Nederlands klinkt dat wellicht zo :"ALSFOUT")
Bijna juist. ;D

Het moet zijn:  ALS.FOUT

Een Nederlandstalige uitleg vind je op :
https://office.microsoft.com/nl-nl/excel/HA012317651043.aspx

spyder

Windows 7 Ultimate Unknow NLD
Intel(R) Core(TM) i7 CPU         870  @ 2.93GHz 2934
P7P55D-E PRO
NVIDIA GeForce GTX 470 1280MB 1680 x 1050
HD 1 : INTEL SSDSA2M080G2GC (80GB)
HD 2 : ST31500341AS (1,5TB)
HD 3 : ST320006 41AS (2TB)
browser: Maxthon  mail:Thunderbird AV: Bitdefender
Scarlet user

Offline Erik Van Geit

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 306
  • Geslacht: Man
Re: INFO: vermijd =ALS(ISFOUT(formule);"";formule)
« Reactie #3 Gepost op: 28 juni 2007, 11:42:20 »
Bedankt, Spyder,

'k Moet dringend eens meer de Nederlandstalige sites bezoeken :)
Versie 2007 staat nog niet op mijn PC: daarmee werken heeft voor mij weinig zin. Sommige elementen die ik in de laatste versie zou maken, zouden niet werken bij de klanten - die dikwijls oudere versies gebruiken. Het is belangrijk om daarmee rekening te houden als ontwikkelaar.
Nu ja, als de kinderziekteperiode over is, schaf ik me ook versie 2007 aan. ;)

beste groeten,
Erik

Offline dijkie

  • Lid
  • *
  • Berichten: 11
  • Oplossing.be
Re: INFO: vermijd =ALS(ISFOUT(formule);"";formule)
« Reactie #4 Gepost op: 14 augustus 2007, 22:00:07 »
ik was idd ook 1 van die vraagstellers, en ben nu ook van mening, laat lekker staan, hoort bij excel.


Bedankt naamgenoot.

Groet, Erick.
Gelieve uw systeemgegevens in te vullen. Klik HIER voor meer informatie.

 


www.combell.com