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

MW berechnen – Variable Bereich

MW berechnen – Variable Bereich
06.09.2016 20:16:26
susi
Hallo liebe VBA-Profis,
ich habe mit der Hilfe in einem anderen Forum schon einmal einen VBA-Code bekommen, welcher mir die Mittelwerte von Verbräuchen (in Spalte D) über jeweils 12 Monate(Zellen) berechnet. Nun haben sich die Ansprüche geändert und es soll nicht mehr immer der mittlere Verbrauch über 12 Zellen berechnet werden, sondern in Spalte G stehen die Daten, wann der Artikel zum ersten Mal verkauft wurde und sofern das Datum vor dem Beginn der Werte ist (also Verbräuche mit 0) soll der Mittelwert erst ab da berechnet werden.
Also damit es verständlicher wird bin ich zu diesem Forum gewechselt und habe Beispieldaten hochgeladen. In dem Beispiel wäre es bei der Jeans so, dass zwar Daten ab Sep. 13 drinstehen, aber der Verkauf erst ab Feb. 15 begonnen hat. Es sollte dann also der Mittelwert für die ersten 12 Monate gar nicht gerechnet werden und für die nächsten 12, also von Sep. 14 bis August 15, sollten dann nicht die Verbräuche aller letzten 12 Monate addiert und durch 12 geteilt werden, sondern nur die der letzten 7 und entsprechend dann der Mittelwert über 7 Monate bevor im nächsten Jahr wieder über 12 Monate geht, da der Verkauf dann schon gestartet ist.
Ich hatte bisher nur die Idee das zu verwirklichen, indem man sagt, wenn der Verbrauch 0 ist, dann soll es nicht mitzählen, allerdings möchte ich gerne mit den Datumswerten arbeiten, da es ja auch so mal vorkommen kann, dass der Verbrauch auf 0 sinkt (kommt in dem Beispiel jetzt zwar nicht vor).
Hier mal der Code für die Mittelwerte jeweils über 12 Zellen.
Sub MWberechnen()
Dim c As Range                         'Zählerzelle
Dim rngMwerte As Range                 'Spalte wo Mittelwerte
Dim lngAb As Long                      'Zeile ab wo Mittelwerte
Dim lngStep As Long                    'Schrittweite
Dim dblMwert As Double                 'Block Mittelwert
lngAb = 2: lngStep = 12                'versorgen
Set rngMwerte = Columns("D:D").Cells(lngAb)
Set rngMwerte = Range(rngMwerte, rngMwerte.Offset(lngStep - 1))   'Block auf Länge bringen
Do While Not IsEmpty(rngMwerte.Cells(1))            'Schleife bis kein Wert
dblMwert = WorksheetFunction.Average(rngMwerte)    'Block Mittelwert
If WorksheetFunction.CountIf(rngMwerte, 0) 
Ich würde mich riesig freuen, wenn ihr mir nochmal helfen könntet. Meine VBA-Kenntnisse sind nämlich leider noch ganz im Anfangsstadium.
Freue mich über Antworten.
Liebe Grüße
susi
https://www.herber.de/bbs/user/108050.xlsx
Achso, eine Sache fällt mir gerade noch ein, das Datum, wann ein Artikel eingeführt wurde, ist nicht wie der Verbrauchsdaten jeweils auf dem Monatsersten, das könnte ich sonst aber auch vorher ausbessern und auf den Monatsersten bringen, falls das sonst nur zusätzlich erschwert :)

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: MW berechnen – Variable Bereich
07.09.2016 06:17:08
fcs
Hallo Susi,
weiter kommt man, wenn man in einer weiteren Spalte das Jahr berechnet und dabei für die Jahre die nicht berücksichtigt werden sollen einen Text ausgibt.
Dann kann man in einer Pivotauswertung die Mittelwerte berechnen.
Im Pivot-Bericht muss man dann die Spalte mit dem nicht zu berücksichtigenden Text per Filter ausblenden.
Das kannman dann auch per Makro auswerten.
Dafür fehlt mir im Moment aber etwas die Zeit.
Gruß
Franz
Beispiel:
https://www.herber.de/bbs/user/108059.xlsx
AW: MW berechnen – Variable Bereich
07.09.2016 08:11:58
susi
Hallo Franz,
danke schonmal für den schnellen Tipp und die Aufbereitung mit den Jahren, welches berücksichtigt werden soll.
Das mit der Auswertung des Mittelwertes über Pivottabelle habe ich ausporbiert, das funktioniert soweit auch. Mein Problem ist nur noch, dass ich die Mittelwerte nicht für die Jahre jeweils ausrechenen möchte, sondern immer für die letzten 12 Monate.
Ich habe versucht die Wenn-Funktion dafür abzuändern:
=WENN(UND(C2<DATUM(JAHR(I2);MONAT(I2);1);C2<DATUM(JAHR($C$2);MONAT($C$2+11);1));"nicht"; "Periode1")
Allerdings scheint das mit dem Monat($C$2+11) in der Datumsfunktion nicht zu klappen.
Ich würde dann wo anderes in der Tabelle die Anfangs und Endzeiträume der jeweiligen letzten 12 Monate aufschreiben und dann die Wenn-Funktion noch weiter verschachteln..
Hast du eine Iee, wie ich das mit dem +11 lösen kann, sodass ich es dann wirklich nach jeweils 12 Monaten und nicht nur den Jahren sortieren kann?
Danke und Gruß
susi
Anzeige
AW: MW berechnen – Variable Bereich
07.09.2016 13:14:14
susi
Ah, habs schon gefunden nur ein Klammer falsch gesetzt...
=WENN(UND(C2<DATUM(JAHR(I2);MONAT(I2);1);C2<DATUM(JAHR($C$2);MONAT($C$2)+11;1));"nicht"; "Periode1")
Ich werde die Daten mal so aufbereiten (also die Wenn-Funktion ergänzen für Periode 2 und 3) und dann werde ich mich mal mit dem Makro versuchen...das kann was werden :)
Ihr hört bestimmt nochmal von mir. Danke auf jeden Fall für den Ansatz, da weiß ich nun wie es grundsätzlich funktionieren kann.
Liebe Grüße & Vielen Dank
Susi
AW: MW berechnen – Variable Bereich
08.09.2016 10:54:21
susi
Hallo,
so mit einer verschachtelten WENN-Formel funktioniert es nun schon mal, dass ich angeben kann, ob es berücksichtigt werden soll und in welchen Jahr. Gerade versuche ich erstmal das in ein Makro umzusetzen.
For i = ab To lr
If Cells("C:C", i).Value 
Ich habe erstmal nur versucht, dass mit dem Wenn datum kleiner dann "nicht" probiert. Später füge ich dann mit ELSE if die Bedingungen für die anderen Fälle ein.
Als Fehler bekomme ich immer Typenunverträglichkeit.
Ich kannte den DateSerial-Befehl vorher noch nicht - kann man den hier grundsätzlich so benutzen?
Brauche den ja dann auch für die anderen Bedingungen
Gruß
Susi
Anzeige
AW: MW berechnen – Variable Bereich
08.09.2016 20:07:41
fcs
Hallo Susi,
bei der Verwendung von Cells wird in den Klammern immer erst die Zeile, dann nach dem Komma die Spalte angegeben. Beides als nummerische Werte. Dabei entspricht A = 1, B = 2, u.s.w.
For i = ab To lr
If Cells(i, 3).Value 
Gruß
Franz
AW: MW berechnen – Variable Bereich
12.09.2016 11:33:49
susi
Hallo Franz,
danke für den weiteren Tip. Ich hatte das .Value vergessen + in meiner einen Datei hatte das Datumsformat nicht gepasst. Aber nun funktioniert es und die Bezeichnungen werden alle per Makro richtig eingefügt. Ich habe jetzt die vier Unterscheidungen "nicht", "Periode 1", "Periode 2" und "Periode 3", Steht in Spalte 7 ("G").
Nun versuche ich das umzusetzen. Kannst du mir hier vielleicht auch noch einen Tip geben, wie ich das angehe. Bisher habe ich es ganz naiv versucht einfach ein IF dazwischen zu fügen. Das klappt aber nicht, was ich auch verstehen kann, aber mir fehlt wieder die Idee, wie man es umsetzt.
Sub variable_MW()
Dim rngMwerte As Range                 'Bereich in der Werte stehen über die Mittelwert  _
gebildet wird
Dim dblMwert As Double                 'Block Mittelwert
ab = 2
Set rngMwerte = Columns(4).Cells(ab) 'in Spalte D ab zeile 2 stehen die Werte aus denen  _
Mittelwert gebildet werden soll
Set rngMwerte = Range(rngMwerte, rngMwerte.Offset(lngStep - 1)) 'Block auf Länge bringen
lr = Cells(Rows.Count, "A").End(xlUp).Row 'last row der Spalte c
For i = lngAb To lr Step 12
If Cells(7, i).Value = "Periode 1" Or Cells(7, i).Value = "Periode 2" Or Cells(7, i).Value = " _
Periode 3" Then
dblMwert = WorksheetFunction.Average(rngMwerte)
On Error Resume Next
For Each c In rngMwerte                          'für alle Zellen im Block
c.Offset(, 2).Value = dblMwert                '2-rechts D ( = Splate F)
Next c
End If
Set rngMwerte = rngMwerte.Offset(lngStep)       'verschiebe Block
Next i
End Sub
Habe die Do- mal durch eine For-Schleife ersetzt, weil das für mich als Anfänger irgendwie einfacher ist :)
Würde mich freuen, wenn du nochmal einen Hinweis hättest. Oder gerne auch einen Tipp, wo ich am besten nachlesen kann, wie so etwas geht.
Danke dir schon für alles bisher,
lieber Gruß
Susi
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige