@Molly
je gaat de fout in als je geen waarde hebt de laatste van een bepaalde maand maar wel een waarde op de eerste van de volgende maand of de voorlaatste van die maand en je gaat interpoleren. Door die end(xlup) of end(xldown) ga je veel te ver terug of vooruit.
Sub laatste_dag_schatting()
Dim DBR, iRow1, iRow2, iCol, Rij, Kolom
Application.ScreenUpdating = False
With Sheets("Dagverbruik")
Set DBR = .ListObjects(1).DataBodyRange.Columns(1)
iRow1 = DBR.Row '1e rij
iRow2 = iRow1 + DBR.Rows.Count - 1 'laatste rij
Datum = CDbl(WorksheetFunction.EoMonth(.Cells(6, 1), 0))
While Datum < .Cells(500, 1) And Datum < Date
Rij = WorksheetFunction.Match(CDbl(Datum), .Columns(1), 0)
If IsNumeric(Rij) Then
For Each Kolom In Array("B", "F", "I")
If .Cells(Rij, Kolom) = "" And Rij > iRow1 And Rij < iRow2 Then
iCol = .Cells(1, Kolom).Column - DBR.Column + 1
DBR.Cells(1, iCol).Resize(Rij - iRow1).Name = "Vorig" 'bereik meterstanden "VOOR"
DBR.Cells(1, iCol).Offset(Rij - iRow1 + 1).Resize(iRow2 - Rij).Name = "Volgend" 'beeik meterstanden "VOLGEND"
r1 = Application.Max([if(vorig<>"",row(vorig),0)]) 'rij van laatst gekende VOOR
r2 = Application.Min([if(volgend<>"",row(volgend),1e9)]) 'rij van eerst gekende VOLGEND
Debug.Print Range("vorig").Address & vbTab & r1 & vbTab & r2
If r1 > 0 And r2 < 1000000000# Then 'regeltje van 3
vorige_waarde = .Cells(r1, Kolom)
bijtellen = ((.Cells(r2, Kolom) - vorige_waarde) / (.Cells(r2, 1) - .Cells(r1, 1))) * (.Cells(Rij, 1) - .Cells(r1, 1))
.Cells(Rij, Kolom) = Round(vorige_waarde + bijtellen, 3)
End If
End If
Next Kolom
End If
Datum = CDbl(WorksheetFunction.EoMonth(.Cells(Rij + 1, 1), 0))
Wend
End With
End Sub