Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1432to1436
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

Summenprodukt in VBA Excel

Summenprodukt in VBA Excel
28.06.2015 11:31:10
Bonduca01
Hallo zusammen,
ich suche eine Funktion in VBA die mir folgendes macht:
Ich möchte für Monat 1 bis Monat 12 die Mindestbestellmenge ausrechnen. Dafür summiere ich die Bestellungen von Monat 1 bis Monat 12 und teile sie dann durch die Monate in denen mehr als 0 bestellt wurde.
In Excel sieht das dann so aus:
=SUMME(B2:M2)/ SUMMENPRODUKT((A2:M2 0)*1)
Ich möchte nun Monat 1 bis Monat 12 in meiner Public Function als extra Eingabefeld haben, weil die nicht immer in den gleichen Spalten stehen.
Ich scheitere aber an dem Summenprodukt.

Public Function MinMenge(M1, M2, M3, M4, M5, M6, M7, M8, M9,M10, M11, M12) As Double
MinMenge = (M1 + M2 + M3 + M4 + M5 + M6 + M7 + M8 + M9 + M10 + M11 + M12) / SUMMENPRODUKT((M1  _
0) * 1 + (M2  0) * 1 + (M3 0) * 1 + (M4  0) * 1 + (M5  0) * 1 + (M6  0) * 1 + (M7  0) * 1_
+ (M8  0) * 1 + (M9  0) * 1 + (M10  0) * 1 + (M11  0) * 1 + (M12  0)* 1)
End Function

Ich hab es schon mit verschiedenen Formulierungen statt Summenprodukt versucht, wie z.B. Application.Worksheet.SumIf oder CountIf. Aber irgendwie mache ich da was falsch.
Könnt ihr mir helfen?
Viele Grüße, Bon

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Summenprodukt in VBA Excel
28.06.2015 11:52:09
Sepp
Hallo Bon,
ohne über den weiteren Sinn einer solchen UDF zu dikutieren.
Public Function MinMenge(ParamArray Monat() As Variant) As Double
  Dim vntItem As Variant
  Dim lngD As Long, dblS As Double
  
  On Error GoTo ErrExit
  
  For Each vntItem In Monat
    If IsNumeric(vntItem) Then
      dblS = dblS + vntItem
      If vntItem > 0 Then lngD = lngD + 1
    End If
  Next
  
  MinMenge = dblS / lngD
  ErrExit:
End Function


Gruß Sepp

Anzeige
AW: Summenprodukt in VBA Excel
28.06.2015 12:30:04
Daniel
Hi
wenn du sowieso jeden Wert einzeln verwendest, brauchst du kein Summenprodukt.
ausserdem muss man wissen, dass in VBA der Boolsche Wert WAHR als -1 in eine Berechnung eingeht.
daher probiere mal:
Public Function MinMenge(M1, M2, M3, M4, M5, M6, M7, M8, M9, M10, M11, M12) As Double
MinMenge = (M1 + M2 + M3 + M4 + M5 + M6 + M7 + M8 + M9 + M10 + M11 + M12) / _
(-(M1 0) - (M2 0) - (M3 0) - (M4 0) - (M5 0) - (M6 0) - (M7 0) - (M8 0) - (M9 0) - (M10 0) - (M11 0) - (M12 0))
End Function

ausserem ist auch deine Formelberechnung etwas umständlich.
in Excel gibts dafür:
=MittelwertWenn(B2:M2;"0")
kleiner Nachteil bei deiner Funktion ist, dass du in der Funktion jeden Wert einzeln angeben musst, auch wenn diese blockweise zusammenstehen, und das du immer genau 12 Werte eingeben musst.
das ist jetzt nicht sehr komfortabel, vorallem wenn du Funktion vielleicht noch an anderer Stelle einsetzen willst.
probiere mal das:
Function MinMenge1(ParamArray Monatswerte() As Variant) As Variant
Dim i As Long
Dim Summe As Long
Dim Anzahl As Long
Dim Werte As Variant
Dim Wert As Variant
For Each Werte In Monatswerte
For Each Wert In Werte
If IsNumeric(Wert) Then
If Wert  0 Then
Summe = Summe + Wert
Anzahl = Anzahl + 1
End If
End If
Next
Next
MinMenge1 = Summe / Anzahl
End Function
das hat den Vorteil, dass du eine beliebige Anzahl von Werten eingeben kannst (es müssen also nicht 12 sein) und dass du bei Werten, die direkt zusammenstehen, du auch den Bereich angeben kannst, dh es sind auch Eingaben in der Form möglich:
=MinMenge(A1;C3;D4:D10)
Gruß Daniel

Anzeige
AW: Summenprodukt in VBA Excel
29.06.2015 08:23:47
Bonduca01
Super! Es funktioniert und ist dazu noch sehr verständlich. Geniale Lösung!
Vielen, vielen Dank

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige