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

Leave a Reply

Your email address will not be published. Required fields are marked *