# Voorraadbeheer in Google Spreadsheets

> Voorraad beheren in Google Spreadsheets met een mutatielogboek, werkende formules, lage-voorraadsignalen, beveiliging en geschiedenis, plus de limieten.

Source: https://www.lightinventory.com/nl/gidsen/voorraadbeheer-google-spreadsheets · Last updated: 2026-10-28

Je kunt je voorraad betrouwbaar bijhouden in Google Spreadsheets als je nooit een voorraadaantal overschrijft. Leg elke ontvangst, uitgifte, correctie en overboeking vast als nieuwe rij in een mutatielogboek, en laat formules berekenen wat er op voorraad is. Die ene ontwerpkeuze geeft je voorraad per locatie, signalen bij lage voorraad en een leesbare geschiedenis, allemaal met ingebouwde functies.

Deze gids behandelt de opzet van de spreadsheet, de formules, gegevensvalidatie, beveiliging, geschiedenis en de limieten van Google Spreadsheets die ertoe doen. Hij sluit af met een eerlijke blik op waar Google Spreadsheets alleen niet meer genoeg is.

## De spreadsheet opzetten

Gebruik één spreadsheet met drie tabbladen. Elk tabblad heeft één taak.

| Tabblad | Eén rij is | Je bewerkt het als |
|---|---|---|
| `Items` | Eén product of onderdeel | Je een artikel toevoegt of de gegevens ervan wijzigt |
| `Locations` | Eén magazijn, ruimte, schap of bus | Je een locatie toevoegt of hernoemt |
| `Movements` | Eén voorraadwijziging | Er iets binnenkomt, uitgaat of verplaatst wordt |

De tabbladnamen blijven hier Engels, omdat de formules verderop precies deze namen gebruiken. Hernoem je de tabbladen, pas de formules dan op dezelfde manier aan.

### Items

| Kolom | Kop | Voorbeeld | Opmerkingen |
|---|---|---|---|
| A | SKU | `BOLT-M8-40` | Uniek, nooit hergebruikt. Stel de kolom in als platte tekst |
| B | Naam | Zeskantbout M8 × 40 mm | |
| C | Eenheid | doos | De eenheid die elke mutatie gebruikt |
| D | Bestelpunt | 20 | Bereikt de voorraad dit niveau, bestel dan bij |
| E | Op voorraad | *(formule)* | Nooit met de hand ingevuld |
| F | Status | *(formule)* | `Reorder` of `OK` |

### Locations

| Kolom | Kop | Voorbeeld |
|---|---|---|
| A | Locatie | `WH1` |
| B | Naam | Hoofdmagazijn |

### Movements: het logboek

| Kolom | Kop | Voorbeeld | Opmerkingen |
|---|---|---|---|
| A | Datum | 2026-10-28 | Een echte datumwaarde, geen tekst |
| B | SKU | `BOLT-M8-40` | Dropdownmenu uit `Items` |
| C | Locatie | `WH1` | Dropdownmenu uit `Locations` |
| D | Aantal | `-5` | Positief verhoogt de voorraad, negatief verlaagt hem |
| E | Type | `Issue` | `Receive`, `Issue`, `Adjust` of `Transfer` |
| F | Referentie | PO-1042 | Inkooporder, opdracht of tellijst |
| G | Ingevoerd door | Sam | Wie de mutatie heeft vastgelegd |
| H | Notitie | Beschadigd tijdens transport | Waarom, als dat niet vanzelf spreekt |

Een overboeking bestaat uit twee rijen: `-5` op de bronlocatie en `+5` op de bestemming, allebei met type `Transfer` en dezelfde referentie. Een telling die 3 minder vindt dan verwacht, is één `Adjust`-rij met `-3`.

### Waarom een logboek waaraan je alleen toevoegt beter werkt dan een aantalkolom

De meest gebruikte voorraadspreadsheet heeft één kolom “Aantal” die mensen overschrijven. Dat werkt tot er iets misgaat, en dan kan de spreadsheet je niet vertellen wat er is gebeurd.

- **Een overschreven getal vertelt niets.** Wordt 40 ineens 25, dan zegt de spreadsheet niet of er 15 zijn verkocht, kwijtgeraakt of verkeerd geteld. Een logboekrij zegt `-15`, `Issue`, `JOB-311`, met een datum en een naam.
- **Twee mensen kunnen niet veilig één getal bewerken.** Pakken twee mensen elk 5 dozen en overschrijven ze allebei 40 met 35, dan raak je een mutatie kwijt. Twee toegevoegde rijen van `-5` tellen correct op.
- **Fouten herstel je door toe te voegen, niet door te wissen.** Een verkeerde rij corrigeer je met een tegengestelde rij, zodat de fout en de correctie allebei zichtbaar blijven.
- **De voorraad op elke datum is één formule verwijderd.** Tel de mutaties tot die datum op.
- **Voorraad per locatie krijg je er gratis bij.** Dezelfde rijen geven totalen per artikel, per locatie of allebei.

De regel voor iedereen die de spreadsheet gebruikt, is simpel: voeg rijen toe aan `Movements`, en bewerk of verwijder nooit oude rijen.

## Formules voor de actuele voorraad

Alle formules hieronder gaan uit van de indeling van tabbladen en kolommen hierboven, met koppen in rij 1.

> **Note:** De formules scheiden argumenten met komma's. Gebruikt je spreadsheet een landinstelling met een decimale komma, zoals Nederland, dan verwacht Google Spreadsheets puntkomma's: vervang de komma's tussen argumenten (niet in tekst tussen aanhalingstekens) door `;`.

### Voorraad per artikel

In `Items!E2`, en dan doorvoeren naar beneden:

```
=SUMIFS(Movements!$D:$D, Movements!$B:$B, $A2)
```

[SUMIFS](https://support.google.com/docs/answer/3238496?hl=nl) telt elk aantal in het logboek op waarvan de SKU overeenkomt met het artikel in die rij.

Wil je de hele kolom liever met één formule vullen, zet dan deze in `Items!E2` en laat de cellen eronder leeg:

```
=ARRAYFORMULA(IF(A2:A="", "", SUMIF(Movements!B:B, A2:A, Movements!D:D)))
```

### Voorraad per artikel en locatie

Voor één artikel op één locatie, bijvoorbeeld de locatie die in cel `H1` van `Items` staat:

```
=SUMIFS(Movements!$D:$D, Movements!$B:$B, $A2, Movements!$C:$C, $H$1)
```

Voor een volledige voorraadtabel op een eigen tabblad gebruik je [QUERY](https://support.google.com/docs/answer/3093343?hl=nl). Deze formule toont elke combinatie van artikel en locatie waarvoor mutaties bestaan:

```
=QUERY(Movements!A1:H, "select B, C, sum(D) where B is not null group by B, C label sum(D) 'On hand'", 1)
```

Deze maakt van de locaties kolommen, met één rij per artikel:

```
=QUERY(Movements!A1:H, "select B, sum(D) where B is not null group by B pivot C", 1)
```

> **Note:** QUERY verwacht één gegevenstype per kolom. Volgens de documentatie van Google bepaalt bij gemengde typen in een kolom het meest voorkomende gegevenstype het type van de kolom, en worden de andere waarden als leeg behandeld. Houd SKU's als platte tekst en datums als echte datums.

### Voorraad op een eerdere datum

Om te zien wat er aan het eind van een bepaalde dag op voorraad was, bijvoorbeeld de datum in `Items!H2`:

```
=SUMIFS(Movements!$D:$D, Movements!$B:$B, $A2, Movements!$A:$A, "<="&$H$2)
```

### Negatieve voorraad opsporen

Een locatie kan niet minder dan nul bevatten. Deze formule toont elke combinatie van artikel en locatie onder nul, wat meestal wijst op een ontbrekende ontvangst of een typefout:

```
=QUERY(QUERY(Movements!A1:H, "select B, C, sum(D) where B is not null group by B, C", 1), "select * where Col3 < 0", 1)
```

De binnenste QUERY berekent de totalen per locatie; de buitenste houdt alleen de negatieve rijen over. Een leeg resultaat betekent dat geen enkele locatie onder nul staat.

## Signalen bij lage voorraad en bestelpunten

### Een statuskolom

In `Items!F2`, en dan doorvoeren naar beneden:

```
=IF(D2="", "", IF(E2<=D2, "Reorder", "OK"))
```

De status blijft leeg als er geen bestelpunt is ingesteld, zodat nieuwe artikelen geen vals alarm geven.

### De rijen markeren die besteld moeten worden

1. Selecteer `A2:F` op het tabblad `Items`.
2. Klik op **Opmaak → Conditionele opmaak**.
3. Kies onder **Cellen opmaken als** de optie **Aangepaste formule is**.
4. Voer `=AND($D2<>"", $E2<=$D2)` in.
5. Kies een opvulkleur en klik op **Gereed**.

De dollartekens zetten de kolommen vast terwijl de rij verandert, zodat de hele rij kleurt. Google merkt op dat formules voor conditionele opmaak [alleen naar hetzelfde blad kunnen verwijzen](https://support.google.com/docs/answer/78413?hl=nl), tenzij je `INDIRECT` gebruikt. Daarom staan de voorraad en het bestelpunt naast elkaar op het tabblad `Items`.

Met dezelfde functie kun je logboekrijen markeren waarvan het teken niet past bij het type. Selecteer `A2:H` op `Movements` en gebruik:

```
=OR(AND($E2="Receive", $D2<0), AND($E2="Issue", $D2>0))
```

### De basis van een bestelpunt

Een bestelpunt beantwoordt één vraag: hoe laag mag de voorraad worden voordat je moet bestellen, zodat de nieuwe levering binnen is voordat je zonder zit? De basisformule is:

**Bestelpunt = gemiddeld dagverbruik × levertijd in dagen + veiligheidsvoorraad**

- **Gemiddeld dagverbruik** haal je uit je logboek.
- **Levertijd** is het aantal dagen tussen bestellen en de voorraad op het schap hebben.
- **Veiligheidsvoorraad** is de buffer voor trage leveringen of drukke weken.

Voeg drie hulpkolommen toe aan `Items`: G “Gem. dagverbruik (30 dagen)”, H “Levertijd (dagen)” en I “Veiligheidsvoorraad”. In `G2`:

```
=-SUMIFS(Movements!$D:$D, Movements!$B:$B, $A2, Movements!$E:$E, "Issue", Movements!$A:$A, ">="&(TODAY()-30))/30
```

Het minteken maakt van de negatieve `Issue`-aantallen een positief verbruik. Stel daarna het bestelpunt in `D2` in:

```
=ROUNDUP(G2*H2 + I2, 0)
```

Een voorbeeld: een artikel waarvan je 4 dozen per dag gebruikt, met een levertijd van 5 dagen en 10 dozen veiligheidsvoorraad, heeft een bestelpunt van 4 × 5 + 10 = 30. Bekijk levertijden en veiligheidsvoorraad opnieuw als leveranciers of seizoenen veranderen; de formule is maar zo goed als die twee invoerwaarden.

## Gegevensvalidatie en dropdownmenu's

Dropdownmenu's voorkomen de typefouten waar SUMIFS en QUERY op stuklopen: een SKU met een spatie aan het eind of een locatie die op twee manieren is geschreven, levert nooit een overeenkomst op.

### Een dropdownmenu uit een bereik toevoegen

1. Selecteer op `Movements` het bereik `B2:B`.
2. Klik op **Gegevens → Gegevensvalidatie → Regel toevoegen**.
3. Kies onder **Criteria** de optie **Dropdownmenu (van een bereik)** en voer `Items!A2:A` in.
4. Klik op **Gereed**.

Herhaal dit voor `C2:C` met `Locations!A2:A`. Kies voor `E2:E` de optie **Dropdownmenu** en voeg de items `Receive`, `Issue`, `Adjust` en `Transfer` toe. Google biedt ook **Invoegen → Dropdownmenu** en via de rechtermuisknop de optie **Dropdownmenu**; ze openen allemaal hetzelfde [deelvenster Regels voor gegevensvalidatie](https://support.google.com/docs/answer/186103?hl=nl).

### Weigeren of waarschuwen

Standaard weigert Google Spreadsheets een invoer die niet in de lijst staat. Wil je die toch toestaan met een waarschuwing, open dan **Geavanceerde opties** en selecteer onder **Als de gegevens ongeldig zijn, het volgende doen:** de optie **Een waarschuwing tonen**. Laat bij een voorraadlogboek het weigeren aan staan: een mutatie met een onbekende SKU is bijna altijd een fout.

Voeg ook een validatieregel toe op `D2:D` die alleen getallen accepteert, en op `A2:A` die alleen datums accepteert. Een aantal dat als tekst is ingevoerd, wordt door SUMIFS genegeerd, zodat de voorraad ongemerkt fout blijft.

## Bereiken beveiligen en zorgvuldig delen

Rechten in Google Spreadsheets hebben twee lagen, en allebei zijn ze belangrijk.

1. **Delen** bepaalt wie het bestand kan openen en of iemand Kijker, Reageerder of Bewerker is. Je stelt het in via **Delen**, en het geldt voor het hele bestand.
2. **Beveiligde bladen en bereiken** beperken wat bewerkers binnen het bestand kunnen wijzigen.

### Beveilig wat niemand mag overschrijven

1. Klik op **Gegevens → Bladen en bereiken beveiligen**.
2. Klik op **Een blad of bereik toevoegen**.
3. Kies **Bereik** en selecteer `Items!E2:F` (de formulekolommen).
4. Klik op **Rechten instellen**.
5. Selecteer **Beperken wie dit bereik kan bewerken**, kies **Alleen jij** en klik op **Klaar**.

Beveilig het hele tabblad `Locations` op dezelfde manier als de lijst zelden verandert. Op `Movements` moeten mensen rijen kunnen toevoegen, dus daar past een strikte beveiliging niet. Gebruik in plaats daarvan **Een waarschuwing weergeven wanneer dit bereik wordt bewerkt** op de bestaande rijen; dan moeten mensen bevestigen voordat ze de geschiedenis wijzigen.

Weet wat beveiliging niet doet. Google schrijft: [“Gebruik deze functionaliteit niet als beveiligingsmaatregel.”](https://support.google.com/docs/answer/1218656?hl=nl) en “Mensen kunnen kopieën van een beveiligde spreadsheet afdrukken, kopiëren en plakken, importeren en exporteren.” De eigenaar kan een beveiligd bereik altijd bewerken, en je kunt gegevens niet met een wachtwoord beveiligen. De stappen in detail vind je in [Een blad of bereik beveiligen](/nl/help/google-spreadsheets/bereiken-beveiligen).

### Deel met de kleinst mogelijke rol

- Geef **Kijker** aan mensen die alleen de voorraad hoeven op te zoeken.
- Geef **Bewerker** alleen aan mensen die mutaties vastleggen.
- In de deelinstellingen van Google kun je voorkomen dat bewerkers het bestand verder delen, zoals beschreven in [Bestanden delen vanuit Google Drive](https://support.google.com/drive/answer/2494822?hl=nl).

## Versiegeschiedenis en bewerkingsgeschiedenis van cellen

Google Spreadsheets houdt twee soorten geschiedenis bij: versies van het hele bestand en de bewerkingsgeschiedenis van één cel. [Je kunt de versiegeschiedenis niet zien](https://support.google.com/docs/answer/190843?hl=nl) zonder rechten om het bestand te bewerken.

### Versiegeschiedenis

Klik rechtsboven in de spreadsheet op **Laatste bewerking** om eerdere versies te zien. Kies een versie in het deelvenster rechts om te zien wie wat heeft gewijzigd. Standaard verbergt Google Spreadsheets ongewijzigde rijen; klik op **Ongewijzigde rijen tonen** om alles te zien.

Je kunt een versie herstellen of er een kopie van maken. Als je een versie van een spreadsheet herstelt, wordt de bewerkingsgeschiedenis per cel gewist voor wijzigingen van vóór het herstel. Voor een druk gebruikt voorraadbestand is een kopie dus meestal de veiligere keuze. Zie [Een eerdere versie herstellen](/nl/help/google-spreadsheets/versie-herstellen).

Je kunt tot 15 versies per spreadsheet een naam geven, en versies met een naam worden niet samengevoegd. Geef na elke telling een versie een naam, bijvoorbeeld “Telling 2026-10-31”, zodat je er altijd naar terug kunt.

### Bewerkingsgeschiedenis van een cel

Klik met de rechtermuisknop op een cel en kies **Bewerkingsgeschiedenis tonen** om te zien wie die cel heeft gewijzigd. Google noemt wijzigingen die daar mogelijk niet verschijnen:

- toegevoegde of verwijderde rijen en kolommen;
- wijzigingen in de celopmaak;
- wijzigingen van vóór het herstellen van een eerdere versie;
- wijzigingen door formules.

Dat laatste punt is belangrijk voor een spreadsheet die op formules draait: de cellen in de kolom “Op voorraad” veranderen via formules, dus hun bewerkingsgeschiedenis verklaart geen nieuw getal. De logboekrijen doen dat wel. Meer details vind je in [Zien wie een cel heeft gewijzigd](/nl/help/google-spreadsheets/wie-heeft-cel-gewijzigd).

### Meldingen bij wijzigingen

Klik op **Tools → Instellingen voor meldingen → Meldingen bewerken** om een e-mail te krijgen als anderen de spreadsheet wijzigen, direct of als dagelijks overzicht. Google merkt op dat [je alleen voor jezelf meldingen kunt instellen](https://support.google.com/docs/answer/91588?hl=nl).

## Limieten van Google Spreadsheets om rekening mee te houden

Dit zijn de limieten die Google documenteert, gecontroleerd op 28 oktober 2026. De volledige lijst, met wat je kunt doen als je in de buurt van een limiet komt, staat in [Limieten van Google Spreadsheets voor voorraadbeheer](/nl/help/google-spreadsheets/limieten).

| Limiet | Wat Google documenteert |
|---|---|
| Cellen per spreadsheet | Tot 20 miljoen cellen of 100 MB voor spreadsheets die in Google Spreadsheets zijn gemaakt of ernaar zijn geconverteerd ([bestandslimieten van Drive](https://support.google.com/drive/answer/37603?hl=nl)). Google verhoogde dit in september 2026 van 10 miljoen ([Workspace Updates](https://workspaceupdates.googleblog.com/2026/09/doubled-cell-limits-in-google-sheets-now-generally-available.html)) |
| Mensen die tegelijk bewerken | Een Google-bestand kan via maximaal 100 geopende tabbladen of apparaten tegelijk actief worden bewerkt ([limieten voor delen](https://support.google.com/drive/answer/2494822?hl=nl)) |
| Delen | Tot 600 afzonderlijke e-mailadressen per bestand ([limieten voor delen](https://support.google.com/drive/answer/2494822?hl=nl)) |
| Versies met een naam | Tot 15 per spreadsheet ([versiegeschiedenis](https://support.google.com/docs/answer/190843?hl=nl)) |
| IMPORTRANGE | Maximaal 10 MB ontvangen gegevens per verzoek; controleert elk uur op updates zolang het document open is ([IMPORTRANGE](https://support.google.com/docs/answer/3093340?hl=nl)) |

Een logboek groeit met één rij per mutatie. Bij 8 kolommen voegen 1.000 mutaties per maand 8.000 cellen per maand toe, ongeveer 96.000 per jaar. De meeste kleine teams halen de cellimiet nooit, maar grote bestanden worden al lang daarvoor traag. Archiveer afgesloten jaren in een apart bestand en neem het eindsaldo over als één `Adjust`-rij per artikel en locatie.

## Wanneer Google Spreadsheets alleen niet meer genoeg is

De opzet hierboven werkt goed voor een paar zorgvuldige mensen. Groeit het team, dan gaan deze gaten tijd of geld kosten.

- **Gelijktijdige bewerkingen.** Google Spreadsheets toont bewerkingen live, maar niets houdt twee mensen tegen die dezelfde rij wijzigen, of iemand die het logboek sorteert terwijl een ander typt. Niets controleert een wijziging voordat ze wordt doorgevoerd.
- **Geen goedkeuringen.** Elke bewerker kan een correctie van 500 stuks vastleggen of een bestelpunt wijzigen. Er is geen stap waarin een tweede persoon dat eerst beoordeelt.
- **Geschiedenis die lastig te controleren is.** Versiegeschiedenis wordt gegroepeerd en [revisies worden soms samengevoegd](https://support.google.com/docs/answer/190843?hl=nl). De bewerkingsgeschiedenis van cellen slaat formuleresultaten, ingevoegde en verwijderde rijen en opmaakwijzigingen over, en een herstel wist haar. De eigenaar van een bestand in een persoonlijk Google-account kan de versies zonder naam definitief verwijderen. Niets bewijst dat de geschiedenis die je ziet volledig is.
- **Per ongeluk overschrijven.** Eén keer plakken over het verkeerde bereik of te ver doorvoeren naar beneden, en honderden logboekrijen veranderen tegelijk. Versiegeschiedenis kan het herstellen, als iemand het opmerkt.
- **Rechten gelden per bestand.** Een bewerker kan elk tabblad en elke locatie bewerken, tenzij je met de hand beveiligingen instelt, en beveiliging is volgens Google zelf geen beveiligingsmaatregel. Je kunt niet zeggen: “Deze persoon legt alleen mutaties vast voor het magazijn Noord.”
- **Regels bestaan alleen in hoofden.** “Bewerk nooit oude rijen” en “vul altijd een referentie in” zijn afspraken. De spreadsheet dwingt ze niet af.

Klinkt dit bekend, dan heb je drie opties: het risico accepteren, overstappen op een apart voorraadsysteem, of de spreadsheet houden en er controle bovenop zetten.

## Hoe LightInventory controle toevoegt aan dezelfde spreadsheet

LightInventory is een voorraadapp die bovenop een Google-spreadsheet van jezelf draait. De app is in ontwikkeling en nog niet algemeen beschikbaar. Hij gebruikt dezelfde logboekopzet als deze gids en dwingt de regels hierboven af, in plaats van ze aan afspraken over te laten.

- **Je gegevens blijven in je spreadsheet.** Artikelen, locaties, mutaties en het wijzigingslogboek zijn tabbladen in je eigen spreadsheet. Stop je met LightInventory, dan houd je het bestand.
- **Elke wijziging wordt vastgelegd.** Elke wijziging wordt naar een tabblad `Log` geschreven, met wie hem deed, wanneer, de waarde ervoor en de waarde erna. Fouten worden hersteld met een compenserende regel, nooit door geschiedenis te wissen.
- **Geschiedenis waarin geknoei opvalt.** Een hashketen met geheime sleutel over het logboek, zonder je waarden, wordt buiten je bestand opgeslagen en extern verankerd, zodat een stiekem bewerkte of verwijderde logboekrij bij de controle opvalt. Zie de [audittrail](/nl/functies/audittrail).
- **Goedkeuringen.** Je kiest welke wijzigingen goedkeuring nodig hebben, bijvoorbeeld prijswijzigingen. De beoordelaar kan niet dezelfde persoon zijn als degene die de wijziging aanvroeg.
- **Rollen.** Eigenaar, Beheerder, Goedkeurder, Bewerker en Lezer, met een optionele beperking tot bepaalde locaties voor Bewerkers en Lezers. Teamleden werken in de app en worden niet aan het bestand toegevoegd, tenzij de eigenaar hun directe bewerkrechten geeft.
- **Detectie van directe bewerkingen.** Bewerkt iemand de spreadsheet rechtstreeks, dan merkt LightInventory de wijziging op en handelt die af volgens jouw beleid: blokkeren tot een eigenaar haar overneemt of de vorige stand herstelt, automatisch vastleggen, of doorsturen voor goedkeuring.

Er is een Free-abonnement voor 1 gebruiker en 1 spreadsheet. Team kost € 2,99 per gebruiker per maand bij maandelijkse facturering, of € 2,49 bij jaarlijkse facturering, exclusief belasting. De details staan bij [prijzen](/nl/prijzen), en hoe we met je gegevens en toegang omgaan, lees je bij [beveiliging](/nl/beveiliging).
