4.6k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k 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 hajo_zi Experte (9.1k Punkte)
Hallo Andreas,

man könnte vermuten im Bereich Range(Cells(4, 1), Cells(Z, 1)) steht nirgends 2014

Ich hätte es eher über Summenprodukt gelöst.

Gruß Hajo
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo Hajo,

doch doch, in der ersten Spalte gibt es mehrere Datumseinträge ...2014.
Ich habe die zweite Bedingung mit dem Datum = 2014 in der Formel jetzt noch einmal "selektiert":

arrWerte(1, lngZaehler) = Application.SumIf(Range(Cells(4, 1), Cells(Z, 1)), Year(Date), Range(Cells(4, 6), Cells(Z, 6)))
und da kommt seltsamerweise 0 raus, obwohl entsprechende Datensätze vorhanden sind. Offenbar stimmt was mit der Syntax nicht, ich weiß nur nicht wo...
Gruß
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
ich hatte nicht geschrieben Datumseinträge sondern die Zahl 2014.

Gruß Hajo
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo Hajo,
danke für deinen Hinweis.
Mir fehlt einfach der Code, mit dem ich die Datumsspalte "A" so konfiguriere, dass in der Summenformel jeweils geprüft wird, ob das Datum in "A" aus 2014 ist:

arrWerte(1, lngZaehler) = Application.SumIf(Range(Cells(4, 1), Cells(Z, 1)), "2014", Range(Cells(4, 6), Cells(Z, 6)))

So einfach wie ich dachte, dass ich das year einfach vor die Bereichsangabe setze, geht es leider nicht.:
arrWerte(1, lngZaehler) = Application.SumIf YEAR((Range(Cells(4, 1), Cells(Z, 1))), Year(Date), Range(Cells(4, 6), Cells(Z, 6)))
Aber irgendwie muss sich das doch lösen lassen, ohne dass ich das wieder in einer aufwändigen Schleife berechne.
Gruß
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
mein Vorschlag gefällt Dir also nicht.

Gruß Hajo
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
...ich kann ihn leider nicht umsetzen.Gruß
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Summenprodukt in VBA
ActiveSheet.Range("B1").Value = Evaluate("=SumProduct((Tabelle2!A40:A46 =""Geiger"")*((Tabelle2!B40:B46)))")
von Thomas Ramel

Gruß Hajo
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo Hajo,

danke für den Tipp, habs probiert aber das scheitert wir beim sumIfs-Befehl daran, dass ich den Bereich für den die Summe ermittelt werden soll (Spalte "A" mit Datumsangaben) erst nach der Jahreszahl durchsuchen muss. Und dieses Year(Bereich... geht nicht.
Gruß.
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
warum das erst durchsucht werden muss ist mir nicht klar, aber Du wirst das schon Wissen.

Gruß hajo
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo Hajo,

in der Spalte A stehen Daten im Datumsformat, deshalb muss ich vor der Summation prüfen ob das Datum in 2014 liegt:
arrWerte(1, lngZaehler).Value = Evaluate("=SumProduct(year((Range(Cells(4, 1), Cells(Z, 1))) =""2014"")*((Range(Cells(4, 6), Cells(Z, 6)))))")

Weder dieser Befehl mit Summenprodukt noch die Variante mit sumIF

arrWerte(1, lngZaehler) = Application.SumIf(Year(Range(Cells(4, 1), Cells(Z, 1))), Year(Date), Range(Cells(4, 6), Cells(Z, 6)))

funktionieren..?????
Gruß
...