Deling door nul

Weet je niet waar je je bericht moet zetten? Doe het hier
EMn
Berichten: 37
Lid geworden op: vr jul 20, 2012 11:16 am

Deling door nul

Bericht door EMn »

Veronderstel dat men in een rekenblad een formule wil gebruiken waarbij een veld a1 gedeeld wordt door een veld b1, dan krijgt men uiteraard een foutbericht als b1 een nulwaarde heeft. Vroeger kon ik dat vermijden door er een "ALS" functie aan te verbinden die de waarde b1 test. Door te schrijven "=(als(b1<>0))*(a1/b1)" werd deze formule alleen uitgevoerd als b1 werkelijk verschillend was van 0. Dit schijnt echter niet meer te werken. Een andere toepassing was als men wilde de som van een aantal velden delen door het aantal velden waarin men een werkelijke waarde, dus verschillend van 0 vond teneinde een gemiddelde waarde te bekomen die alleen rekening hield met ingevulde velden. Het volstond gewoon de som te maken van de volledige reeks velden en die som te vermenigvuldigen met een waarde die bestond uit de som van "((als b1<>0)+(als b2<>0)+(als b3<>0)+... )". Deze laatste som kwam dan overeen met het aantal velden waar werkelijk een waarde (verschillend van 0) in stond en gaf dus een juiste deler voor de berekening van het gemiddelde. Dat was vooral handig wilde men de formule kopiëren naar een ganse reeks velden zonder rekening te houden met wat als waarde bestond in de bx velden. Weet iemand hoe men dit kan oplossen?
Bedankt vooraf en vriendelijke groeten
Ernest
Laatst gewijzigd door EMn op di aug 11, 2015 6:28 pm, 1 keer totaal gewijzigd.
OpenOffice 4.1.1 op Windows 7
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Deling door nul

Bericht door RPG »

Hallo

Het is mij niet zo goed duidelijk wat het hele verhaal moet betekenen. Dat komt ook doordat de eerste formule niet doet wat het beoogd te moeten doen. Het kan ook aan mij liggen wat ik ben niet zo'n grote calc kenner.

Formule 1

Code: Selecteer alles

=(als(b1<>0))*(a1/b1)
Als ik de formule goed begrijp doet het eerste deel van de formule een test met als uit komst een 1 of 0. In het tweede deel wordt een toch gedeeld ook al is de waarde nul. Daarna worden de twee uitkomsten met elkaar vermenigvuldigd.
Ik denk dat dit beter is:

Code: Selecteer alles

=ALS (B1=0 ;0;A1/B1)
Gemiddelde
Als ik het goed begrijp wil je het gemiddeld uitrekenen van een reeks getallen. Ik weet niet waarom je geen gebruik maakt van de reeds ingebouwd standaard mogelijkheden. Als je een goede tabel maakt dan moet het toch simpel zijn om daarvan gemiddelden te berekenen met alleen enig klik werk, Meestal komen mensen in problemen door in deerste plaats aan de opmaak te denken en niet aan verschillende stappen. De eerste stap is het maken van een goede tabel. De tweede stap is met gebruik van de ingebouwde mogelijk de gewenste resultaten te berekenen.

Wat zijn ingebouwde mogelijkheden
a) draaitabel
b) database bereik met behulp van filteren en subtotals
c) de databasefuncties en een database bereik.
d) gebruik van in gebouwde functie zoals: "=AANTAL.ALS(B1:B3;"<>0")"

Let wel ik praat nog steeds alleen over spreadsheet in calc. Misschien kun je een klein voorbeeld hier plaatsen over het probleem.

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
EMn
Berichten: 37
Lid geworden op: vr jul 20, 2012 11:16 am

Re: Deling door nul

Bericht door EMn »

Hello RPG

Bedankt voor je snelle antwoord.
Het is dus iets heel raar met die functie "ALS". Volg ik je raad en schrijf ik "als(b1=0;0;a1/b1) dan werkt dit maar alleen wanneer er werkelijk een nul-waarde staat in b1. Staat er een blanco dan krijg ik toch de fout "deling door nul". Draai ik de redenering om en schrijf ik "als(b1<>0;a1/b1;0) en staat er nul in b1 dan krijg ik "deling door nul", staat er nu een blanco in b1 dan werkt het wel. Normaal betekent "b1<>0" toch gewoon "verschillend van nul.

Een soortgelijk probleem heb ik met de functie "AANTAL". Men kan dus schrijven "aantal(a1:z1)" en het resultaat komt overeen met het aantal velden van a1 tot en met z1 waarin een waarde zit verschillend van blanco of tekst. De velden waar nul staat worden echter wel geteld, wat dus niet de bedoeling was. Gebruikt men "AANTALARG", dan worden zowel nul als tekst als een te tellen argument beschouwd, maar het tegengestelde, dus noch nul noch tekst tellen bestaat niet. Er bestaan nochtans functies - bvb "MAXA" in tegenstelling tot "MAX" - waar wel zowel nul als tekst/blanco worden genegeerd.

Je hebt natuurlijk gelijk als je vooropstelt dat er moet nagedacht worden over de te gebruiken functies vooraleer men de design van een rekenblad gaat ontwerpen, maar in mijn geval is het zo dat ik begin met een heel gewone, simpele tabel, en als die dan werkt dan worden er langs alle kanten stukjes bijgeschreven, waar men vooraf zelfs niet aan durft te denken. Wat betreft die draaitabellen, en data bases dat heb je me al aangeraden, maar daar raak ik helemaal in verstrikt. Dat is te hoog gegrepen voor mij. Kijk nog maar eens naar mijn ouderdom dan gaat veel je duidelijk worden...

Toch bedankt. Ik denk dat ik met je antwoord heel wat kan oplossen.
Met vriendelijke groet
Ernest
OpenOffice 4.1.1 op Windows 7
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Deling door nul

Bericht door RPG »

Hallo

Met testen zijn twee zaken belangrijk om in de gaten te houden
a) Je krijgt antwoord op de vragen die je stelt.
b) Feitelijk telt alleen het positieve antwoord.

Voor de functie
Je kunt de functie ook veranderen in

Code: Selecteer alles

als(b1>0;a1/b1;0)
Ik weet niet of het werkt maar het is te proberen. Je kunt de functie ook uitbreiden door er een of bij in tevoegen.

Code: Selecteer alles

als(of(b1=0;b1<>"");0;a1/b1
Ik heb het niet getest.

Filteren
Ik geloof dat de volgende mogelijkheden zijn te gebruiken:

Code: Selecteer alles

=
>
<
<>
>=
<=
Overstappen naar een nieuw idee
Ik kan begrijpen dat overstappen naar een nieuw idee niet eenvoudig is. Maar ik zelf ben ook geboren in 1950 en doe het alleen voor hobby gebeuren. Mijn idee is werkelijk dat het leren omgaan met een draaitabel mensen sneller een resultaat geeft dan de werking leren van al die kleine functies. Al die kleine functies hebben veel uitzonderingen met als resultaat dat er soms de verkeerde uitkomst is. Lange tabellen met de oorspronkelijke gegevens ingevoerd in een programma zijn veel flexibeler. Als er nieuwe programma's komen kan een lange tabel vaak gemakkelijk door een nieuw programma gebruik worden. De gegevens verspreid in spreadsheet kaan waarschijnlijk alleen door een bepaald spreadsheet gebruikt worden.

Veranderingen
In mijn familie maar ook op het Engelse forum zie ik ook dat mensen lang blijven hangen in een oude manier van denken en in oude programma's. De resultaten van hun werk zijn later vaak moeilijk over te brengen. In een andere draad heb alle gegevens om gewerkt naar een simpele tabel. Ook heb ik laten zien dat met simpel klikken in een draaitabel de resultaten te krijgen zijn. Van deze gegevens zijn simpel grafieken te maken. Dit alles lijkt mij eenvoudiger te leren dan het onderhouden van een ingewikkeld spreadsheet.

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Deling door nul

Bericht door RPG »

Hallo

Ik heb nog een poosje langer gekeken naar het programma. Ook als de stap naar een draaitabel te groot is dan is er veel ruimte om zaken te verbeteren.

Op de tabbladen per jaar staat per dag aan gegeven wat de op brengst is. Wanneer er een getal staat dan is er met een simpele functie opdracht het volgende te berekenen
=aantal('2008'.B2:M32) 'Aantal dagen in dat jaar.
=sum('2008'.B2:M32) ' Totale opbrengst in dat jaar.
=gemiddelde('2008'.B2:M32) Gemiddelde over de periode.

Proefje maken
Het beste is misschien om met een nieuw document te beginnen en daar simpel wat getallen in te zetten. Ik denk dat het de moeite zal lonen om naar die functies te kijken. Dan is het misschien mogelijk om alles te vereenvoudigen en toch een zelfde werkwijze aan te houden.

0 waarden
Wanneer er een dag is met een 0 waarde als opbrengst dan moet diedag meegeteld worden. Dit kan door een 0 te noteren in de opbrengst. Wanneer de opbrengst die dag onbekend is dan hoeft er niets ingevuld te worden. Het is dan een leeg veld. Wanneer je de tabel op die manier invult dan worden dagen, totaal en gemiddelde automatisch goed berekend. Je ziet dus een goed begin is het halve werk. Het goede begin is het goed invullen van de tabellen. Het gevolg is eenvoudige formules.

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
eremmel
Berichten: 670
Lid geworden op: di sep 01, 2009 10:11 am
Locatie: Barneveld, Nederland

Re: Deling door nul

Bericht door eremmel »

EMn schreef: Het is dus iets heel raar met die functie "ALS". Volg ik je raad en schrijf ik "als(b1=0;0;a1/b1) dan werkt dit maar alleen wanneer er werkelijk een nul-waarde staat in b1. Staat er een blanco dan krijg ik toch de fout "deling door nul". Draai ik de redenering om en schrijf ik "als(b1<>0;a1/b1;0) en staat er nul in b1 dan krijg ik "deling door nul", staat er nu een blanco in b1 dan werkt het wel. Normaal betekent "b1<>0" toch gewoon "verschillend van nul.
Ik heb zitten testen met AOO411 LO4282 en Excel2013 maar overal gaat de formule =((b1<>0)*(a1/b1)) fout en geeft "error delen door 0". Als je AOO gebruikt vind ik het vreemd dat de formule =als(b1=0;0;a1/b1) niet werkt als b1 leeg is.
In LO kun je via Tools->Options->Calc->Formula->Custom (Details) aangeven of je lege velden als 0 wilt zien of dat er een fout gegeven moet worden.
Een soortgelijk probleem heb ik met de functie "AANTAL". Men kan dus schrijven "aantal(a1:z1)" en het resultaat komt overeen met het aantal velden van a1 tot en met z1 waarin een waarde zit verschillend van blanco of tekst. De velden waar nul staat worden echter wel geteld, wat dus niet de bedoeling was. Gebruikt men "AANTALARG", dan worden zowel nul als tekst als een te tellen argument beschouwd, maar het tegengestelde, dus noch nul noch tekst tellen bestaat niet. Er bestaan nochtans functies - bvb "MAXA" in tegenstelling tot "MAX" - waar wel zowel nul als tekst/blanco worden genegeerd.
MAXA beschouwt text-velden als een '0'. Dus =MAXA("Erik", -1, -2, -3) heeft als antwoord 0, maar =MAX("Erik", -1, -2, -3) heeft als antwoord -1.

Dus ik weet niet precies aan welk type spreadsheet programma je refereert als je deze uitspraken doet (helaas kan ik niet het oude MS Excel formaat meer testen...
W11 21H2 (build 22000), LO 7.4.1.2(x64)
Het is Microsoft marketing die laat geloven dat computers geschikt zijn voor niet technici
RPG
Berichten: 4667
Lid geworden op: wo apr 15, 2009 1:01 am
Locatie: Apeldoorn, Nederland

Re: Deling door nul

Bericht door RPG »

Hallo

Ik heb de gegevensreeks in het voorbeeld nogal eens gebruikt voor testjes. Speciaal de aangepaste reeks. Het blijkt dat LibreOffice de gegevens in een grafiek beter toont dan Apache Office. LibreOffice geeft de goede kolom namen weer en Apache Office doet dat niet. Het probleem doet zich bij mij voor in een draaitabel waarbij niet alle cellen een waarde hebben. Dit geeft speciaal problemen bij de begin cellen.

Advies voor EMn wanneer je toch probeert te werken met een draaitabel en een grafiek wilt maken probeer het ook eens met LibreOffice

Romke
LibreOffice 7.4.3.2 op openSUSE Leap 15.4
Plaats reactie