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

Mittelwert mit vba bilden, für best. Bereiche

Mittelwert mit vba bilden, für best. Bereiche
09.02.2017 17:57:35
Antonia
Hallihallo,
ich habe hier mal wieder ein kleines Problem, bei dem ich nicht weiter komme.
Im Anhang habe ich hier eine Liste mit unterschiedlichen Produkten (Ziffern 1bis 9), die zu unterschiedlichen Zeitpunkten zu unterschiedlichen Preisen verkauft wurden. In die Spalte danach würde ich nun gerne mittels vba für die jeweils gleichen Produkttypen, die auch zum gleichen Zeitpunkt gekauft wurden, den Mittelwert des Preises bilden. Wenn nur ein Produkttyp zu einem Zeitpunkt verkauft wurde, soll einfach der Preis kopiert werden. Ich habe die zusammengehörigen Gruppen auch nochmals farbig markiert. So ist es vielleicht verständlicher.
https://www.herber.de/bbs/user/111349.xlsm
Ich würde mich sehr freuen, wenn mir jemand weiterhelfen könnte.
Viele Grüße,
Antonia

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

Betreff
Datum
Anwender
Anzeige
AW: Mittelwert mit vba bilden, für best. Bereiche
10.02.2017 01:28:55
Piet
Hallo Antonia,
probiere bitte einmal den folgenden Code aus, er müsste funktionieren.
mfg Piet

Dim AC As Object, PRNr As String
Dim Preis As Currency, lz As Long
Dim Zeit As Date, Zeit2 As Date
Sub Mittelwert_bilden()
Dim n As Integer, ze As Long
lz = Range("A1").End(xlDown).Row
n = 1: ze = 2 '1.Zeile Mittelwert
Range("D2:D" & lz).ClearContents
PRNr = Range("A2").Value
Zeit = Range("C2").Value
Preis = Range("B2").Value
On Error Resume Next
For Each AC In Range("A2:A" & lz)
Zeit2 = CDate(AC.Cells(1, 3))
If PRNr = AC.Value And Zeit = Zeit2 Then
Preis = Preis + AC.Cells(1, 2)
n = n + 1  'Teiler addieren
Else
'Mittelwert eintragen
Cells(ze, 4) = Round(Preis / n, 2)
ze = AC.Row:  n = 1
'Variable neu laden
PRNr = AC.Value
Zeit = AC.Cells(1, 3)
Preis = AC.Cells(1, 2)
'Einzelwerte eintragen
If PRNr  AC.Cells(2, 1) Then
AC.Cells(1, 4) = AC.Cells(1, 2)
End If
End If
Next AC
End Sub

Anzeige
AW: Mittelwert mit vba bilden, für best. Bereiche
10.02.2017 01:38:24
Piet
Nachtrag
der Bereich für Mittelwert ist als Datum Formatiert!! Bitte auf Normal aendern!!
AW: Mittelwert mit vba bilden, für best. Bereiche
10.02.2017 08:31:25
Antonia
Hi Piet,
hab's grade ausprobiert, es funktioniert!!! Danke!!!
Viele Grüße,
Antonia
AW: Mittelwert mit vba bilden, für best. Bereiche
10.02.2017 12:05:10
Antonia
Hi Piet,
jetzt hab ich doch noch eine Frage: Habe deinen Code in meine Originaldatei übertragen und nun wird mir zwar an den richtigen Stellen aber nicht der Mittelwert oder der tatächliche Preis eingetragen, sondern eine 0. Dies liegt daran, dass das Programm für Preis/Sowohl auch für Zeit immer den Wert null nimmt.
Weißt du woran das liegen kann?
Viele Grüße,
Antonia
Anzeige
AW: Mittelwert mit vba bilden, für best. Bereiche
10.02.2017 17:10:22
Piet
Hallo Antonia,
Frage: stimmen die Spalten und Zeilen so wie in der Beispieldatei? Wenn ja kannst du mir aus deiner Origianldatei das Blatt mit einigen Daten als Beispiel hochladen. Im Augenblick weiss ich noch nicht wo der Fehler sein kann?
Alternativ einen Tipp von mir zur Fehlersuche, nenne ich Praxis. Setze hinter die Variable Zeit2 zwei MsgBoxen mit Exit Sub und schau dir an welche Werte in den Variablen stehen? Das kannst du auch in den If Then Auswertungen machen. Dann sieht man ob dort Werte drin stehen oder sie Leer sind. Oder ob Werte nicht stimmen, wenn z.B. das Zellen Format nicht übereinstimmt.
mfg Piet
  Zeit2 = CDate(AC.Cells(1, 3))
MsgBox Zeit & Chr(10) & Zeit2
MsgBox PRNr & "  " & Preis
Exit Sub

Anzeige
AW: Mittelwert mit vba bilden, für best. Bereiche
12.02.2017 14:39:14
Antonia
Hi Piet,
vielen Dank nochmal für deine Hilfe. Ich habe es mit deiner Methode versucht, komme aber trotzdem nicht weiter. Hier nochmal ein Auszug der Originaldatei. Die drei Spalten, mit welchen wir gerechnet haben, habe ich grau markiert. Ich glaube aber dass, das Marko für Preis und Uhrzeit den Wert Null annimmt und deshalb auch das Ergebnis immer null ist. An der Formatierung liegt es meiner Meinung nach aber auch nicht, da die betreffenden Spalten genauso formatiert sind wie im ursprünglichen Beispiel.

Die Datei https://www.herber.de/bbs/user/111402.xlsm wurde aus Datenschutzgründen gelöscht


Vielen Dank für deine Hilfe!!
Antonia
Anzeige
mal reingeschaut
12.02.2017 17:56:02
Michael
Hi Antonia,
in Deiner neuen Datei steht in E61 eine 0 - das sollte nicht sein. In diesem Falle (weil zwei Zeilen für diese Ware vorhanden sind) macht das nichs, bei nur 1 Zeile käme eine Division durch 0 raus.
Das könnte man im Makro abfangen, aber das mag ich jetzt nicht machen.
Versuch mal das:
Sub test()
Dim a, b  ' ohne Angabe = as Variant, Verwendung als Array
Dim i&, zmax&, za& ' & = as long
Dim GP#, St#       ' # = as double
zmax = Range("A" & Rows.Count).End(xlUp).Row + 1
a = Range("A1:H" & zmax)
ReDim b(1 To zmax, 0)
b(1, 0) = "Mittelwert"
za = 2 ' d.h. beim Beginn der Schleife wird zunächst
' Zeile 2 mit Zeile 2 verglichen.
For i = 2 To zmax
If a(i, 8) = a(za, 8) And a(i, 6) = a(za, 6) Then
GP = GP + a(i, 5)
' geht davon aus, daß in E der GesamtPreis steht,
' nicht der Einzelpreis.
' Ansonsten müßte man hier noch multiplizieren.
St = St + a(i, 4)
Else
b(za, 0) = GP / St
GP = a(i, 5): St = a(i, 4)
za = i
End If
Next
Range("I:I").ClearContents
Range("I1").Resize(zmax, 1) = b
End Sub
Die Datei: https://www.herber.de/bbs/user/111412.xlsm
Schöne Grüße,
Michael
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige