Supportnet / Forum / Tabellenkalkulation
Mittelwert über mehrere Tabellenblätter (Wichtig: bedingte Berechnung)
Frage
Hallo Zusammen!
Ich habe eine Exceldatei erstellt, die Berechnungen über mehrere Tabellenblätter hinweg durchführt. Auf dem ersten Tabellenblatt findet die Berechnung statt. Auf den anderen Tabellenblättern befinden sich Werte, die ich im ersten Blatt verrechne.
Wichtig ist, dass die Sache dynamisch erstellt ist, dass heißt, es wird jedes neue Tabellenblatt in die Berechnungen mit einbezogen!
Zurzeit habe ich das Problem – vereinfacht dargestellt - so gelöst: Beispiel: Mittelwert (Berechnung auf dem 1. Blatt) der Zellen A1 jedes Tabellenblattes (außer 1. Blatt):
Dim NameZweitesTabellenblatt As String
Dim NameLetztesTabellenblatt As String
NameZweites = Worksheets(2).Name
NameLetztes = Worksheets(Worksheets.Count).Name
Range("A1").Select
ActiveCell.FormulaR1C1 = "= AVERAGE (´" & NameZweites & ":" & NameLetztes & "´!R[0]C[0])"
>>> Diese Lösung ist leider nicht ganz ausreichend!
Was ich brauche ist eine bedingte Berechnung. Zum Beispiel soll der Mittelwert nur solcher Tabellenblätter berechnet werden, die in der Zelle A2 WAHR stehen haben. Andere Tabellenblätter sollen von der Berechnung ausgeschlossen werden. Ich habe mir schon lange den Kopf zerbrochen, mir ist aber keine Lösung eingefallen, ohne dass die Dynamik verloren geht.
Vielleicht hat von euch jemand eine Idee! Danke schon mal!
Gruß Simon.
Antwort 1 von OmaDuck
Hallo,
meiner Meinung nach, kannst Du das nur in einer Schleife lösen. Anzahl der Worksheets = Anzahl der Schleifendurchläufe. Wenn A2=true eigenen Zähler erhöhen und Wert in array schreiben. Durchschnitt zu Fuß berechnen Zahlen im array addieren und durch den Zähler teilen.
Gruß
OmaDuck
meiner Meinung nach, kannst Du das nur in einer Schleife lösen. Anzahl der Worksheets = Anzahl der Schleifendurchläufe. Wenn A2=true eigenen Zähler erhöhen und Wert in array schreiben. Durchschnitt zu Fuß berechnen Zahlen im array addieren und durch den Zähler teilen.
Gruß
OmaDuck
Antwort 2 von Saarbauer
Hallo,
ich würde an deiner stelle auf dem Tabellenblatt 1
mir die Daten aus der Zelle A1 und A2 der übrigen Blätter übertragen und mit
=SUMMEWENN(Bereich ;"wahr";Summe_Bereich)
die Summen ermitteln und mit
=ZÄHLENWENN(Bereich ;"wahr")
die Anzahl ermitteln. Dermittelwert ist dann Summe / Anzahl
Gruß
Helmut
ich würde an deiner stelle auf dem Tabellenblatt 1
mir die Daten aus der Zelle A1 und A2 der übrigen Blätter übertragen und mit
=SUMMEWENN(Bereich ;"wahr";Summe_Bereich)
die Summen ermitteln und mit
=ZÄHLENWENN(Bereich ;"wahr")
die Anzahl ermitteln. Dermittelwert ist dann Summe / Anzahl
Gruß
Helmut
Antwort 3 von Simon!
Danke für eure Antworten!
Ich weiss leider nicht was ein Array ist (ich mach VBA erst seit 2 Wochen).
Ich hab’s jetzt so gelöst (Leider nicht ganz elegant):
Ich kopiere die Werte der TabBlätter in eine Spalte (Spalte C) des ersten Tabellenblatts, wenn A2 = WAHR. Damit habe ich alle Werte in einer Spalte stehen. Die Rechenoperation führe ich dann über Excel direkt durch (=MITTELWERT(C1:C1000).
Hier der Code:
Dim i As Byte
Dim a As Integer
Dim z As Integer
a = Worksheets.Count
z = 1
For i = 2 To a
If Worksheets(i).Range("B1").Value = "Wahr" Then
Worksheets(1).Range("C" & z).Value = Worksheets(i).Range("A1").Value
End If
z = z + 1
Next i
... Gruß Simon
Ich weiss leider nicht was ein Array ist (ich mach VBA erst seit 2 Wochen).
Ich hab’s jetzt so gelöst (Leider nicht ganz elegant):
Ich kopiere die Werte der TabBlätter in eine Spalte (Spalte C) des ersten Tabellenblatts, wenn A2 = WAHR. Damit habe ich alle Werte in einer Spalte stehen. Die Rechenoperation führe ich dann über Excel direkt durch (=MITTELWERT(C1:C1000).
Hier der Code:
Dim i As Byte
Dim a As Integer
Dim z As Integer
a = Worksheets.Count
z = 1
For i = 2 To a
If Worksheets(i).Range("B1").Value = "Wahr" Then
Worksheets(1).Range("C" & z).Value = Worksheets(i).Range("A1").Value
End If
z = z + 1
Next i
... Gruß Simon

