Monthly Archives: September 2025

Gegevens ophalen en transponeren

Stel, je gegevens staan van links naar rechts, Oftewel horizontaal. Door middel van een dropdown en wat formules kun je specifieke gegevens ophalen en verticaal weergeven.

[A9] = Gegevens | Gegevensvalidatie | Gegevensvalidatie | Toestaan: Lijst | Bron: =$A$2:$A$7

[A10]=IFERROR(INDEX(Sheet1!$B$1:$J$1;SMALL(IF(1-(INDEX(Sheet1!$B$2:$J$7;MATCH($A$9;Sheet1!$A$2:$A$7;0);0)=""); COLUMN(Sheet1!$B$1:$J$1)-COLUMN(Sheet1!$B$1)+1);ROWS(A10:A$10)));"")
[B10]=IFERROR(INDEX(Sheet1!$B$2:$J$7;MATCH($A$9;Sheet1!$A$2:$A$7;0);SMALL(IF(1-(INDEX(Sheet1!$B$2:$J$7;MATCH($A$9;Sheet1!$A$2:$A$7;0);0)="");COLUMN(Sheet1!$B$1:$J$1)-COLUMN(Sheet1!$B$1)+1);ROWS(A$10:A10)));"")

Beide formules invoeren met Ctrl+Shift+Enter

Unieke waarden vinden in 2 kolommen

Twee kolommen doorzoeken op dubbele waarden en op NIET dubbele waarden.
Gegevens staan in kolom A en kolom B. In kolom C, D en E staan de resultaten.

Dit kan met de volgende formules

Formule voor NIET dubbele waarden:

=IFERROR(INDEX($B$2:$B$20;SMALL(IF(1-ISNUMBER(MATCH($B$2:$B$20;$A$2:$A$20;0)); ROW($B$2:$B$20)-ROW($B$2)+1);ROWS($C$2:C2)));"")

Let op ! ! ! Deze formule invoeren met Ctrl+Shift+Enter, dus NIET gewoon Enter. Vervolgens doorvoeren naar beneden.

Formule voor dubbele waarden:
Deze formule invoeren met Enter. Vervolgens doorvoeren naar beneden.

=IF(ISERROR(MATCH(A2;$B$2:$B$20;0));"";A2)

Formule voor NIET dubbele waarden EN de POSITIE:
Deze formule invoeren met Enter. Vervolgens doorvoeren naar beneden.

=IF(ISERROR(MATCH(A2;$B$2:$B$20;0));B2;"")

Dubbele waarden (alweer ! ! !)

De opdracht is simpel. Dubbele waarden in het bereik A2:L8 opsporen en weergeven in kolom N.

Formule in N2.

=ALS.FOUT(KLEINSTE(ALS($A$2:$L$8<>"";ALS(AANTAL.ALS($A$2:$L$8;$A$2:$L$8)>1;$A$2:$L$8));
SOM(AANTAL.ALS($A$2:$L$8;N$1:N1))+1);"")

Invoeren met Ctrl+Shift+Enter. Niet alleen met Enter. Indien je dit correct doet, plaatst Excel accolades om de formule { }
Let op ! ! ! Plaats die accolades niet zelf.

Vervolgens doorvoeren tot N8

Gegevens ophalen d.m.v. keuzelijst

Gegevens in bereik: A5:F96

Keuzelijst in A2: Gegevens | Gegevensvalidatie | Gegevensvalidatie | Toestaan: Lijst | Bron: =$A$6:$A$96

Formule in B2:

=IFERROR(INDEX(B$6:B$96;SMALL(IF(ISNUMBER(MATCH($A$6:$A$96;$A$2;0));ROW($A$6:$A$96)-ROW($A$6)+1);ROWS($A$6:B6)));"")

Invoeren met Ctrl+Shift+Enter. Niet alleen met Enter. Indien je dit correct doet, plaatst Excel accolades om de formule { }
Let op ! ! ! Plaats die accolades niet zelf.

Vervolgens doorvoeren tot F2

Deze formule is ook mogelijk

=INDEX($B$6:$F$96;MATCH($A2;$A$6:$A$96;0);COLUMNS($B$2:B2))

Datumbereik splitsen in 1 dag per rij

Je gegevens staan in het blauwe gedeelte en de twee velden, Start en Stop, bevatten een datumbereik. Nu wil je voor elke dag in het datumbereik een nieuwe rij creëren (het oranje gedeelte).

Zie het voorbeeld in de afbeelding.

1. Kopieer de onderstaande code
2. Open een nieuwe werkmap
3. Druk op de toetscombinatie ALT + F11 om de Visual Basic Editor te openen
4. Druk op de toetscombinatie ALT + N om het menu Invoegen te openen
5. Druk op M om een standaard module in te voegen
6. Daar waar de cursor knippert voeg je de code in middels Ctrl + V
7. Druk op de toetscombinatie ALT + Q om de Editor af te sluiten en terug te keren naar Excel
8. Druk op de toetscombinatie ALT + F8 om de Macro Dialoog te tonen. Dubbeklik op de macro naam om te starten.

Option Explicit
Sub Een_Dag_Per_Rij()
Dim varData As Variant, varSplitData As Variant
Dim lngRijen As Long, lngRijTotaal As Long, x As Long
Dim y As Long, lngRij As Long, lngRijMax As Long

varData = Range("A2", Range("A" & Rows.Count).End(xlUp)).Resize(, 6).Value
lngRijen = UBound(varData, 1)

For lngRij = 1 To lngRijen
    varData(lngRij, 6) = varData(lngRij, 5) - varData(lngRij, 4) + 1
    lngRijMax = lngRijMax + varData(lngRij, 6)
Next lngRij

If lngRijMax < Rows.Count Then
    ReDim varSplitData(1 To lngRijMax, 1 To 4)
    lngRijTotaal = 1
    
    For lngRij = 1 To lngRijen
        
        For x = 0 To varData(lngRij, 6) - 1
            
            For y = 1 To 3
                varSplitData(lngRijTotaal + x, y) = varData(lngRij, y)
            Next y
            varSplitData(lngRijTotaal + x, 4) = varData(lngRij, 4) + x
        
        Next x
        lngRijTotaal = lngRijTotaal + varData(lngRij, 6)
    
    Next lngRij
    
    Range("G2").Resize(lngRijMax, 4).Value = varSplitData
    Range("G1:J1").Value = Array("Id", "Naam", "Afwezigheidscode", "Datum")
Else
    MsgBox "Te veel rijen"
End If
End Sub

Gegevens in één kolom in rijen plaatsen

Soms staan je gegevens op een ongelukkige manier gerangschikt in slechts één kolom. Dus vertikaal. Er zit wél regelmaat in. Bijvoorbeeld telkens 6 rijen gegevens die bij elkaar horen. Je kunt die gegevens eenvoudig verdelen zodat ze in rijen (horizontaal) komen te staan.

Zie afbeeldingen ter illustratie.
VOOR:

NA:

1. Kopieer de onderstaande code
2. Open een nieuwe werkmap
3. Druk op de toetscombinatie ALT + F11 om de Visual Basic Editor te openen
4. Druk op de toetscombinatie ALT + N om het menu Invoegen te openen
5. Druk op M om een standaard module in te voegen
6. Daar waar de cursor knippert voeg je de code in middels Ctrl + V
7. Druk op de toetscombinatie ALT + Q om de Editor af te sluiten en terug te keren naar Excel
8. Formule invoegen in bijvoorbeeld [C1] =SplitText($A1; COLUMN()-2) en naar rechts doorvoeren.

Function SplitText(ByVal Cell As Range, ByVal LineNumber As Integer) As String
    Dim Lines As Variant
    Lines = Split(Cell.Value, Chr(10))
    If LineNumber - 1 <= UBound(Lines) Then
        SplitText = Lines(LineNumber - 1)
    Else
        SplitText = ""
    End If
End Function
Formule invoegen in bijvoorbeeld [C1] =SplitText($A1; COLUMN()-2)
en naar rechts doorvoeren

Getallen uit tekenreeks halen

Hoe haal je het numerieke gedeelte op uit een alfanumerieke tekenreeks?
Bijvoorbeeld: als cel A3 de tekenreeks esd K+ WS4600 bevat, moet de waarde 4600 worden geretourneerd in cel B3 of in cel C3. Hiervoor hebben we 2 functies: strCountNumbers (in B3) en GetNumbers (in C3)

1. Kopieer de onderstaande code
2. Open een nieuwe werkmap
3. Druk op de toetscombinatie ALT + F11 om de Visual Basic Editor te openen
4. Druk op de toetscombinatie ALT + N om het menu Invoegen te openen
5. Druk op M om een standaard module in te voegen
6. Daar waar de cursor knippert voeg je de code in middels Ctrl + V
7. Druk op de toetscombinatie ALT + Q om de Editor af te sluiten en terug te keren naar Excel
8. Formule invoegen in juiste cel.

Bijvoorbeeld in B3=strCountNumbers(A3) of =GetNumbers(A3)

Function strCountNumbers(strText As String) As String
Dim intLengte As Integer, strChar As String, X As Integer, strNumber As String
    intLengte = Len(strText)
    For X = 1 To intLengte
        strChar = Mid(strText, X, 1)
        If strChar Like "[0-9]" Then
            strNumber = strNumber & strChar
        End If
    Next
    strCountNumbers = strNumber
End Function
Function GetNumbers(ByVal strText As String) As String
  Dim X As Long
  For X = 1 To Len(strText)
    If Mid(strText, X, 1) Like "[!0-9]" Then Mid(strText, X) = " "
  Next
  GetNumbers = Replace(strText, " ", "")
End Function

Getallen uit het BEGIN van een tekenreeks halen.

In [B3] =LEFT(A3; match(TRUE; MID
(A3 & "x"; {1\2\3\4\5\6\7\8\9\10\11\12}; 1) > "9"; 0) - 1)

Nog een bruikbare formule:
Formule in B3 invoeren

In [B3] =LEFT(A3;MATCH(TRUE;ISERROR(1*LEFT(SUBSTITUTE(IF(ISNUMBER
(-MID(A3;FIND(".";A3&".")+1;1));A3;SUBSTITUTE(A3;".";"X"))
;" ";"X")&"X";ROW(INDEX(A:A;1):INDEX(A:A;99))));0)-1)