Fehler bei Averageifs
#1
Hallo,

ich ermittle via VBA abhängig von zwei Bedingungen in einer Spalte den Mittelwert mit der averageifs-Methode. Das Ganze läuft in einer For-Next-Schleife und befüllt mir eine variabel anpassbare Tabelle.

Der betreffende Code-Schnipsel, sieht dazu folgendermaßen aus:

Sheets("Tabelle1").Cells(70, 17 + i) = WorksheetFunction.IfError(WorksheetFunction.AverageIfs(Sheets("Tabelle2").Range("DD:DD"), Sheets("Tabelle2").Range("C:C"), Sheets("Tabelle1").Cells(64, 17 + i), Sheets("Tabelle2").Range("D:D"), Sheets("Tabelle1").Cells(63, 17 + i)), 0) 

Das funktioniert auch wunderbar, so lange die Zellen in der Spalte >>Sheets("Tabelle2").Range("DD:DD")<< unter den beiden Bedingungen auch befüllt sind. Es kommt jedoch vor, dass in der Spalte DD die betreffenden Zellen leer sind. Ist das der Fall, dann kommt der Debugger. Das kann ich soweit glaube ich auch nachvollziehen, mein Problem liegt darin, den Fehler in diesen Fällen abzufangen.

Wie man im Code-Schnipsel sehen kann, habe ich es mit der ifError-Methode versucht, was allerdings genauso erfolglos ist wie der Versuch über "On Error resume next" zu gehen. 

Letztendlich will ich nur erreichen, dass er die Werte dann ermittelt wenn sie ermittelt werden können, wenn nicht dann entweder einfach nichts machen, oder von mir aus eine Null ausgeben.

ich check nicht was ich falsch mache.

Hat jemand eine Idee?

Viele Grüße und Danke im Voraus
Antworten Top
#2
Hi,

Zitat:was allerdings genauso erfolglos ist wie der Versuch über "On Error resume next" zu gehen

Das halt ich aber für ein Gerücht...

Unabhängig davon sind die WorksheetFunctions nicht so "gnädig" wie die selben Funktionen in Formeln in einem Tabellenblatt, die halt Fehlerwerte zurückgeben, wenn irgendwas nicht funktioniert.

Fazit: Mit On Error Resume Next sollte der Code zumindest nicht hängen bleiben. Diese Anweisung gehört selbstverständlich VOR Deine gepostete Codezeile Wink
Und danach On Error Goto 0 nicht vergessen!
Antworten Top
#3
Hallo Boris,

danke für die schnelle Antwort.

habs nochmal mit On Error resume next versucht. er bleibt tatsächlich trotzdem hängen. Steht direkt vor der Zeile und danach On Error GoTo 0

irgend einen Fehler schein ich doch da zu machen und komm nicht drauf.


Gruß
Antworten Top
#4
Hi,

kann ich nicht nachvollziehen - bei mir läuft der Code mit On Error durch. Ohne On Error kommt die Fehlermeldung 1004 - "Die Average-Eigenschaft des...."
Antworten Top
#5
Naja ok, ich versteh es nach wie vor nicht, habe das Problem aber über Plan-B gelöst, indem ich eine klassische Wennfehler- und Mittelwertwenns-Formel per FormulaLocal einfügen lasse und auf die entsprechenden Zellen erweitere. 

Ist tatsächlich so dass die "klassischen" Formeln in Excel "gnädiger" sind. Denn diese Formel, obwohl für mich inhaltlich identisch, funktioniert ohne Probleme.

@Boris, Danke für den Denkanstoß Smile

Gruß
Antworten Top
#6
Hi,

alternativ folgenden Code benutzen:


Code:
If WorksheetFunction.CountIfs(Sheets("Tabelle2").Range("C:C"), Sheets("Tabelle1").Cells(64, 17 + i), Sheets("Tabelle2").Range("D:D"), Sheets("Tabelle1").Cells(63, 17 + i))>0 then
Sheets("Tabelle1").Cells(70, 17 + i) = WorksheetFunction.IfError(WorksheetFunction.AverageIfs(Sheets("Tabelle2").Range("DD:DD"), Sheets("Tabelle2").Range("C:C"),Sheets("Tabelle1").Cells(64, 17 + i), Sheets("Tabelle2").Range("D:D"), Sheets("Tabelle1").Cells(63, 17 + i)), 0)
end if
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste