Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1496to1500
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

Average über mehrere Worksheets

Average über mehrere Worksheets
17.06.2016 12:21:18
Clemens
Hallo zusammen,
ich versuche gerade ein Makro zu schreiben, welches mir den Mittelwert von Zellen über mehrere Worksheets berechnet.
Die Anzahl der Worksheets über die der Mittelwert gebildet wird, ist mir vorher jedoch nicht bekannt, kann aber natürlich im Makro ermittelt werden. Vor allem weiß ich aber wie das erste und letzte Worksheet heißen: ws1 und wsX
Was bisher funktioniert ist das:
wsAverage.Cells(1, 1) = Application.Average(Sheets(ws1).Cells(1, 1), Sheets(ws2).Cells(1, 1))

Das berechnet den Durchschnitt von zwei Sheets.
Meine Idee war jetzt, einen den Mittelwert über einen Range zu nehmen, in etwa so:
wsAverage.Cells(1, 1) = Application.Average(range(Sheets(ws1).Cells(1, 1), Sheets(wsX).Cells(1, 1)))

Wobei wsX wiegesagt das letzte Worksheet ist über das der Mittelwert gebildet wird.
Dabie bekomme ich jedoch den Fehler: "Method 'Range' of Object '_Global' failed"
Weiß jemand warum das nicht funktioniert?

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

Betreff
Datum
Anwender
Anzeige
AW: Average über mehrere Worksheets
17.06.2016 12:41:58
ChrisL
Hi Clemens
Sub t()
Dim i As Integer
ReDim ar(0) As Variant
For i = 1 To ThisWorkbook.Worksheets.Count
With Worksheets(i)
If .Name = "Ende" Then
Exit For
Else
If .Range("A1")  "" Then
ReDim Preserve ar(UBound(ar) + 1)
ar(UBound(ar)) = .Range("A1")
End If
End If
End With
Next i
MsgBox WorksheetFunction.Average(ar)
End Sub

Das letzte Blatt heisst im Beispiel "Ende". Leere Zellen werden ignoriert.
cu
Chris

...Weil es einen solchen Super-Range nicht ...
17.06.2016 12:44:32
Luc:-?
…gibt, Clemens;
ein Range ist eine objektbildende Eigenschaft des Worksheets, nicht des Workbooks, wie du leicht nachprüfen kannst, wenn du 1× im DokKlassenModul des Worksheets und 1× in dem des Workbooks Me.R… schreibst. In dem, was dir der VBE-Intellisense zeigt, ist im 1.Fall Range enthalten, im 2.Fall nicht!
Gruß & schöWE, Luc :-?
Besser informiert mit …

Anzeige
AW: Average über mehrere Worksheets: mit Evaluate
17.06.2016 13:09:55
Daniel
Hi
in VBA ist es nicht möglich, einen Zellbereich über mehrere Tabellenblätter hinweg zu definieren.
Eine Range ist immer fest einem Worksheet zugeordent, daher müssen die Cells, die die Range definieren, auch immer auf einem Sheet liegen.
ein Zellbereich, der mehrere Tabellenblätter umfasst, ist so nur als in einer Excelzelle möglich und das auch nur für einige Funktionen (Summe, Mittelwert)
in VBA gibt es diese Möglichkeit nicht, hier müsste man sich mit einem Workaround behelfen.
hierfür gibt es mehrere Möglichkeiten:
a) wie von Chris beschrieben, in einer Schleife über die die Tabellenblätter laufen, die Werte sammeln und den Mittelwert berechnen.
b) die Formel in eine freie Excelzelle schreiben (Excel hat genügend davon) und dann den Formelwert abfragen:
Cells(3, 1).Formula = "=Average('" & ws1.Name & ":" & wsX.Name & "'!A1)"
Ergebnis = Cells(3, 1).Value
c) das Formelergebnis mit EVALUATE ermitteln:
Ergebnis = Evaluate("=average('" & ws1.Name & ":" & wsX.name & "'!A1)"

Gruß Daniel

Anzeige
AW: Average über mehrere Worksheets: mit Evaluate
17.06.2016 14:32:11
Clemens
Hallo,
aaah, ok, danke für eure Hilfe!!
Ich habe es jetzt mit:
Cells(3, 1).Formula = "=Average('" & ws1.Name & ":" & wsX.Name & "'!A1)"
gemacht. Also die Formel durch VBA in die Zelle geschrieben.
Die Idee mit der Schleife hatte ich auch schon.
Nur will ich nicht nur Durchschnitt sondern auch Max, Min usw berechnen, und das ist mir zu aufwändig das mit Schleifen zu machen.
Schönes Wochenende!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige