Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA | MittelwertWenn | Variable

Forumthread: VBA | MittelwertWenn | Variable

VBA | MittelwertWenn | Variable
28.07.2017 09:22:06
Adam
Hallo,
kann mir bitte jemand erklären, was ich falsch mache?
der Code:
Worksheets("Brand_Reach").Cells(2, 3).Value =Application.WorksheetFunction.AverageIf(Worksheets("Brand").Range("H5:S5"), "größer 0")
funktioniert.
Sobald ich aber die Rangangabe mit Cells() vornehme. Funktioniert es nicht mehr.
Worksheets("Brand_Reach").Cells(2, 3).Value = _
Application.WorksheetFunction.AverageIf(Worksheets("Brand").Range(Cells(5, 8), Cells(5, 19)), "größer 0")
die Bedingung "größer 0" musste ich hier wörtlich schreiben, sonst meckert die Webseite...
Vielen Dank für Eure Hilfe!
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: eine Vermutung
28.07.2017 09:29:30
Fennek
Hallo,
je nachdem, von welchem Sheet ein solcher Befehl aufgerufen wird, kann es klappen oder auch nicht.
Sicherer ist:

with Worksheets("Brand_Reach")
.Cells(2, 3).Value = _
Application.WorksheetFunction.AverageIf(.Range(.Cells(5, 8), .Cells(5, 19)), "größer 0")
end with
Entscheidend sind die "." vor cells
Es gibt sicher auch noch anderer mögliche Fehlerquellen.
mfg
Anzeige
AW: eine Vermutung
28.07.2017 09:37:09
Adam
Hi Fennek,
danke für die rasche Antwort.
Leider funktioniert es nicht. In der Funktion muss aber auch ein Verweis auf ein anderes Sheet stehen ("Brand").
With Worksheets("Brand_Reach")
.Cells(2, 3).Value = Application.WorksheetFunction.AverageIf(Worksheets("Brand").Range(.Cells(5, 8), .Cells(5, 19)), "größer 0")
End With
VG
Adam
Anzeige
AW: e2. Versuch
28.07.2017 09:42:17
Fennek

with Worksheets("Brand")
Worksheets("Brand_Reach").Cells(2, 3).Value = _
Application.WorksheetFunction.AverageIf(.Range(.Cells(5, 8), .Cells(5, 19)), "größer 0")
end with

AW: e2. Versuch
28.07.2017 10:03:52
Adam
1000 Dank Fennek! Funktioniert!
Schönen Freitag noch!
AW: eine Vermutung
28.07.2017 10:04:27
Werner
Hallo Adam,
so:
Public Sub Mittelwert()
Dim raBereich As Range
With Worksheets("Brand")
Set raBereich = .Range(.Cells(5, 8), .Cells(5, 19))
Worksheets("Brand_Reach").Cells(2, 3).Value = _
Application.WorksheetFunction.SumIf(raBereich, ">0") / _
Application.WorksheetFunction.CountIf(raBereich, ">0")
End With
End Sub
Gruß Werner
Anzeige
AW: eine Vermutung
28.07.2017 10:40:58
Adam
Auch dir Werner, vielen Dank!
Ich dachte ich kriege es alleine gebacken...
Ich möchte die Reihe mit "i" ansprechen. Geht das überhaupt mit "With"?
for i = 1 to 100
With Worksheets("Brand").Range(Cells(i, 8), Cells(i, 19))
Worksheets("Brand_Reach").Cells(i, 3).Value = _
Application.WorksheetFunction.AverageIf(.Range(.Cells(i, 8), .Cells(i, 19)), "größer 0")
End With
next
Danke
Anzeige
AW: eine Vermutung
28.07.2017 11:58:17
Werner
Hallo Adam,
da muss aber auch noch eine Prüfung rein, ob überhaupt Daten in der jeweiligen Zelle vorhanden sind. Ansonsten knallt es. Die Prüfung habe ich über Application.Sum mit eingebaut.
Option Explicit
Public Sub Mittelwert()
Dim i As Long
Dim raBereich As Range
With Worksheets("Brand")
For i = 1 To 100
Set raBereich = .Range(.Cells(i, 8), .Cells(i, 19))
If WorksheetFunction.Sum(raBereich) > 0 Then
Worksheets("Brand_Reach").Cells(i, 3).Value = _
Application.WorksheetFunction.AverageIf(raBereich, ">0", raBereich)
End If
Next
End With
Set raBereich = Nothing
End Sub
Gruß Werner
Anzeige
AW: eine Vermutung
28.07.2017 13:00:37
Adam
Vielen Dank Werner! Du hast mir sehr geholfen!
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
28.07.2017 13:05:28
Werner
;
Anzeige
Anzeige

Infobox / Tutorial

VBA MittelwertWenn mit Variablen in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel, indem Du Alt + F11 drückst.

  2. Erstelle ein neues Modul: Rechtsklicke auf „VBAProject (DeinWorkbookName)“ -> Einfügen -> Modul.

  3. Kopiere den folgenden Code in das Modul:

    Option Explicit
    Public Sub Mittelwert()
        Dim i As Long
        Dim raBereich As Range
        With Worksheets("Brand")
            For i = 1 To 100
                Set raBereich = .Range(.Cells(i, 8), .Cells(i, 19))
                If WorksheetFunction.Sum(raBereich) > 0 Then
                    Worksheets("Brand_Reach").Cells(i, 3).Value = _
                    Application.WorksheetFunction.AverageIf(raBereich, ">0", raBereich)
                End If
            Next
        End With
        Set raBereich = Nothing
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus, indem Du Alt + F8 drückst, das Makro „Mittelwert“ auswählst und auf Ausführen klickst.


Häufige Fehler und Lösungen

  • Fehler: „Typen unverträglich“

    • Lösung: Stelle sicher, dass Du die richtige Range verwendest und die Variablen korrekt deklariert sind.
  • Fehler: „Objekt erforderlich“

    • Lösung: Überprüfe, ob das Arbeitsblatt „Brand“ existiert und korrekt geschrieben ist.
  • Fehler beim Verweis auf andere Blätter

    • Lösung: Verwende den vollständigen Verweis, wie in den Beispielen gezeigt.

Alternative Methoden

  • Verwendung von Array-Formeln: Du kannst auch Array-Formeln verwenden, um den Mittelwert zu berechnen, ohne VBA zu nutzen. Beispiel:

    =MITTELWERT(WENN(Bereich>0; Bereich))

    Diese Formel muss mit Strg + Shift + Enter eingegeben werden.

  • Pivot-Tabellen: Eine Pivot-Tabelle kann ebenfalls genutzt werden, um Mittelwerte effizient zu berechnen.


Praktische Beispiele

Ein einfaches Beispiel, um den Mittelwert für einen bestimmten Bereich zu berechnen:

Worksheets("Brand_Reach").Cells(2, 3).Value = _
Application.WorksheetFunction.AverageIf(Worksheets("Brand").Range("H5:S5"), ">0")

Dieses Beispiel zeigt die Verwendung von AverageIf in Excel VBA, um nur Werte größer als 0 zu berücksichtigen.


Tipps für Profis

  • Achte darauf, die richtige Syntax für Bedingungen in AverageIf zu verwenden. Zum Beispiel: ">0" statt "größer 0".
  • Nutze die With-Anweisung, um redundante Codezeilen zu vermeiden und die Lesbarkeit zu verbessern.
  • Überprüfe vor dem Ausführen des Codes, ob das Arbeitsblatt existiert und ob die Daten korrekt eingegeben wurden.

FAQ: Häufige Fragen

1. Kann ich AverageIf auch ohne VBA verwenden? Ja, du kannst AverageIf direkt in einer Excel-Zelle verwenden, um Mittelwerte zu berechnen.

2. Wie kann ich mehrere Bedingungen in der Berechnung berücksichtigen? Du kannst AverageIfs verwenden, um mehrere Bedingungen zu definieren. Beispiel:

=AVERAGEIFS(Bereich, Bereich1, ">0", Bereich2, "<100")

3. Welche Excel-Version benötige ich für diese Funktionen? Die beschriebenen Funktionen sind in Excel 2007 und neueren Versionen verfügbar.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige