Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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