Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1528to1532
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

AverageIf aber keine Zelle erfüllt alle Kriterien

AverageIf aber keine Zelle erfüllt alle Kriterien
27.12.2016 13:59:17
Lisa
Hallo liebe Community,
ich habe gerade als studentische Hilfskraft in einer Abteilung angefangen und beschäftige mich daher erst seit kurzem mit Excel VBA.
Ich möchte nun Mittelwerte aus der Spalte F bilden, wenn zwei Bedingungen erfüllt sind.
Beispielhaft sieht mein Makro dafür so aus:
Function Mittelwerte()
Worksheets("Berechnung").Range("A2").Value = WorksheetFunction.AverageIfs(Worksheets(2).Range("F6:F770"), Worksheets(2).Range("C6:C770"), "*possein", Worksheets(2).Range("D6:D770"), "12")
Worksheets("Berechnung").Range("I2").Value = WorksheetFunction.AverageIfs(Worksheets(2).Range("F6:F770"), Worksheets(2).Range("C6:C770"), "*posmein", Worksheets(2).Range("D6:D770"), "13")
End Function

Das funktioniert eigentlich auch einwandfrei. Nur wenn Excel keine Zelle findet, die beide Bedingungen erfüllt (was generell möglich ist) erhalte ich einen Fehler. Laut der Funktionsbeschreibung beim Office Support sollte ich den Fehlerwert #Div/0! erhalten, den ich ja einfach mit IfError umgehen könnte.
Blöderweise erhalte ich stattdessen die Fehlermeldung:
Laufzeitfehler "1004".:
Fehler der Methode "AverageIfs" des Objekts "WorksheetFunction".
und damit bricht Excel dann jedes Mal die Rechnung ab.
Weiß jemand, warum dieser Fehler auftaucht und wie ich den vielleicht umgehen kann?

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: AverageIf aber keine Zelle erfüllt alle Kriterien
27.12.2016 14:16:47
Daniel
HI
das was du gelesen hast, gilt für den Fall, dass du die Funktion "MittelwertWenn" in einer Formel in einer Zelle anwendest.
Du wendest die Funktion aber innerhalb des Makros an und dann gelten ein paar andere Spielregeln.
du könntest beispielsweise die Formel in die Zelle schreiben und dann die Formel durch ihren Wert ersetzen:

With Worksheets("Berechnung").Range("A2")
.Formula = Replace("='xxx'!F6:F770,'xxx'!C6:C770,""*possein"",'xxx'!D6:D770,""12"")", "xxx",  _
Worksheets(2).name)
.Formula = .Value
End With

(für den zweiten Fall dann analog)
oder du prüfst vorher, ob die Bedingungen zutreffen:
IF Worksheetfunction.CountIfs(Worksheets(2).Range("C6:C770"), "*possein", Worksheets(2).Range(" _
D6:D770"), "12") > 0 Then
Worksheets("Berechnung").Range("A2").Value = WorksheetFunction.AverageIfs(Worksheets(2).Range(" _
F6:F770"), Worksheets(2).Range("C6:C770"), "*possein", Worksheets(2).Range("D6:D770"), "12")
End If
Gruß Daniel
Anzeige
AW: AverageIf aber keine Zelle erfüllt alle Kriterien
27.12.2016 14:37:05
Lisa
Hallo Daniel,
super, danke für deine schnelle Antwort!
Jetzt klappt´s!!
AW: AverageIf aber keine Zelle erfüllt alle Kriterien
27.12.2016 14:46:48
Gerd
Hallo Lisa,
die Anweisungen With-End With + .cells + .offset dienen lediglich der Codeverkürzung.
Bei ohne Treffer:
Makro1 verwendet Application statt Worksheetfunction u. gibt den von dir erwarteten Fehler
zurück.
Makro2 behandelt den Fehler u. gibt den Startwert der verwendeten Variablen 0 zurück.
Sub Mittelwert_Wenn_Eins()
With Worksheets(2).Range("F6:F770")
Worksheets("Berechnung").Range("A2") = Application.AverageIfs(.Cells, .Offset(, -3), "*possein", _
.Offset(, -2), 12)
End With
End Sub

Sub Mittelwert_Wenn_Zwo()
Dim dblMittel As Double
On Error Resume Next
With Worksheets(2).Range("F6:F770")
dblMittel = WorksheetFunction.AverageIfs(.Cells, .Offset(, -3), "*possein", .Offset(, -2), 12)
End With
On Error GoTo 0
Worksheets("Berechnung").Range("A2") = dblMittel
End Sub
Gruß Gerd
Anzeige
AW: Crossposting ohne Antwort im VBA-Forum
27.12.2016 17:32:28
Werner
Hallo Lisa,
hier bedankst du dich für die Hilfe um 14.37 Uhr. Du hältst es aber nicht für notwendig einen entsprechenden Hinweis in deinem Crosspost im VBA-FORUM zu posten. Folge ist, dass sich dort nach 16.00 Uhr auch noch jemand mit deinem Problem beschäftigt hat - nur halt leider für den Papierkorb.
So viel zum Thema Crossposting.
Gruß Werner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige