Hallo,
eventuell entspricht diese Lösung den Vorstellungen
Option Explicit
Sub CheckZahlungen()
Dim rngBetragAll As Range, rngBetrag As Range
Dim rngTerminAll As Range, rngTermin As Range
Dim rng As Range
Dim rngRow As Range
Dim dblBetrag(11) As Double
With ThisWorkbook
Set rngBetragAll = .Names("Betrag").RefersToRange
Set rngTerminAll = .Names("Zahlungstermin").RefersToRange
For Each rngRow In rngBetragAll.Worksheet.UsedRange.Rows
Set rngBetrag = Intersect(rngBetragAll, rngRow)
If Not IsEmpty(rngBetrag) Then
For Each rngTermin In Intersect(rngTerminAll, rngRow).Cells
If Not IsEmpty(rngTermin) Then
If IsDate(rngTermin) Then
If DateDiff("d", Now, rngTermin) > 0 Then
dblBetrag(DatePart("m", rngTermin) - 1) = dblBetrag(DatePart("m", rngTermin) - 1) + rngBetrag.Value
End If
End If
Else
Exit For
End If
Next
Else
Exit For
End If
Next
End With
' Ausgabe
Dim i As Integer
Debug.Print "Anstehende Zahlungen:"
For i = 0 To 11
If dblBetrag(i) <> 0 Then
Debug.Print "Monat " & Format(DateSerial(2000, i + 1, 1), "mmmm") & ": " & dblBetrag(i); " Euro"
End If
Next
End Sub
Diese Lösung setzt voraus, dass in der Arbeitsmappe zwei Namensbereiche vorhanden sind:
Betrag: Spalte mit allen Beträgen
Zahlungstermin: Spalten 1 - 12 mit allen Datumswerten der Termine (1 = Januar bis 12 = Dezember)
----------------------------
Beim Aufruf der "CheckZahlungen" - Routine werden alle Zeilen in der Tabelle durchlaufen. Bei den ausstehenden Beträgen werde diese zusammenaddiert und in einem Array gespeichert.
Am Ende wird der Inhalt des Arrays im Direktberech des VBA-Editors ausgegeben.
Die Ausgabe kann auch in eine Tabelle ausgeben werden.
Eine Beispieldatei kann unter dieser URL heruntergeladen werden: https://www.dropbox.com/s/e6kesu9qvxk3cbh/Zahlungen.xlsm?dl=0
|