Beschikbaar in:Alle versies (Werkt in Excel 2007, elke latere versie, Microsoft 365 en Excel voor het web)Voorbeelden vragen Excel 2024 of nieuwerCategorie:Wiskundig

ASELECT

RAND in Engelstalige Excel

Geeft een willekeurig decimaal getal dat minstens 0 en kleiner dan 1 is, en trekt bij elke herberekening van het blad een nieuw getal.

Moeilijkheidsgraad 1 van 5. ASELECT heeft geen argumenten; wat je leert is het resultaat van 0 tot 1 schalen naar je eigen bereik en waarden vastzetten, omdat het bij elke herberekening verandert.

Laatst bijgewerkt: 13 oktober 2026

Bekijk de uitgewerkte voorbeelden

Fragment van het werkblad: in B2 staat de formule
RijAB
1FactuurnummerWillekeurige sleutel
22025-10410.61830,6183=ASELECT()=ASELECT()
32025-1042
42025-1043
52025-1044
62025-1045
72025-1046
Formulecel (B2)Invoer

Resultaat: 0.61830,6183

=ASELECT()
=ASELECT()

Wat ASELECT doet en wanneer je het gebruikt

Wat het doet: het trekt een willekeurig decimaal getal van minstens 0 en altijd onder 1, bijvoorbeeld een willekeurige sleutel naast elke factuur om een steekproef te trekken.

Wanneer je het gebruikt: als grondstof voor alles wat willekeurig is: testgegevens, een ja of nee met een bepaalde kans, of een sorteersleutel die een lijst schudt. Voor hele getallen is ASELECTTUSSEN korter. Zodra een trekking telt, zet je haar vast met Plakken als waarden.

Hoe Excel de functie berekent

ASELECT heeft geen invoer, dus Excel trekt meteen: een decimaal getal van minstens 0 en kleiner dan 1. ASELECT is een vluchtige functie, dus de trekking gebeurt opnieuw zodra de werkmap herberekent:

  • als je ergens iets invoert
  • als je op F9 drukt
  • als je het bestand opent
  • als je sorteert of filtert

Elke ASELECT in de werkmap trekt onafhankelijk, en elke formule die ervan afhangt, wordt mee herberekend. Er is geen startwaarde: een trekking kan niet worden herhaald, alleen vastgezet.

Let op: De waarde wordt niet opgeslagen: ASELECT wordt bij elke herberekening opnieuw getrokken, dus zet een trekking vast (waarden plakken) voordat je erop vertrouwt.

Denkmodel

Een draaischijf met een schaal van 0 tot 1, die opnieuw wordt rondgedraaid zodra iemand het blad aanraakt; de naald kan op 0 stoppen, maar komt nooit helemaal bij 1.

Begrippen op deze pagina: vluchtige functie, werkmap

Syntaxis

ASELECT()
ASELECT()

Geeft terug:Een willekeurig decimaal getal, minstens 0 en kleiner dan 1

Formules gebruiken komma's (,) tussen de argumenten, zoals in de Engelse Excel. Formules gebruiken puntkomma's (;) tussen de argumenten, zoals in de Nederlandse Excel. Formules gebruiken puntkomma's (;) tussen de argumenten, zoals in de Nederlandse Excel; de Engelse Excel gebruikt komma's (,).

Uitgewerkte voorbeelden

Beginner

Willekeurige sleutels om een factuursteekproef te trekken

Je toetst zes verkoopfacturen uit de debiteurenadministratie en wilt er drie willekeurig kiezen, op een manier die je in het controledossier kunt vastleggen. Elke factuur krijgt een willekeurig getal ernaast; sorteren op dat getal zet de facturen in willekeurige volgorde, en de eerste drie vormen je steekproef. Je begint met de formule in B2.

Fragment van het werkblad: in B2 staat de formule
RijABC
1FactuurnummerWillekeurige sleutel
22025-10410.61830,6183=ASELECT()=ASELECT()
32025-1042
42025-1043
52025-1044
62025-1045
72025-1046
8
Formulecel (B2)Invoer

Formule in B2

=ASELECT()
=ASELECT()

Resultaat: 0.61830,6183Willekeurig: jouw uitkomst wijkt af

Stap voor stap
  1. ASELECT heeft geen argumenten, dus Excel gaat direct naar de trekking: één decimaal getal van minstens 0 en kleiner dan 1.
  2. Stel dat Excel 0,6183 trekt. Jouw blad toont een ander getal met meer decimalen, en dat hoort zo.
  3. Kopieer B2 naar beneden tot B7. Elke cel trekt zelfstandig, bijvoorbeeld 0,6183, 0,0457, 0,9312, 0,3870, 0,5524, 0,7741. Twee gelijke waarden zijn in theorie mogelijk, maar komen in de praktijk niet voor, omdat de getallen veel decimalen hebben.
  4. Druk op F9 of typ iets in een lege cel en alle zes de getallen veranderen. Dat is het vluchtige gedrag: elke herberekening is een nieuwe trekking.
  5. Selecteer B2:B7, kopieer, plak als waarden op dezelfde cellen, en sorteer A1:B7 oplopend op kolom B. Met de voorbeeldgetallen is de volgorde:

    • 0,0457 (2025-1042)
    • 0,3870 (2025-1044)
    • 0,5524 (2025-1045)
    • 0,6183 (2025-1041)
    • 0,7741 (2025-1046)
    • 0,9312 (2025-1043)
  6. De eerste drie rijen zijn de steekproef: 2025-1042, 2025-1044 en 2025-1045. Bewaar de vastgezette sleutels in het controledossier als bewijs van hoe de steekproef is getrokken.

Let op: Sorteer je met actieve formules in kolom B, dan veranderen de getallen na het sorteren en lijkt het blad ongesorteerd. De steekproef die je kreeg is nog steeds willekeurig, maar niemand kan haar achteraf reproduceren of beoordelen.

Meer over dit voorbeeld: waarom het werkt, 1 variant

Waarom het werkt

Elke factuur krijgt een getal uit dezelfde gelijkmatige trekking, dus elke volgorde van de zes is even waarschijnlijk als je erop sorteert, en dat geldt ook voor elke groep van drie bovenaan. Vastzetten vóór het sorteren is belangrijk: sorteren zelf start een herberekening, en actieve ASELECT-sleutels zouden tijdens het sorteren opnieuw schudden.

Varianten

=ASELECT.MATRIX(6)
=ASELECT.MATRIX(6)

Vult B2:B7 vanuit één formule door overloop. Alleen Excel 2021 of Microsoft 365; zet het resultaat op dezelfde manier vast.

Halfgevorderd

Willekeurige testbedragen tussen twee grenzen

Voordat je een script voor journaalpostentest laat lopen op de echte XAF-auditfile van de klant, controleer je het op een testbestand met fictieve journaalregels. De bedragen moeten tussen 100 en 5,0005.000 euro liggen, in hele centen, zodat je ziet of de toetsen op ronde bedragen en drempels reageren zoals bedoeld. De grenzen staan in F1 en F2 zodat je ze kunt wijzigen, en de formule wordt langs de testregels naar beneden gekopieerd.

Fragment van het werkblad: in C2 staat de formule
RijABCDEFG
1BoekstukOmschrijvingTestbedragLaagste€100.00€ 100,00
2TST-01Testregel, betaling leverancier€2,122.38€ 2.122,38=AFRONDEN($F$1 + ($F$2 - $F$1) * ASELECT(), 2)=AFRONDEN($F$1 + ($F$2 - $F$1) * ASELECT(); 2)Hoogste€5,000.00€ 5.000,00
3TST-02Testregel, huur kantoor
4TST-03Testregel, handmatige correctie
5TST-04Testregel, bankkosten
6
Formulecel (C2)Invoer

Formule in C2

=AFRONDEN($F$1 + ($F$2 - $F$1) * ASELECT(), 2)
=AFRONDEN($F$1 + ($F$2 - $F$1) * ASELECT(); 2)

Resultaat: €2,122.38€ 2.122,38Willekeurig: jouw uitkomst wijkt af

Stap voor stap
  1. Excel werkt van binnen naar buiten. ASELECT() trekt een decimaal getal van 0 tot 1. Stel dat ASELECT 0,41273 trekt; bij jou is het een ander getal.
  2. De breedte van het interval is $F$2 - $F$1 = 5,0005.000 - 100 = 4,9004.900. Vermenigvuldigen geeft 4,9004.900 × 0,41273 = 2,022.3772.022,377: hoe ver boven het laagste bedrag deze trekking uitkomt.
  3. Het laagste bedrag erbij optellen verschuift het resultaat naar het bereik: 100 + 2,022.3772.022,377 = 2,122.3772.122,377.
  4. AFRONDEN(2,122.3772.122,377; 2) maakt er hele centen van: 2,122.382.122,38. Zonder AFRONDEN zou de cel 2,122.3772.122,377 bevatten en zou het testbestand bedragen met delen van centen bevatten die geen enkele journaalregel heeft.
  5. Kopieer naar beneden; de $-tekens zorgen ervoor dat elke rij naar F1 en F2 blijft verwijzen. Elk resultaat ligt van 100,00 tot en met 5,000.005.000,00. ASELECT komt nooit bij 1, dus zonder AFRONDEN is 5,0005.000 zelf onmogelijk; met AFRONDEN verschijnt 5,000.005.000,00 alleen als ASELECT boven ongeveer 0,999999 ligt (4,899.9954.899,995 / 4,9004.900 = 0,99999898).
  6. Zet F2 op 10,00010.000 en dezelfde trekking van 0,41273 zou 100 + 9,9009.900 × 0,41273 = 100 + 4,086.0274.086,027 = 4,186.0274.186,027 geven, afgerond 4,186.034.186,03.

Let op: Schrijf je per ongeluk F2 * ASELECT() + F1, dan lopen de bedragen van 100 tot 5,1005.100: de breedte is het hoogste bedrag in plaats van het verschil. Er verschijnt geen fout; de bovenkant van het bereik is stilletjes te hoog, en een drempeltoets bij 5,0005.000 ziet bedragen die er niet zouden mogen zijn.

Meer over dit voorbeeld: waarom het werkt, nog 1 valkuil, 1 variant

Waarom het werkt

min + (max - min) × ASELECT() rekt het interval 0 tot 1 op tot de breedte die je nodig hebt en schuift het zo dat het bij jouw minimum begint, waarbij elke waarde even waarschijnlijk blijft. AFRONDEN is de ene hulpfunctie: die maakt van een doorlopende trekking hele centen, en door de vastgezette grenzen past één wijziging in F1 of F2 de hele kolom aan.

Meer om op te letten

  • Willekeurige bedragen komen zelden op ronde getallen uit. Om te testen of je controle op ronde bedragen werkt, voeg je met de hand enkele regels met vaste bedragen toe, zoals 1,000.001.000,00.

Varianten

=ASELECTTUSSEN($F$1 * 100, $F$2 * 100) / 100
=ASELECTTUSSEN($F$1 * 100; $F$2 * 100) / 100

Trekt direct hele centen, van 10,00010.000 tot en met 500,000500.000, en deelt door 100. Zowel 100,00 als 5,000.005.000,00 zijn even waarschijnlijk als elk ander bedrag.

GevorderdExcel 2021 of nieuwer (Dit voorbeeld vereist Excel 2021 of nieuwer)

Het volgende dagboek om te toetsen trekken naar risicogewicht

Bij de journaalpostentest wil je kiezen welk dagboek je als volgende onderzoekt, met meer gewicht voor de dagboeken met een hoger risico:

  • MEM (handmatige boekingen): 40%
  • VRK: 30%
  • INK: 20%
  • BNK: 10%

Elke trekking moet in 40% van de gevallen op MEM uitkomen, in 30% op VRK, enzovoort. Kolom C bevat waar het aandeel van elk dagboek begint op de schaal van 0 tot 1.

Fragment van het werkblad: in E2 staat de formule
RijABCDEF
1DagboekRisicogewichtBegint bijTe toetsen dagboek
2VRK30%30%0%0%MEM=X.ZOEKEN(ASELECT(), C2:C5, A2:A5, "VRK", -1)=X.ZOEKEN(ASELECT(); C2:C5; A2:A5; "VRK"; -1)
3INK20%20%30%30%
4BNK10%10%50%50%
5MEM40%40%60%60%
6
Formulecel (E2)InvoerOpmerking: Elke waarde in C is de som van de gewichten erboven: 0, 30%, 30% + 20% = 50%, 50% + 10% = 60%.

Formule in E2

=X.ZOEKEN(ASELECT(), C2:C5, A2:A5, "VRK", -1)
=X.ZOEKEN(ASELECT(); C2:C5; A2:A5; "VRK"; -1)

Resultaat: MEMWillekeurig: jouw uitkomst wijkt af

Stap voor stap
  1. Excel berekent eerst de binnenste functie. ASELECT() trekt een decimaal getal van 0 tot 1. Stel dat ASELECT 0,62 trekt; bij jou is het een ander getal.
  2. X.ZOEKEN zoekt 0,62 in C2:C5 met overeenkomstmodus -1: een exacte overeenkomst, en anders de eerstvolgende kleinere waarde. 0,62 staat niet in de lijst, dus X.ZOEKEN neemt het grootste beginpunt op of onder de trekking: 0,6 in C5, de vierde cel.
  3. Het resultaat is de vierde cel van A2:A5, dus A5: MEM. De VRK bij indien_niet_gevonden wordt nooit gebruikt, omdat C2 0 is en ASELECT nooit onder 0 komt.
  4. Elke trekking van 0,6 tot net onder 1 komt uit op MEM: dat stuk is 0,4 breed, dus MEM komt in 40% van de gevallen voor. De rest van de schaal:

    • trekkingen onder 0,3 geven VRK (30%)
    • trekkingen van 0,3 tot 0,5 geven INK (20%)
    • trekkingen van 0,5 tot 0,6 geven BNK (10%)
  5. Kopieer E2 20 rijen naar beneden voor 20 trekkingen. Druk op F9 en er verschijnt een nieuwe reeks; over veel trekkingen komt het aandeel van elk dagboek dicht bij de gewichten in kolom B. Zet de trekkingen die je gebruikt vast en voeg ze toe aan het controledossier.

Let op: Bevat kolom C waar elk dagboek eindigt (0,3, 0,5, 0,6, 1) in plaats van waar het begint, dan geeft dezelfde formule nog steeds geloofwaardige codes, maar elke uitkomst schuift één rij op en MEM kan alleen voorkomen als ASELECT precies 1 is, wat nooit gebeurt.

Meer over dit voorbeeld: waarom het werkt, nog 1 valkuil, 1 variant

Waarom het werkt

De beginpunten in kolom C verdelen het interval van 0 tot 1 in stukken waarvan de breedte gelijk is aan de gewichten. Een gelijkmatige trekking valt in elk stuk precies zo vaak als dat stuk breed is, en X.ZOEKEN met overeenkomstmodus -1 vindt in welk stuk ze viel. De tabel hoeft voor X.ZOEKEN niet gesorteerd te zijn, maar de beginpunten moeten juiste sommen zijn.

Meer om op te letten

  • Tellen de gewichten in B niet op tot 100%, dan vangt het laatste dagboek het verschil stilletjes op. Controleer met SOM(B2:B5).

Varianten

=INDEX(A2:A5, VERGELIJKEN(ASELECT(), C2:C5, 1))
=INDEX(A2:A5; VERGELIJKEN(ASELECT(); C2:C5; 1))

Dezelfde trekking voor versies zonder X.ZOEKEN. VERGELIJKEN met 1 vraagt een oplopend gesorteerde kolom C, en een kolom met opgetelde beginpunten is dat altijd.

ExpertExcel 2024 of nieuwer (Dit voorbeeld vereist Excel 2024 of nieuwer)

Naar bedrag gewogen factuurselectie uit de debiteuren

Voor een steekproef op geldeenheden (monetary unit sampling) over de debiteurenlijst wordt één factuur getrokken met een kans die evenredig is met het bedrag: elke euro van de lijst is een eenheid die geraakt kan worden. Eén factuur is een afgewikkelde post van 0 euro en mag nooit worden gekozen, ook niet in het zeldzame geval dat ASELECT precies 0 teruggeeft. De formule bouwt zelf de lopende totalen op, trekt één keer en zoekt de gekozen factuur op, allemaal binnen LET.

Fragment van het werkblad: in D2 staat de formule
RijABCDE
1FactuurnummerBedragGekozen factuur
225-0412€12,500.00€ 12.500,0025-0431=LET( facturen, A2:A7, bedragen, B2:B7, eindstanden, SCAN(0, bedragen, LAMBDA(stand, bedrag, stand + bedrag)), trekking, ASELECT() * SOM(bedragen), X.ZOEKEN(WAAR, eindstanden > trekking, facturen) )=LET( facturen; A2:A7; bedragen; B2:B7; eindstanden; SCAN(0; bedragen; LAMBDA(stand; bedrag; stand + bedrag)); trekking; ASELECT() * SOM(bedragen); X.ZOEKEN(WAAR; eindstanden > trekking; facturen) )
325-0418€8,000.00€ 8.000,00
425-0431€21,500.00€ 21.500,00
525-0436€0.00€ 0,00
625-0447€11,000.00€ 11.000,00
725-0452€7,000.00€ 7.000,00
8
Formulecel (D2)Invoer

Formule in D2

=LET(
  facturen, A2:A7,
  bedragen, B2:B7,
  eindstanden, SCAN(0, bedragen, LAMBDA(stand, bedrag, stand + bedrag)),
  trekking, ASELECT() * SOM(bedragen),
  X.ZOEKEN(WAAR, eindstanden > trekking, facturen)
)
=LET(
  facturen; A2:A7;
  bedragen; B2:B7;
  eindstanden; SCAN(0; bedragen; LAMBDA(stand; bedrag; stand + bedrag));
  trekking; ASELECT() * SOM(bedragen);
  X.ZOEKEN(WAAR; eindstanden > trekking; facturen)
)

Resultaat: 25-0431Willekeurig: jouw uitkomst wijkt af

Stap voor stap
  1. LET geeft de bereiken een naam. eindstanden is SCAN met een lopend totaal: 12,50012.500, 12,50012.500 + 8,0008.000 = 20,50020.500, 20,50020.500 + 21,50021.500 = 42,00042.000, 42,00042.000 + 0 = 42,00042.000, 42,00042.000 + 11,00011.000 = 53,00053.000, 53,00053.000 + 7,0007.000 = 60,00060.000. Elke factuur bezit het stuk van het vorige eindpunt tot het eigen eindpunt.
  2. trekking is ASELECT() × SOM(bedragen) = ASELECT() × 60,00060.000, een getal van minstens 0 en kleiner dan 60,00060.000. Stel dat ASELECT 0,5381 trekt; dan is trekking 0,5381 × 60,00060.000 = 32,28632.286. LET berekent trekking één keer, dus de hele formule gebruikt dezelfde trekking.
  3. eindstanden > trekking vergelijkt elk eindpunt met 32,28632.286: {ONWAAR; ONWAAR; WAAR; WAAR; WAAR; WAAR}. 12,50012.500 en 20,50020.500 liggen er niet boven; 42,00042.000 wel.
  4. X.ZOEKEN(WAAR; ...; facturen) geeft het factuurnummer bij de eerste WAAR, de derde positie: 25-0431, waarvan het stuk loopt van 20,50020.500 tot 42,00042.000. Bij jou komt er een andere trekking uit.
  5. Het eindpunt van factuur 25-0436, 42,00042.000, is gelijk aan dat van 25-0431, dus elke trekking die haar eindpunt WAAR maakt, heeft het vorige al één positie eerder WAAR gemaakt. De strikte > vangt ook het geval op dat ASELECT precies 0 oplevert: trekking 0 geeft de eerste WAAR bij 25-0412, die een bedrag heeft.
  6. Controle van de kansen: 25-0431 bezit 21,50021.500 van de 60,00060.000 eenheden, 21,50021.500 / 60,00060.000 = 35,8%; 25-0412 bezit 12,50012.500 / 60,00060.000 = 20,8%; 25-0436 bezit 0%. Zet D2 vast met waarden plakken zodra de selectie is gemaakt.

Let op: De omgekeerde fout is de trekking opzoeken met overeenkomstmodus -1 op de eindpunten (het eerstvolgende kleinere eindpunt). Voor 32,28632.286 geeft dat de factuur met eindpunt 20,50020.500, 25-0418. Elke selectie schuift één positie op:

Meer over dit voorbeeld: waarom het werkt, nog 3 valkuilen, 1 variant

Waarom het werkt

Eén ASELECT schalen naar het totaal van de lijst en het eerste lopende totaal daarboven zoeken geeft elke factuur een deel van de schaal gelijk aan het bedrag, dus de kans is precies evenredig. De strikte vergelijking maakt een factuur van 0 euro onbereikbaar, omdat het stuk geen breedte heeft. LET garandeert één trekking; twee keer ASELECT() schrijven zou tegen twee verschillende getallen vergelijken.

Gebruik deze opbouw niet als de selectie door een beoordelaar opnieuw uitgevoerd moet kunnen worden: ASELECT heeft geen startwaarde en het resultaat verandert bij de volgende herberekening. Het alternatief is één keer te trekken in een aparte cel, die als waarde te plakken met de datum en je paraaf erbij, en de formule naar die cel te laten wijzen in plaats van naar ASELECT(); dat kost een handmatige stap, maar laat bewijs achter.

Een volledige steekproef op geldeenheden met een vast interval en een willekeurige start is een ander ontwerp; deze formule trekt één post per keer.

Let op

  • De omgekeerde fout is de trekking opzoeken met overeenkomstmodus -1 op de eindpunten (het eerstvolgende kleinere eindpunt). Voor 32,28632.286 geeft dat de factuur met eindpunt 20,50020.500, 25-0418. Elke selectie schuift één positie op:

    • 25-0452 kan nooit worden gekozen (haar eindpunt, 60,00060.000, ligt nooit op of onder een trekking)
    • 25-0412 komt alleen terug voor trekkingen van 12,50012.500 tot 20,50020.500
    • elke trekking onder 12,50012.500 (ongeveer 21% van de trekkingen) heeft helemaal geen kleiner eindpunt en geeft #N/B

    De overige trekkingen zien er nog steeds uit als een eerlijke trekking.

  • Gebruik je >= in plaats van >, dan kiest een trekking die precies op 42,00042.000 valt 25-0431 op het eindpunt in plaats van 25-0447 op het beginpunt; met decimalen is dat zeldzaam, maar als je ASELECT() vervangt door een heel getal gebeurt het vaak.
  • Elke bewerking in de werkmap trekt een nieuwe factuur. Leg alleen een vastgezette waarde vast.

Varianten

=INDEX(A2:A7, ASELECTTUSSEN(1, RIJEN(A2:A7)))
=INDEX(A2:A7; ASELECTTUSSEN(1; RIJEN(A2:A7)))

Een ongewogen trekking: elke factuur heeft dezelfde kans, ook de factuur van 0 euro 25-0436. Gebruik deze vorm alleen als het bedrag er niet toe doet.

Veelgemaakte fouten

Veelgemaakte fouten
SymptoomOorzaakOplossing
Waarden veranderen bij elke wijzigingDe willekeurige testbedragen veranderen elke keer dat je in het blad typt, en de controles van gisteren kloppen niet meer.Zodra de waarden definitief zijn, kopieer je ze en plak je ze als waarden over zichzelf heen.
Waarden als 0,37 en nooit 10ASELECT() * 10 moet een getal van 1 tot en met 10 opleveren, maar je ziet waarden als 0,37 en nooit 10.Met * 10 rek je het interval van 0 tot 1 op tot 0 tot 10, en 10 zelf bereik je nooit. Voor hele getallen van 1 tot en met 10 gebruik je ASELECTTUSSEN(1; 10); voor decimalen van 1 tot 10 gebruik je 1 + 9 * ASELECT().
Uitkomst wijkt af van wat de test zegtEen formule gebruikt ASELECT() twee keer, bijvoorbeeld ALS(ASELECT() < 0,5; ASELECT(); 0), en het resultaat is niet wat de test beloofde.Elke ASELECT() is een aparte trekking. Trek één keer in een cel of een LET-variabele en verwijs daarnaar.