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.
Laatst bijgewerkt: 13 oktober 2026
| Rij | A | B |
|---|---|---|
| 1 | Factuurnummer | Willekeurige sleutel |
| 2 | 2025-1041 | 0.61830,6183=ASELECT()=ASELECT() |
| 3 | 2025-1042 | |
| 4 | 2025-1043 | |
| 5 | 2025-1044 | |
| 6 | 2025-1045 | |
| 7 | 2025-1046 |
Veeg opzij om alle kolommen te zien
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.
| Rij | A | B | C |
|---|---|---|---|
| 1 | Factuurnummer | Willekeurige sleutel | |
| 2 | 2025-1041 | 0.61830,6183=ASELECT()=ASELECT() | |
| 3 | 2025-1042 | ||
| 4 | 2025-1043 | ||
| 5 | 2025-1044 | ||
| 6 | 2025-1045 | ||
| 7 | 2025-1046 | ||
| 8 |
Veeg opzij om alle kolommen te zien
Formule in B2
=ASELECT()
=ASELECT()
Resultaat: 0.61830,6183Willekeurig: jouw uitkomst wijkt af
Stap voor stap
- ASELECT heeft geen argumenten, dus Excel gaat direct naar de trekking: één decimaal getal van minstens 0 en kleiner dan 1.
- Stel dat Excel 0,6183 trekt. Jouw blad toont een ander getal met meer decimalen, en dat hoort zo.
- Kopieer
B2naar beneden totB7. 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. - 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.
Selecteer
B2:B7, kopieer, plak als waarden op dezelfde cellen, en sorteerA1:B7oplopend 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)
- 0,0457 (
- De eerste drie rijen zijn de steekproef:
2025-1042,2025-1044en2025-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.
| Rij | A | B | C | D | E | F | G |
|---|---|---|---|---|---|---|---|
| 1 | Boekstuk | Omschrijving | Testbedrag | Laagste | €100.00€ 100,00 | ||
| 2 | TST-01 | Testregel, 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 | ||
| 3 | TST-02 | Testregel, huur kantoor | |||||
| 4 | TST-03 | Testregel, handmatige correctie | |||||
| 5 | TST-04 | Testregel, bankkosten | |||||
| 6 |
Veeg opzij om alle kolommen te zien
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
- 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.
- 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. - Het laagste bedrag erbij optellen verschuift het resultaat naar het bereik: 100 + 2,022.3772.022,377 = 2,122.3772.122,377.
- 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.
- Kopieer naar beneden; de
$-tekens zorgen ervoor dat elke rij naarF1enF2blijft 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). - Zet
F2op 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.
| Rij | A | B | C | D | E | F |
|---|---|---|---|---|---|---|
| 1 | Dagboek | Risicogewicht | Begint bij | Te toetsen dagboek | ||
| 2 | VRK | 30%30% | 0%0% | MEM=X.ZOEKEN(ASELECT(), C2:C5, A2:A5, "VRK", -1)=X.ZOEKEN(ASELECT(); C2:C5; A2:A5; "VRK"; -1) | ||
| 3 | INK | 20%20% | 30%30% | |||
| 4 | BNK | 10%10% | 50%50% | |||
| 5 | MEM | 40%40% | 60%60% | |||
| 6 |
Veeg opzij om alle kolommen te zien
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
- 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.
- X.ZOEKEN zoekt 0,62 in
C2:C5met 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 inC5, de vierde cel. - Het resultaat is de vierde cel van
A2:A5, dusA5:MEM. DeVRKbij indien_niet_gevonden wordt nooit gebruikt, omdatC20 is en ASELECT nooit onder 0 komt. Elke trekking van 0,6 tot net onder 1 komt uit op
MEM: dat stuk is 0,4 breed, dusMEMkomt 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%)
- trekkingen onder 0,3 geven
- Kopieer
E220 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.
| Rij | A | B | C | D | E |
|---|---|---|---|---|---|
| 1 | Factuurnummer | Bedrag | Gekozen factuur | ||
| 2 | 25-0412 | €12,500.00€ 12.500,00 | 25-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) ) | ||
| 3 | 25-0418 | €8,000.00€ 8.000,00 | |||
| 4 | 25-0431 | €21,500.00€ 21.500,00 | |||
| 5 | 25-0436 | €0.00€ 0,00 | |||
| 6 | 25-0447 | €11,000.00€ 11.000,00 | |||
| 7 | 25-0452 | €7,000.00€ 7.000,00 | |||
| 8 |
Veeg opzij om alle kolommen te zien
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
- 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.
- 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.
- 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.
- 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.
- Het eindpunt van factuur
25-0436, 42,00042.000, is gelijk aan dat van25-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 bij25-0412, die een bedrag heeft. - Controle van de kansen:
25-0431bezit 21,50021.500 van de 60,00060.000 eenheden, 21,50021.500 / 60,00060.000 = 35,8%;25-0412bezit 12,50012.500 / 60,00060.000 = 20,8%;25-0436bezit 0%. ZetD2vast 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-0452kan nooit worden gekozen (haar eindpunt, 60,00060.000, ligt nooit op of onder een trekking)25-0412komt 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
| Symptoom | Oorzaak | Oplossing |
|---|---|---|
| Waarden veranderen bij elke wijziging | De 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 10 | ASELECT() * 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 zegt | Een 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. |