abonnement Unibet Coolblue
pi_114339315
Ik heb een tabel in Excel waarmee ik graag mijn gemiddelde cijfers voor school ed. wil uitrekenen. Hierbij heb ik gewogen cijfers, dus de een 5,5 en een 8 kan alsnog een 6 gemiddeld zijn.
Nu wil ik mijn gemiddelde 'vast' zetten, als in: daar hoef ik niets aan te doen. Dat betekent dat als ik een nieuw cijfer in wil voeren, ik enkel het cijfer en de wegingsfactor invoer, waarna mijn gemiddelde wordt berekend.

Ik kan wel bedenken hoe ik mijn totale wegingsfactor uitreken (=SUM(Weging[#All]), maar ik kan mij niet bedenken hoe ik wanneer ik een nieuwe kolom maak, ik mijn cijfer maal mijn wegingsfactor kan doen (voor elk cijfer). Kan iemand mij helpen? :)
“I'm not about caring; I'm about winning.”
- Harvey Specter
“Take a step back, look at the bigger picture.”
pi_114339789
Voorbeeld
Je wegingsfactor in kolom A (bijvoorbeeld van A2 tot A10), je cijfer in kolom B.(bijvoorbeeld van B2 tot B10).
Je kan nu je totaal berekenen door middel van somproduct(A2:A10;B2:B10) [in het engels sumproduct] en je kunt het totaal van je wegingsfactor berekenen via som(A2:A10).

Je gewogen gemiddelde vormt dus: somproduct(A2:A10;B2:B10)/som(A2:A10)
pi_114340145
quote:
0s.gif Op dinsdag 17 juli 2012 23:06 schreef snabbi het volgende:
Voorbeeld
Je wegingsfactor in kolom A (bijvoorbeeld van A2 tot A10), je cijfer in kolom B.(bijvoorbeeld van B2 tot B10).
Je kan nu je totaal berekenen door middel van somproduct(A2:A10;B2:B10) [in het engels sumproduct] en je kunt het totaal van je wegingsfactor berekenen via som(A2:A10).

Je gewogen gemiddelde vormt dus: somproduct(A2:A10;B2:B10)/som(A2:A10)
Ontzettend bedankt, ik kende die functie niet. :D Nu kan ik weer verder.
“I'm not about caring; I'm about winning.”
- Harvey Specter
“Take a step back, look at the bigger picture.”
pi_114341981
quote:
0s.gif Op dinsdag 17 juli 2012 23:06 schreef snabbi het volgende:
Voorbeeld
Je wegingsfactor in kolom A (bijvoorbeeld van A2 tot A10), je cijfer in kolom B.(bijvoorbeeld van B2 tot B10).
Je kan nu je totaal berekenen door middel van somproduct(A2:A10;B2:B10) [in het engels sumproduct] en je kunt het totaal van je wegingsfactor berekenen via som(A2:A10).

Je gewogen gemiddelde vormt dus: somproduct(A2:A10;B2:B10)/som(A2:A10)
Hmm, ik heb geprobeerd het totaal aantal punten (voor deling) te berekenen, echter voert Excel mijn formule überhaupt niet uit. Wat is er fout aan deze formule?
1=SUMPRODUCT(Weging[[#All]];[@[Proefwerk H1]]:OFFSET(E6;;COUNTA(ProgressChartValues)))

Weging[#All] is het totaal van de wegingsfactoren (die zelf een tabel vormen). Bij [@[Proefwerk H1]] beginnen de cijfers. OFFSET(E6;;COUNTA(ProgressChartValues)) berekent de locatie van mijn laatste cijfer d.m.v. de wegingsfactor. Als ik bijvoorbeeld 3 wegingsfactoren heb ingevuld, is COUNTA(ProgressChartValues) 3, waardoor OFFSET(E6;;COUNTA(ProgressChartValues)) de waarde E9 wordt. ProgressChartValues is hierbij een array met alle wegingsfactoren.

//edit: Laat maar, de formule was wel correct. Ik heb een hele stomme fout gemaakt: ik had de cell op 'Text' gezet. Door 'm op 'General' te zetten, kwam alles weer goed. :P

[ Bericht 2% gewijzigd door PowerData op 18-07-2012 11:23:23 ]
“I'm not about caring; I'm about winning.”
- Harvey Specter
“Take a step back, look at the bigger picture.”
pi_114384245
Ik heb nog een probleem, excuses. :@ Ik zou graag een gemiddelde (gewogen) over een aantal cijfers berekenen via een dynamische tabel, echter wil ik dat bijvoorbeeld wanneer er een 0 waarde staat hij niet wordt meegerekend. Ik vertel wat ik mijn cellen heb. :)

In de cellen A3 t/m A5 heb ik de namen van de leerlingen staan. In de cellen B3 t/m B5 staan hun gemiddeldes.
Cel B3:
1=IFERROR(SUMPRODUCT(Weging[#All];[@[Proefwerk 1]]:OFFSET(B3;;COUNTA(ProgressChartValues)))/SUM(Weging[#All]);"")
In de cellen B4 e.d. is alleen de waarde B3 verandert in B4.

De werking is als volgt: via SUMPRODUCT worden de cijfers vermenigvuldigt met de wegingsfactoren (Weging[#All]). Vervolgens worden deze totalen gedeeld door de som van de wegingsfactoren (SUM(Weging[#All]).
De OFFSET berekent dynamisch, aan de hand van het aantal wegingsfactoren, hoeveel cijfers er in de tabel ingevoerd zijn.

In de cellen C3 t/m C5 heb ik de eerste cijfers ingevoerd (van 'proefwerk 1'), in de cellen D3 t/m D5 de cijfers van het tweede proefwerk en de cellen E3 t/m E5 die van het derde proefwerk.

Stel dat ik bijvoorbeeld bij leerling 2 het cijfer van het tweede proefwerk niet invul, hoe zorg ik er dan voor dat het gemiddelde geen rekening houdt met zijn tweede proefwerk, maar wel met dat van de anderen?
“I'm not about caring; I'm about winning.”
- Harvey Specter
“Take a step back, look at the bigger picture.”
pi_114387173
quote:
0s.gif Op woensdag 18 juli 2012 21:14 schreef PowerData het volgende:
Ik heb een voorbeeld voor je gemaakt hoe ik het zou doen. Dit voorbeeld moet je alleen gebruiken wanneer het aantal leerlingen niet heel groot wordt (dus zeg onder de 1000 ofzo).

Het voorbeeld kan je hier vinden: http://www.snirc.nl/extra/leerlingen.xlsx

Wat ik hier doe is het volgende:
Ik bepaal nog steeds de sumproduct op de gebruikelijke wijze, immers vormt een 0 * een wegingsfactor gewoon 0. De truc zit in het tweede deel: SUM((C3:E3>0)*(C1:E3))
Wat ik hier doe is gebruik maken van een array (of vector) binnen 1 cel. De vector voor het deel C3:E3 levert een 1 op wanneer dit groter is dan 1 en een 0 wanneer dit niet groter is dan 0. Deze 1 of 0 vermenigvuldig ik vervolgens met de betreffende wegingsfactor in C1:E1. Hierdoor tellen alleen de wegingsfactoren voor je betreffende leerling mee wanneer het cijfer >0 is.

Voor het gebruik van een array formule moet je bij het invoeren je linker CTRL en SHIFT toets ingedrukt houden terwijl je via enter de formule bevestigd. Gebruik je niet del CTRL + SHIFT dan kan Excel dit niet juist verwerken.

Het gebruik van een array binnen een cel zorgt ervoor dat excel extra berekenigen moet maken per cel. Wanneer je dus veel (echt veel) leerlingen en proefwerken hebt, kan dit trager werken.

Tot slot. Wanneer je geen cijfers invoert zal hij een deling door 0 maken. Dit kan je eventueel oplossen door kolom B te splitsen in 2 kolommen. In de ene kolom maak je de werkelijke berekening (en deze verberg je) en via de andere kolom zet je iets als: =if(iserror(B3):0;B3)
Nu wordt er 0 getoond wanneer je die foutmelding krijgt voor delen door 0.
pi_114392319
quote:
0s.gif Op woensdag 18 juli 2012 22:02 schreef snabbi het volgende:

[..]

Wat ik hier doe is het volgende:
Ik bepaal nog steeds de sumproduct op de gebruikelijke wijze, immers vormt een 0 * een wegingsfactor gewoon 0. De truc zit in het tweede deel: SUM((C3:E3>0)*(C1:E3))
Wat ik hier doe is gebruik maken van een array (of vector) binnen 1 cel. De vector voor het deel C3:E3 levert een 1 op wanneer dit groter is dan 1 en een 0 wanneer dit niet groter is dan 0. Deze 1 of 0 vermenigvuldig ik vervolgens met de betreffende wegingsfactor in C1:E1. Hierdoor tellen alleen de wegingsfactoren voor je betreffende leerling mee wanneer het cijfer >0 is.
Briljant. _O_ Ik ben nieuw met arrays binnen Excel (al heb ik ze wel gebruikt, gezien dat handig is voor dynamische grafieken ed.), maar ik wist nog niet dat je ook een True, False, True array kon maken. Bedankt daarvoor.
Overigens is er iets wat ik nog niet helemaal snap: wat is nou het verschil tussen SUM((C3:E3>0)*(C1:E3)) en SUMPRODUCT(C3:E3>0;C1:E3). De SUMPRODUCT werkt niet, maar ik zou toch denken dat die juist zelfs zonder array zou werken?

In ieder geval, dit is nu het resultaat voor het gemiddelde (in B3), en het werkt. _O_
1{=IFERROR(SUMPRODUCT(Weging[#All];[@[Proefwerk H1]]:OFFSET(B3;;COUNTA(ProgressChartValues)))/SUM(([@[Proefwerk H1]]:OFFSET(B3;;COUNTA(ProgressChartValues))>0)*Weging[#All]);"")}

Bedankt. :)
“I'm not about caring; I'm about winning.”
- Harvey Specter
“Take a step back, look at the bigger picture.”
pi_114393437
quote:
14s.gif Op woensdag 18 juli 2012 23:15 schreef PowerData het volgende:
Overigens is er iets wat ik nog niet helemaal snap: wat is nou het verschil tussen SUM((C3:E3>0)*(C1:E3)) en SUMPRODUCT(C3:E3>0;C1:E3). De SUMPRODUCT werkt niet, maar ik zou toch denken dat die juist zelfs zonder array zou werken?
Waarom weet ik niet precies, maar SUMPRODUCT(C3:E3>0) blijft TRUE en FALSE gebruiken ipv 1 en 0. SUMPRODUCT((C3:E3>0)*1) maakt er wel al 1 en 0 van.

Het nadeel van dit toe te passen in je sumproduct deel is dat je het cijfer van je proefwerk kwijt raakt in het 1 en 0 geneuzel. Dit zou je weer moeten oplossen door er zoiets van te maken:
=SUMPRODUCT((C3:E3>0)*(C3:E3);$C$1:$E$1)

Op dit moment heb je nog steeds maar het totaal berekend en niet het deel wat je moet berekenen voor de wegingsfactor. Er is geen verschil tussen SUM en SUMPRODUCT wanneer je alles binnen 1 argument houdt. In mijn formule is het enige verschil dat het deel van de SUM bepaalt door hoeveel gedeeld moet worden.

quote:
Bedankt. :)
You're welcome
pi_114393903
quote:
0s.gif Op woensdag 18 juli 2012 23:33 schreef snabbi het volgende:

[..]

Waarom weet ik niet precies, maar SUMPRODUCT(C3:E3>0) blijft TRUE en FALSE gebruiken ipv 1 en 0. SUMPRODUCT((C3:E3>0)*1) maakt er wel al 1 en 0 van.

Het nadeel van dit toe te passen in je sumproduct deel is dat je het cijfer van je proefwerk kwijt raakt in het 1 en 0 geneuzel. Dit zou je weer moeten oplossen door er zoiets van te maken:
=SUMPRODUCT((C3:E3>0)*(C3:E3);$C$1:$E$1)
Zoals je al zei is het voor het totaal berekenen niet nodig om een vergelijking als > 0 in te voeren, gezien die automatisch al wegvalt. ;) Ik bedoelde eigenlijk voor de noemer.

Jij had voorgesteld als noemer SUM((C3:E3>0)*(C1:E3)) te nemen en er dan een array van te maken, wat dus overigens perfect werkt. Zou het niet ook werken om dan in plaats daarvan SUMPRODUCT(((C3:E3>0)*1);$C$1:$E$1) te gebruiken, waarbij je geen (extra) arrays nodig hebt?

//edit: ik heb het getest, en dit werkt ook! :) Welke is dan slimmer om te gebruiken? De SUM waarbij je de array met CSE zelf toevoegt, of de SUMPRODUCT die uit zichzelf al met arrays werkt?
“I'm not about caring; I'm about winning.”
- Harvey Specter
“Take a step back, look at the bigger picture.”
pi_114394619
Prima, dat zou inderdaad ook werken ja.
Wat is beter, tja ik zou vermoeden dat het beter is geen gebruik te maken van een array formule, omdat ik verwacht dat de interne formules van Excel efficienter zijn geprogrammeerd, maar volgens mij is het het belangrijkste dat het werkt :P

Zonder array is wel makkelijker invoeren en daardoor minder fout gevoelig.
pi_114394896
Oke, ik kijk nog wel. In ieder geval bedankt voor het laten zien dat je met een vergelijking en een array dit probleem gemakkelijk kunt oplossen. :)
“I'm not about caring; I'm about winning.”
- Harvey Specter
“Take a step back, look at the bigger picture.”
pi_114403380
Sumproduct met een vergelijking erin geeft altijd true false, je vraagt namelijk of een cel wel of niet aan een bepaalde voorwaarde voldoet. Om van een true false array een 1, 0 array te maken kun je hem inderdaad vermenigvuldigen met 1. =SUMPRODUCT((C3:E3>0)*1) geeft een 1,0 array.

Ik gebruik zelf liever -- ervoor omdat het dan duidelijker is dat je die alleen gebruikt om van true false een 1 of 0 te maken ipv dat je een array daadwerkelijik vermenigvuldigd met een echt getal.
=SUMPRODUCT(--(C3:E3>0))

Mijn ervaring is dat een sumproduct sneller is dan een CSE functie. En verder ziet een sumproduct er natuurlijk vet uit.
Supra Groningam Nihil
Postjubilea: 10.000 15.000 20.000 25.000
Sit jou kop in die koei se kont en wag tot die bul jou kom holnaai
Wat niemand je vertelt over de bioindustrie, geen bloed maar feiten
pi_114469578
Ik zit met de volgende uitdaging:

Ik heb een sheet met voor elke dag (kolommen) hoeveelste deel van een doos er ontvangen moet worden per product (rijen). Dit is bijvoorbeeld 1,3 of 2,5 of 3. Bijvoorbeeld:

1
2
3
4
5
           1 jan         2 jan         3 jan         4 jan
prod 1         1             2             0             1
prod 2       1.5           1.3             1           1.4
prod 3         2             0           1.2           1.9
prod 4         0             1           1.7           1.2

Nu moet ik kijken wanneer er een afgevulde vrachtwagen met bijvoorbeeld plaats voor 10 dozen kan komen rijden. Probleem hierbij is dat 1,5 doos de ruimte inneemt van 2 dozen. Maar dat prod 2, als de vrachtwagen op 1 jan rijdt en voor 2 dagen meeneemt, niet 4 (roundup(1.5)+roundup(1.3) dozen aan ruimte inneemt, maar 3 want roundup(1.5+1.3). Hoe kan ik dit het makkelijskte doen?
  vrijdag 20 juli 2012 @ 18:02:58 #89
85514 ralfie
!Yvan eht nioj
pi_114470090
=SUM(ROUNDUP((A2:A5+B2:B5))

invullen en met ctr+shift+enter accepteren
pi_114470296
quote:
0s.gif Op vrijdag 20 juli 2012 18:02 schreef ralfie het volgende:
=SUM(ROUNDUP((A2:A5+B2:B5))

invullen en met ctr+shift+enter accepteren
Dank je, met een ,0 bij de roundup lukte het :)

Alleen hoe bepaal ik nu of ik de som van 1, 2, 3 of misschien wel meer kolommen moet hebben om de vrachtwagen te vullen? Het kan bijvoorbeeld voorkomen dat de vrachtwagen gevuld kan worden met de behoefte van bijvoorbeeld 20 dagen.
pi_114498308
Niet meer nodig

[ Bericht 99% gewijzigd door _superboer_ op 21-07-2012 16:23:53 ]
pi_114557236
quote:
0s.gif Op zaterdag 21 juli 2012 15:29 schreef _superboer_ het volgende:
Niet meer nodig
had je het zelf opgelost? Misschien kon iemand anders er nog wat van leren.
Supra Groningam Nihil
Postjubilea: 10.000 15.000 20.000 25.000
Sit jou kop in die koei se kont en wag tot die bul jou kom holnaai
Wat niemand je vertelt over de bioindustrie, geen bloed maar feiten
pi_114557362
quote:
3s.gif Op maandag 23 juli 2012 08:46 schreef Deetch het volgende:

[..]

had je het zelf opgelost? Misschien kon iemand anders er nog wat van leren.
Had het zelf opgelost:
ActiveCell.FormulaR1C1 = _
"=ROUNDUP(SUM('4.1.1. tussenstap krat'!RC:RC[j - 1]),0)"

Moest zijn:

ActiveCell.FormulaR1C1 = _
"=ROUNDUP(SUM('4.1.1. tussenstap krat'!RC:RC[" & j - 1 & "]),0)"
pi_114567239
Een nieuw vraagje: doordat mijn macro zichzelf weer start krijg ik na een tijdje een out of stack error. Is er een mogelijkheid om een macro vaak te laten herhalen zonder die error te krijgen?
pi_114576786
Stack errors worden vermoedelijk veroorzaakt door recursie of door gebruik te maken van een onchange event dat meerdere keren wordt aangeroepen. Recursie is uit te schrijven met behulp van for loops.
pi_114673716
Vraagje.. Ik heb 2 excel bestanden. Laat ik zeggen bestand A en bestand B.

In bestand A staat in kolom D data. Deze staat in willekeurige volgorde ook in bestand B, kolom A. Echter staat er in bestand B data in kolom B welke ik naar bestand A wil hebben. Maar alleen op de goede plaats iofwel achter dezelfde term als waar het in B ook staat. Hoe doe ik dit? :@

Dit in Excel 2007, Engels.
pi_114675359
Onderstaande formule zet in je bestand A, cel E1 en trek je door naar beneden.

=VLOOKUP(D1,[bestandB.xlsx]Sheet1!$A$1:$B$4,2,0)

Ik ben er gemakshalve even vanuit gegaan dat je tabel in bestandB niet verder gaat dan rij 4, anders moet je $B$4 even naar smaak aanpassen.

[ Bericht 72% gewijzigd door Deetch op 26-07-2012 11:58:53 ]
Supra Groningam Nihil
Postjubilea: 10.000 15.000 20.000 25.000
Sit jou kop in die koei se kont en wag tot die bul jou kom holnaai
Wat niemand je vertelt over de bioindustrie, geen bloed maar feiten
pi_114735280
Als ik enkele van mijn excelbestanden probeer te openen (>15mb) loopt excel (64bit) vast. Als ik deze bestanden echter openen op een virtual machine met excel (32bit) kunnen de bestanden wel geopend worden. Iemand een idee waar dit aan kan liggen?
pi_114736077
quote:
0s.gif Op vrijdag 27 juli 2012 21:22 schreef _superboer_ het volgende:
Als ik enkele van mijn excelbestanden probeer te openen (>15mb) loopt excel (64bit) vast. Als ik deze bestanden echter openen op een virtual machine met excel (32bit) kunnen de bestanden wel geopend worden. Iemand een idee waar dit aan kan liggen?
http://social.technet.mic(...)5-876e-9d1d46e7975f/
?
pi_114775223
Ik heb een macro, waarin ik de waarden wil sommere waarbij aan twee criteria wordt voldaan. Ik wil graag voorkomen dat ik combinaties moet maken van de twee kolommen.

Hoe doe ik onderstaande het meest efficiënt in VBA?
{=SOM((B2:B10="A")*(C2:C10="B")*D2:D10)}

Thanks!
abonnement Unibet Coolblue
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')