4.8k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.3k Punkte)
Hallo,

ich habe eine Befehlszeile, die funktioniert:

arrWerte(1, lngZaehler) = Application.SumIf(Range(Cells(4, 9), Cells(Z, 9)), Cells(lngZeile, 9), Range(Cells(4, 6), Cells(Z, 6))).

Jetzt möchte ich eine zusätzliche Bedingung eingeben, wonach die Summation nur dann erfolgt, wenn in der ersten Spalte das Jahr des eingetragenen Datums = 2014 ist:

arrWerte(1, lngZaehler) = Application.SumIfs(Range(Cells(4, 9), Cells(Z, 9)), Cells(lngZeile, 9), Range(Cells(4, 1), Cells(Z, 1)), Year(Date), Range(Cells(4, 6), Cells(Z, 6)))
Das klappt aber nicht. Weiß jemand wo der Fehler liegt?
Danke für jeden Tipp.
Gruß Andreas

15 Antworten

0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Andreas,

wie wär's damit?

MsgBox Evaluate("=SumProduct((year(A4:A30) =2014)*(F4:F30))")


Gruß
Rainer
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo Rainer,
danke, dass du dich auch meinem Problem annehmen willst.
Habe deine Formel getestet, sie ergibt aber 0, was nicht der richtige Wert ist. Im Excel klappt das einwandfrei aber als entsprechender Code will es nicht funktionieren. Noch einmal zum besseren Verständnis:
Spalte 1 Daten im Datumsformat, Spalte 9 Kennzeichen als string und in Spalte 6 die Werte, die summiert werden sollen wenn A=2014 und in Spalte 9 das entsprechende Kennzeichen steht. Sollte doch eigentlich kein Problem sein....?
Gruß Andreas
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Andreas,

das war aber nicht Deine Frage.
So wie sie gestellt war, funktioniert der gepostete Code.

Mit der gewünschten Erweiterung muss er so lauten

MsgBox Evaluate("=SumProduct((year(A4:A30) =2014)*(I4:I30=""kennz1"")*(F4:F30))")


Gruß
Rainer
0 Punkte
Beantwortet von
Hallo Andreas,

ich gehe davon aus, dass du Spalte 6 zurückgeben willst. Bei SumIfs sind die Parameter anders sortiert als bei SumIf.

Wenn man dann noch weiß, dass Datumsangaben = Ganze Zahlen sind sollte es mit dem folgenden Code funktionieren.

arrWerte(1, lngZaehler) = Application.WorksheetFunction.SumIfs(Range(Cells(4, 6), Cells(Z, 6)), _
Range(Cells(4, 9), Cells(Z, 9)), Cells(lngZeile, 9), _
Range(Cells(4, 1), Cells(Z, 1)), ">=" & CLng(CDate("1.1.2014")), _
Range(Cells(4, 1), Cells(Z, 1)), "<=" & CLng(CDate("31.12.2014")))


Wenn du das Jahr variabel halten willst kannst du auch CLng(CDate("31.12." & Jahr)) verwenden.

Gruß Mr. K.
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo Rainer, hallo Mr.K.

Rainer danke, deine Formel funktioniert!

Die Lösung von dir, Mr.K., ist für mein Problem allerdings genau das was ich gesucht hatte und es funktioniert wunderbar!!!!
Danke für den Tipp der Parametersortierung und der variablen Datumsangabe!!
Habe die letzten Tage daran rumgebastelt aber darauf wäre ich sicher nicht gekommen!
Gruß Andreas
...