Categorie archief: Excel

Doorvoeren en sorteren

De titel klinkt als een term uit de breiwereld, maar het heeft toch echt alles met Excel te maken.

Een paar weken geleden, tijdens een Excel-cursus die ik gaf, bleek weer eens hoe weinig mensen de handige optie ‘Doorvoeren’ van Excel ten volle kennen; laat staan gebruiken.
En bijna niemand weet dat je je eigen reeksen kunt maken, die op dezelfde manier gebruikt kunnen worden; en dat deze reeksen ook voor sortering gebruikt kunnen worden.

Doorvoeren

Laten we eerst even kijken wat doorvoeren eigenlijk is:
Doorvoereneen cel,  gevuld met een waarde (dat kan een getal, datum of tekst zijn) kun je snel kopiëren door de zogenaamde vulgreep rechtsonder in de cel met de muis naar beneden of naar rechts te verslepen.

Stel dat cel B1 het getal 1 bevat (download  het Voorbeeldbestand);  wanneer we dan de vulgreep ‘naar beneden trekken’ tot in rij 10 dan zal Excel alle tussenliggende cellen met een 1 vullen.
DoorvoerenMaar let op: rechtsonder komt een kleine button tevoorschijn: de Opties voor Automatisch doorvoeren.
Deze opties zijn context-gevoelig, dat wil zeggen dat het aantal opties en de mogelijkheden afhankelijk zijn van de inhoud van de gekopieerde cel.
DoorvoerenIn dit geval (we hebben het cijfer 1 gekopieerd) zal Excel ons 4 opties tonen wanneer we op de button klikken: Cellen kopiëren (in dit geval de standaardactie), Reeks doorvoeren, Alleen opmaak doorvoeren en Doorvoeren zonder opmaak.
De laatste 2 opties spreken voor zich. De tweede (Reeks doorvoeren) is het meest interessante: wanneer je daar nu op klikt zal Excel niet de 1 uit cel B1 kopiëren, maar de volgende rijen vullen met 2, 3 etcetera!

NB in iedere regel van de Opties voor Automatisch doorvoeren is een letter onderstreept; dat betekent dat je niet met de muis op zo’n optie hoeft te klikken, je kunt ook de betreffende onderstreepte letter op het toetsenbord intikken.

Laten we dat ook eens met een datum doen: in het Voorbeeldbestand is cel C1 gevuld met 1-1-2015.
DoorvoerenTrek de vulgreep van deze cel naar rij 10 en de cellen worden gevuld met de eerste 10 dagen van het jaar!
DoorvoerenKlik op de optie-button rechtsonder en we zien de diverse mogelijkheden. Blijkbaar gebruikt Excel bij een datum doorvoeren standaard de 2e optie (Reeks); dit in tegenstelling tot getallen, waar standaard de kopieeractie wordt uitgevoerd.
De eerste vier opties snappen we nu, de vijfde is exact gelijk aan de tweede, maar de zesde is om van te watertanden! En de zevende en de achtste zijn ook uiterst handig.
Probeer de mogelijkheden uit. Trek de reeks verder door dan 31 dagen en daarna ook voorbij februari: Excel weet precies hoeveel dagen er in een maand zitten.

Nog even terug naar de getallen: wanneer we de cellen D1 en D2 vullen met respectievelijk 1 en 2, we selecteren de TWEE cellen Doorvoerenen slepen de vulgreep naar beneden, dan kiest Excel wel als standaard de optie Reeks doorvoeren (en krijgen we dus de getallen 1 t/m 10); cellen kopiëren levert in dit geval allemaal blokjes van de getallen 1 en 2 op.

Stel we vullen de cellen E1 en E2 met de getallen 1 en 3; doorvoeren van deze 2 cellen levert een mooie reeks van 1, 3, 5, 7 etc.
LET OP:  met een reeks als 1, 4, 9 (de volgende zal dan toch wel 16 zijn?) kan Excel niet overweg.

Dit opent perspectieven: willen we een overzicht van alle maandagen in 2015 dan vullen we een cel met de eerste maandag (5-1-2015) en de cel daaronder met de tweede (12-1-2015), we selecteren deze twee cellen en slepen de vulgreep!

Teksten doorvoeren

Hiervoor hebben we gezien welke mogelijkheden Excel biedt voor het doorvoeren van getallen (voor Excel zijn datums gewoon getallen maar met een speciale opmaak).
Welke mogelijkheden zijn er voor teksten?

In het Voorbeeldbestand is cel F1 gevuld met de tekst een. Voer deze cel door en Excel vult alle cellen met dezelfde tekst. Klikken op de button Opties voor Automatisch doorvoeren laat zien dat er maar drie mogelijkheden zijn: Kopiëren (de standaardactie) en wel of niet de opmaak doorvoeren.

Zijn er twee cellen gevuld (G1 en G2 met een en twee), worden deze geselecteerd en doorgevoerd, dan ontstaat er een opeenvolging van deze twee tekstcellen.

Verrassing!?
DoorvoerenCel H1 is gevuld met het woord ma.
Wanneer we deze cel doorvoeren, ontstaat er de bekende reeks ma, di , wo, do, vr, za, zo!
Is de doorvoering groter dan 7 rijen of kolommen, dan wordt de reeks herhaald.

En ook hier zit onder de button Opties voor Automatisch doorvoeren de handige optie om alleen Weekdagen door te voeren.

Wat de mogelijkheden zijn, wanneer we een cel met het woord maandag, jan of januari doorvoeren, zal nu wel niet meer verbazen.

NB wanneer de eerste cel met een hoofdletter begint (of alles is in hoofdletters) dan zal Excel bij het doorvoeren dat automatisch overnemen.

Snel doorvoeren

Stel dat we van een grote reeks getallen het kwadraat zouden willen weten (en wie wil dat niet?) dan kunnen we diverse, benodigde handelingen snel uitvoeren (zie ook het tabblad SnelDoorv in het Voorbeeldbestand):

  1. in de cellen B1 en B2 zetten we de getallen 1 respectievelijk 2
  2. selecteer deze 2 cellen en voer met behulp van de vulgreep deze selectie naar beneden door voor het aantal getallen, waarvan je het kwadraat wilt weten
  3. in cel C1 zetten we de tekst in het kwadraat =
  4. dubbelklik op de vulgreep van cel C1 en de tekst wordt automatisch zo vaak naar beneden gekopieerd als er in kolom B getallen staan!
  5. in cel D1 komt de formule =B1^2
    Het caret-teken wordt in Excel gebruikt om een machtsverheffing aan te duiden (zoals Wikipedia zegt: Not to be confused with Carrot or Carat).
  6. dubbelklikken op de vulgreep van cel D1 en ook deze formule is tig-keer gekopieerd

LET OP: dubbelklikken heeft alleen effect als de kolom links of rechts van de door te voeren cel gevuld is.

Sorteren

De reeksen voor de dagen en maanden kunnen ook gebruikt worden om een logische sortering door te voeren.

DoorvoerenIn het Voorbeeldbestand heb ik ook een tabblad Sorteren opgenomen, waarin een overzicht staat van de omzet van een heel kleine witgoedhandel: per verkocht apparaat staat vermeld in welke maand voor welk bedrag dit is verkocht.

Om dit schema wat overzichtelijker te maken is het handig om te sorteren op de maand: selecteer een cel in de maand-kolom en sorteer in de volgorde A-Z (met behulp van de button Steekproef binnen de menuoptie Gegevens of door rechts te klikken en dan Sorteren te kiezen).
Het resultaat is waarschijnlijk niet wat je verwacht (of gehoopt) had: Excel zal standaard de gewone alfabetische volgorde aanhouden.

DoorvoerenMaar daar kunnen we wat aan doen:

  1. klik rechts op een cel in de maand-kolom
  2. kies Sorteren en dan de optie Aangepast sorteren
  3. klik in het vervolgscherm onder Volgorde op het keuzedriehoekje Doorvoeren
  4. klik op Aangepaste lijst en kies de lijst met maanden
  5. nog 2x op OK klikken en de nieuwe sortering is klaar!

De nieuw ‘geleerde’ volgorde blijft actief totdat deze op de voorgaande manier wordt aangepast.

Eigen sortering/reeks

We kunnen onze omzet ook op product sorteren: we krijgen dan de volgorde Koelkast, Magnetron, Strijkijzer.

Wanneer we (om een of andere reden) de keukenapparaten achteraan willen hebben, is dat standaard niet mogelijk, maar …..

  1. open het tabblad Sorteren van het Voorbeeldbestand
  2. klik rechts op een cel in de product-kolom
  3. kies Sorteren, Aangepast sorteren, keuzedriehoekje bij Volgorde en dan Aangepaste lijst
  4. Doorvoerenin het blok Gegevens in lijst zetten we de drie apparaten in de gewenste volgorde (gescheiden door Enter)
  5. klik op Toevoegen
  6. 2x OK en de nieuwe sortering is klaar!

NB deze aangepaste lijst zal door Excel voortaan ook gebruikt worden bij het Doorvoeren. Tik in een cel Strijkijzer in en voer de cel met behulp van de vulgreep door: de volgende cel wordt Magnetron, dan Koelkast, opnieuw Strijkijzer etc.

NB2 de aangepaste lijsten worden NIET in het betreffende werkblad vastgelegd, waarin ze zijn gemaakt, maar vormen een aanpassing op de Excel-omgeving. Ook in andere werkbladen kunnen de nieuwe reeksen dus meteen toegepast worden.

Dergelijke aangepaste lijsten zijn zeer bruikbaar: bij een bedrijf-eigen productindeling, bij waarderingscodes (denk aan de financiële waardering AAA, AA+, AA, AA-, A, BBB …) etcetera


Vensters

Via een venster krijgen we een beter zicht op de wereld.
Zou Microsoft daarom deze naam gekozen hebben voor het onderdeel in Excel waarmee we op verschillende manieren naar de geopende werkmappen en -bladen kunnen kijken?

Werkmappen vergelijken

Venster2Een van de belangrijkste hulpmiddelen bij het beoordelen, controleren of analyseren van een Excel-werkmap is de vergelijking met de resultaten van bijvoorbeeld de vorige maand.

Grote afwijking zijn dan direct zichtbaar en kunnen nader onder de loep worden genomen.

Afhankelijk van de structuur van de Excel-sheets zijn daar diverse mogelijkheden voor.
Wanneer voor iedere maand de gegevens op (ongeveer) dezelfde manier vastliggen kent Excel een handig vergelijkingsmechanisme:

  1. open het Overzicht van januari en klik op de tab jan om de gegevens van januari te bekijken
  2. open ook het Overzicht van februari en klik op de tab feb
  3. Vensterkies dan de menutab Beeld en daarbinnen, in het blok Venster, de optie Naast elkaar weergeven
  4. VensterExcel toont dan standaard de twee werkmappen onder elkaar, waardoor een snelle, visuele vergelijking mogelijk is.
  5. als niet alle regels of kolommen zichtbaar zijn, kun je in één van de twee werkbladen scrollen, waarbij de scroll-actie in het andere werkblad automatisch ook wordt uitgevoerd.
    Wil je dat niet: zet de optie Synchroon schuiven in de werkbalk uit.

LET OP: wanneer je meer dan 2 werkmappen hebt geopend zal Excel vragen met welke werkmap je de actuele werkmap wilt vergelijken wanneer je op Naast elkaar weergeven klikt.

Soms raakt Excel ‘de weg kwijt’ en krijg je toch geen 2 werkmappen tegelijkertijd te zien: de optie Naast elkaar weergeven uit en opnieuw aanzetten, lost dat meestal op. Als dat niet het geval is, klik dan op Vensterpositie herstellen.

VensterWil je handmatig switchen tussen de diverse geopende werkmappen gebruik dan de button Ander venster in de werkbalk Beeld.
Het switchen gaat zeker zo makkelijk door Ctrl-Tab in te drukken (Ctrl-toets inhouden en op Tab drukken).

Werkbladen vergelijken

Omdat we in de praktijk vergelijkbare overzichten vaak niet apart in werkmappen vastleggen, maar ´naast elkaar´ in werkbladen, zou het handig zijn om deze op dezelfde manier te vergelijken.

Je voelt het al aankomen: helaas werkt bovenstaande optie alleen met werkmappen!

Maar gelukkig is daar wel iets aan te doen:

  1. open het Overzicht van 2014 en klik op de tab jan om de gegevens van januari te bekijken
  2.  Vensterkies dan de menutab Beeld en daarbinnen, in het blok Venster, de optie Nieuw Venster
  3. hoewel er ogenschijnlijk niets is gebeurd: Excel heeft op de achtergrond een kopie van de werkmap aangemaakt. De optie Naast elkaar weergeven is dan ook niet langer meer grijs. Zet deze optie aan.
  4. Vensterwe hebben nu 2 dezelfde werkmappen onder elkaar (onderscheid wordt gemaakt door een :1 of :2 achter de naam van de werkmap )
  5. kies in één van de 2 werkmappen een ander tabblad en op dezelfde manier als hierboven beschreven kun je de inhoud vergelijken.

LET OP: voordat je de werkmap opslaat, dien je één van de twee kopieën te sluiten. Anders zal Excel bij het openen allebei de vensters weer activeren.

Meerdere werkbladen of -mappen vergelijken

Er is nog een andere manier om de inhoud van Vensters met elkaar te vergelijken.
VensterHeb je 2 werkmappen geopend (of een nieuw venster op dezelfde werkmap) dan kun je ook in de menutab Beeld kiezen voor de optie Alle vensters.

VensterEr opent zich dan een submenu, waarbij je zeggenschap krijgt hoe Excel de vensters op het scherm moet rangschikken.
Naast elkaar
: Excel bepaalt zelf de meest handige indeling
Horizontaal: alle vensters onder elkaar (hetzelfde als bij de optie Naast elkaar weergeven)
Verticaal: alle vensters naast elkaar
Trapsgewijs: alle vensters overlappend (wanneer je deze optie zou gebruiken is me een raadsel!)

Via een vinkje kun je nog aangeven of je alle geopende werkmappen bij de vergelijking wilt betrekken of alleen de vensters van de actieve (laatst geselecteerde) werkmap.

LET OP: als je de optie Alle vensters gebruikt, kun je niet synchroon scrollen in de werkbladen.

Waar bij de optie Naast elkaar weergeven er altijd maar 2 vensters kunnen worden vergeleken, kun je op deze manier een ongelimiteerd (?) aantal vensters naast elkaar zetten.
Dan is de Schik-optie Naast elkaar heel handig.

VensterPS de optie Inzoomen op selectie al eens geprobeerd?
Selecteer een serie cellen en klik op deze button en je ‘kijk-venster’ wordt beperkt tot deze range. Daarna natuurlijk wel weer even op 100% klikken!


Steekproeven

Steekproeven worden bij veel werkzaamheden gebruikt; of het nu gaat om kwaliteitsonderzoek, control, accountancy: regelmatig is er behoefte om uit een voorraad gegevens een willekeurige steekproef te kunnen trekken.

Heb je een overzicht in Excel, dan is dat snel geregeld; voor een tabel in een Access-database is het wat ingewikkelder.

Excel

SteekproefAls voorbeeld nemen we een ‘SAP-bestand’: 2000 regels met boekingen in 2014 op vijf verschillende rekeningen.
De accountant komt langs en wil een willekeurige steekproef van 10 regels hebben om te kunnen controleren.

Met de volgende stappen is dit zo geregeld:

  1. Steekproefkopieer het SAP-werkblad (de tab onderaan ‘vastpakken’ met de muis en, terwijl je de Ctrl-toets vasthoudt, het tabblad verslepen)
  2. voeg in de kopie achter Bedrag een nieuw kopje toe: Aselect
  3. tik in de eerste cel daaronder de formule: =ASELECT()
    (denk aan de 2 haakjes op het einde; iedere functie in Excel dient vergezeld te gaan van een open- en sluit-haak).
    Deze functie genereert een willekeurig getal tussen 0 en 1.
  4. kopieer deze formule naar beneden, zodat alle regels een willekeurig getal krijgen toegewezen
  5. plaats de cursor ergens in de Aselect-kolom en sorteer: kies in de menubalk Gegevens en in het blok Sorteren en filterenSteekproef
  6. de steekproef staat klaar: de eerste 10 regels moeten worden gecontroleerd.

LET OP: nadat de sortering is uitgevoerd zal Excel alle cellen met de formule Aselect() opnieuw berekenen! Opnieuw sorteren levert dan weer een andere steekproef op.
Wil je dit voorkomen, dan moeten de willekeurige waarden ‘vast’ gezet worden vóór stap 5: selecteer alle cellen in kolom E, klik rechts, kies kopiëren en dan direct (dus op dezelfde plaats) weer rechts klikken en dan de 2e plakoptie kiezen (Waarden plakken).

LET OP2: er is een HEEEEL kleine kans, dat Aselect in deze serie één of meerdere keren precies hetzelfde getal genereert. Als dat ook nog net bij de 10e en 11e regel het geval is, klopt bovenstaande niet helemaal. Maar dat vergeten we maar even!

Access

Steekproef We starten in Access met hetzelfde SAP-bestand (nog wel even ontZIPpen!!).

Een mogelijke oplossing (vergelijkbaar met Excel) is nu om deze tabel (of beter: een kopie daarvan) uit te breiden met een veld Aselect en dit veld voor ieder record te vullen met een willekeurig getal met behulp van een bijwerk-query.

Het kan gelukkig korter en zonder iets aan te passen in het origineel:

  1. kies Maken/Queryontwerp
  2. voeg de tabel SAP aan het ontwerp toe
  3.  sleep de drie velden naar het ontwerp:
    Steekproef
  4. voeg een nieuw veld toe achter Bedrag:
    Aselect: Rnd()
    LET OP: in Access worden Engelstalige functies gebruikt
  5. kies linksboven de GegevensbladweergaveSteekproef
  6. waarschijnlijk is de vierde kolom niet leesbaar: maak die breder.
  7. Schrik: alle records hebben dezelfde willekeurige waarde!!!!

Waar Excel de functie Aselect() voor alle regels iedere keer opnieuw berekent, blijkt Access de Rnd()-functie één keer uit te rekenen en het resultaat in ieder record te gebruiken.

Dit is op te lossen door aan de functie Rnd() voor ieder record een (andere) parameter mee te geven. De meest eenvoudige oplossing is om tussen haakjes een NUMERIEK veld uit de betreffende tabel op te nemen.
Punt 4 wordt dan: Aselect: Rnd([Bedrag])

Nu krijgt ieder record een ander willekeurig getal mee en kunnen we, na sorteren op het veld Aselect, weer de eerste 10 records selecteren.

LET OP: ook hier zal NA de sortering de functie Rnd() opnieuw worden uitgevoerd en ziet de sortering er ‘vreemd’ uit.
Druk op F5 en Access zal opnieuw de sortering uitvoeren, andere records bovenaan zetten en dan weer alle Rnd()’s opnieuw uitrekenen.

Wanneer we in de query direct de sortering opgeven, dan hoeft dat niet meer handmatig te gebeuren:
Steekproef

Wanneer we, in combinatie met de sortering, ook nog de Top-eigenschap van de query vullen met de waarde 10 zijn we in één keer klaar:Steekproef

  1. klik rechts in het lege gebied naast de tabel en kies Eigenschappen
  2. tik in het Eigenschappenvenster bij Top-waarden 10 in
  3. kies linksboven de Gegevensbladweergave
  4. het resultaat is, dat je 10 willekeurige records krijgt te zien.
    Wil je andere records, druk op F5 en de query wordt vernieuwd.

De Rnd()-functie

De Rnd()-functie in Access (en ook in VBA) is uitgebreider in zijn mogelijkheden dan de tegenhanger, Aselect(), in Excel.
Om echt iedere keer andere, willekeurige getallen te krijgen, moet aan de functie Rnd() een positief getal meegegeven worden.

In het huidige voorbeeld (alle bedragen zijn  positief) voldoet de hierboven genoemde functie (Rnd([Bedrag]) prima, maar meestal kun je daar niet vanuit gaan.

Beter is het dan ook om er zeker van te zijn dat er een positief getal als parameter wordt doorgegeven: Rnd(Abs([Bedrag])+1)
Dus:

  1. zorg dat het bedrag groter dan (of gelijk is aan) nul: Abs zorgt er voor, dat een eventueel min-teken verdwijnt
  2. tel er 1 bij op, zodat nul ook niet meer voorkomt
  3. geef dit door aan Rnd en deze zal een nieuw, willekeurig getal opleveren!

LET OP: ook hier bestaat er een kleine kans, dat Rnd() een keer dezelfde getallen oplevert; als dit op de 10e en 11e plaats gebeurt, zal Access 11 records laten zien.


Nijntje Schuif 2.0

Deze keer een vreemde Excel-toepassing; het bekende schuifspelletje: NijnSchuifschuif vakjes op en neer net zolang totdat het oorspronkelijke plaatje tevoorschijn komt.

Net zo vreemd als de toepassing is ook de aanleiding: op een feestje, een paar weken geleden, kwam ik na lange tijd een vriend van een zoon van mij tegen en zoals het dan gaat begonnen we herinneringen op te halen.
We kregen het ook over onze gezamenlijke programmeer-activiteiten: meer dan 15 jaar terug hadden we als LKG-software (Ludo, Koen, Gijs) een website waar spelletjes konden worden gedownload. Deze hadden allemaal als thema het bekende Nijntje.
Eén van de spelletjes was het verschuiven van vierkantjes op het scherm, zodanig dat er een mooi plaatje ontstond (uiteraard met het Nijntje-figuur; vanuit royalty-problemen mogen we die helaas niet meer gebruiken, maar de naam Nijntje Schuif laten we nog voortleven!).

Het leek me wel een uitdaging om dit in Excel na te bouwen.
Nou, een uitdaging was het! Qua principe had ik een prototype snel aan de praat, maar om dit leuk met plaatjes te doen, dat viel nog niet mee.

Deze keer eerst een opzet waarbij het principe en de programmeersystematiek van het schuifspel duidelijk wordt; een volgende keer een mooiere uitvoering.

Nijntje Schuif 2.0

Nijntje SchuifDe basis voor deze eerste versie van de moderne uitvoering van Nijntje Schuif vormen de 16 cellen C4:F7.
Dit blokje cellen heeft de naam cNijn gekregen, zodat we daar binnen VBA makkelijk naar kunnen verwijzen.

Verder heb ik ook de cellen I7 en I8 een naam gegeven: cReset respectievelijk cNwRonde. Deze cellen gebruiken we om de cijfers direct in de juiste volgorde te zetten (een Reset dus) en om een nieuw spelletje te beginnen (de cijfers worden door elkaar gehutseld).
Om een VBA-routine (een macro) te starten wordt meestal een button gebruikt; deze keer gebruik ik daarvoor cellen. Wanneer op de cellen I7 of I8 geklikt wordt (of met de cursor deze cellen wordt geselecteerd) dan start de betreffende routine op.
Ditzelfde idee (reageren op het veranderen van de selectie in een werkblad) gebruiken we ook om cijfers in het vierkant te verplaatsen. Klik op een genummerde cel en het programma zal controleren of deze cel verwisseld kan worden met de lege.

De mogelijkheid om met behulp van VBA te reageren op een selectiewijziging kan uiteraard voor diverse doeleinden gebruikt worden.

 VBA-reactie bij wijziging van selectie

Nijn SchuifBelangrijk is dat een dergelijke routine (Sub Worksheet_SelectionChange) aan het betreffende werkblad wordt toegevoegd (in dit geval het tabblad Nijntje).

In het voorbeeld hierboven zal een Reset worden uitgevoerd, wanneer de cel die geselecteerd wordt (de Target) overeenkomt met de cel cReset.
Misschien wat vreemd geconstrueerd (als de overlap tussen Target en cReset niet leeg is), maar ik zie geen andere oplossing.

Op dezelfde manier wordt gecontroleerd of er een nieuwe speelronde moet worden opgestart (via de cel cNwRonde). In dat geval wordt een andere routine in de module NijnSchuif uitgevoerd, namelijk NieuweRonde.

‘Verplaatsen’ van een vierkantje

Op dezelfde manier testen we of één van de 16 vierkantjes van cNijn wordt geselecteerd:

Nijn SchuifAls dat zo is, dan leggen we de positie vast in intRij en intKolom en controleren dan eerst in de array/matrix Nijntje of de betreffende cel leeg is; zo ja dan moet die cel even rood gekleurd worden en verder niets.

Hopelijk is de uitleg in het voorbeeldbestand genoeg om de overige controles te begrijpen.

Variabelen declareren

In diverse routines worden variabelen gebruikt om tussenwaarden op te slaan, die voor de werking van de routine nodig zijn. Het is een goede gewoonte om deze vooraan in de routine te declareren met behulp van het statement Dim. Deze variabelen zijn dan alleen geldig in de betreffende routine.

Nijn Schuif

Voor de goede werking van ons NijntjeSchuif-programma is het echter ook nodig, dat sommige variabelen door alle routines kunnen worden gebruikt (bijvoorbeeld in welke rij staat de lege cel, intLegeCelRij).
Deze variabelen worden niet door Dim gedeclareerd, maar door Public ergens ‘buiten’ de routines; in dit geval in de module Algemeen.

Opstart-routine

Om ons spel te kunnen gebruiken is het van belang, dat diverse variabelen een waarde hebben. De routine Reset neemt dit allemaal voor zijn rekening.
Nijn SchuifOm zeker te weten, dat het spel meteen gespeeld kan worden (nadat een Nieuwe ronde is gekozen), zorgen we dat de reset-routine direct wordt uitgevoerd wanneer we de werkmap openen.
Dit gebeurt door in de subroutine Workbook_Open de reset-opdracht op te nemen.

LET OP: deze subroutine moet u altijd plaatsen in het speciale Excel-object ThisWorkbook.

De routine Workbook_Open is heel handig. U kunt er bijvoorbeeld voor zorgen, dat een bepaald tabblad altijd actief wordt bij het openen (Sheets(“Nijntje”).Select) of dat de eerste cel wordt geselecteerd (Range(“A1”).Select) of een combinatie.

Veel plezier met het spelen van Nijntje Schuif 2.0!

Zoals gezegd: volgende keer een fraaiere uitvoering; dus versie 2.1 komt er aan.


Tellen met voorwaarden

Het is weer de tijd van tennistoernooien.

Op het eerste gezicht lijkt er geen verband met Excel te bestaan, maar ook hier kan Excel ingezet worden.
Ik sprak iemand, die een toernooi had georganiseerd en ’s avonds nog snel de resultaten moest bepalen: “ik heb alle uitslagen met punten per wedstrijd in Excel staan, maar ik moet nu snel van iedereen afzonderlijk de punten bij elkaar hebben.”
In Excel kan dat makkelijk met Tellen met voorwaarden.

AANTAL.ALS

Tellen met voorwaardenDe eerste functie die we zullen bekijken is AANTAL.ALS().

Ik heb een Voorbeeldbestand gemaakt, dat iets ingewikkelder is dan het verwerken van de resultaten van een tennistoernooi.
Het is  een overzicht, waarin per maand en per regio de omzet van diverse vertegenwoordigers/agenten is opgenomen.
Wanneer we nu bijvoorbeeld willen weten hoe vaak een omzet van € 7.500 voorkomt (de omzet staat in de cellen E3:E202) dan kunnen we de volgende formule gebruiken: =AANTAL.ALS(E3:E202;7500).

Tellen met voorwaardenDe eerste parameter/argument van de functie is het bereik van de gegevens, waarvan u de aantallen wilt weten en het tweede argument is de voorwaarde waaraan ze moeten voldoen om mee te mogen tellen.
Door in te typen =AANTAL.ALS(B3:B202;”jan”) zien we dat er voor januari 22 keer een omzet is geregistreerd.

LET OP: als de voorwaarde een tekst is dan moeten er “ (aanhalingstekens) om de voorwaarde gezet worden.

Tellen met voorwaardenIn het voorbeeld hiernaast ziet u dat u op deze manier snel een jaaroverzicht kunt maken; op de plaats van de voorwaarde staat een verwijzing naar een cel, die de gewenste voorwaarde bevat.
Door in de cel I6 het bereik dmv de $-tekens absoluut te maken en de voorwaarde (G6) niet, kan deze formule direct naar beneden gekopieerd worden en hoeft dan in de andere cellen niet meer aangepast te worden.
Onze tennis-organisator zou een dergelijk overzicht dus ook voor de deelnemers aan het toernooi kunnen maken en Excel haalt de gewenste gegevens dan op.

Jokers

Zoals op veel meer plaatsen in Excel kunnen bij tekst-voorwaarden zogenaamde Jokers (wildcards) worden ingezet.
Tellen met voorwaardenHiernaast staan drie voorbeelden van het gebruik van het * (sterretje; dit joker-teken geeft aan, dat wat er vanaf die positie komt niet relevant is): in het eerste geval tellen we de aantallen van de maanden die beginnen met een ‘j’, in de tweede regel alle regio’s, die eindigen op een ‘d’ (Noord en Zuid dus) en als laatste alle regio’s, die eindigen op een ‘t’ (Oost en West).

Tellen met voorwaardenIn de praktijk komt het gebruik van een ander joker-teken (het vraagteken, ?) minder voor: waar het sterretje (*) een willekeurig aantal tekens vervangt, geeft het vraagteken aan, dat het niet relevant is wat er op die ene positie staat. In het voorbeeld zoeken we alle agenten, waar op de tweede plaats een ‘a’ staat.

Numerieke voorwaarden

Tellen met voorwaardenWanneer we een voorwaarde opgeven voor getallen dan is het niet alleen mogelijk om exacte getallen te zoeken (in het eerste voorbeeld hierboven moest de omzet exact gelijk zijn aan 7.500), maar ook vergelijkingen als kleiner dan (<), groter of gelijk aan (>=) zijn mogelijk.

SOM.ALS

In de voorgaande voorbeelden hebben we met behulp van AANTAL.ALS aantallen geteld. In Excel is het ook mogelijk om op een vergelijkbare manier getallen op te tellen (voor onze toernooi-directeur zeker zo interessant!).

Tellen met voorwaardenIn het voorbeeld hiernaast wordt door de formule =SOM.ALS(E3:E202;7500) alle omzet, die voldoet aan de voorwaarde, dat de omzet gelijk is aan 7.500, opgeteld. Aangezien we hiervoor hebben gezien dat dit in het voorbeeldbestand 4 keer voorkomt, is de som gelijk aan 30.000.

Tellen8De SOM.ALS-formule is echter nog krachtiger: het is mogelijk om een derde argument aan de functie mee te geven, het zogenaamde Optelbereik.

NB een dergelijk argument, dat niet altijd hoeft te worden ingevuld, wordt optioneel genoemd. Bij het intikken van een formule worden dergelijke parameters met []-haken aangeduid. Bij het scherm met Functieargumenten (ga naar een cel met een SOM.ALS-formule en klik op FunctieInvoeren), zijn optionele argumenten lichtgrijs.

Een uitbreiding van SOM.ALS is de functie SOMMEN.ALS. Misschien wat verwarrend: de volgorde van de argumenten is heel anders dan bij SOM.ALS.
Tellen met voorwaardenHet eerste argument van SOMMEN.ALS is het optelbereik, het tweede een criteriumbereik en het derde de voorwaarde. Op deze manier is de werking van deze functie exact gelijk aan SOM.ALS. De kracht van de uitgebreidere functie is, dat er meerdere voorwaarden als argument meegegeven kunnen worden.

Draaitabel

Veel van bovenstaande berekeningen kunnen veel makkelijker, sneller, flexibeler (bedenk nog maar een paar ander loftuitingen) met een draaitabel worden bepaald; zie het tabblad Draai in het Voorbeeldbestand.

Waar het aankomt op voorwaarden met Jokers of vergelijkingstekens (<, > etc) zijn bovenstaande formules echter een must-have (of must-know?).

Functie ToonFormule

In de voorbeelden is gebruik gemaakt van de Eigen Functie ToonFormule(). Andere voorbeelden van eigen functies zijn te vinden in het artikel G-Info en de functie G_Info().

Wilt u de functie ToonFormule gebruiken dan kunt u deze terugvinden in Module1 van de Visual Basic-omgeving (zie het artikel over VBA voor uitleg hierover). Kopieer de functie naar een Module in de VBA-omgeving van uw eigen spreadsheet.