Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
916to920
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
916to920
916to920
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Summenprodukt als VBA

Summenprodukt als VBA
25.10.2007 13:39:00
Verena
Hallo Leute,
ich habe eine Sub geschrieben, die wie folgt aussieht:

Private Sub CommandButton1_Click()
Dim zeile As Integer
Dim z As Integer
Set wsh1 = Sheets("Tab1")
Set wsh3 = Sheets("Tab2")
Dim b As Integer
Application.ScreenUpdating = False
Rows("3:1000").ClearContents
Rows("3:1000").Select
Selection.Interior.ColorIndex = xlNone
Selection.Font.Bold = False
Selection.Font.Size = 9
zeile = 2
z = 2
b = 0
bereich = Array("A", "B", "C")
'Bereiche durchgehen:
For b = 0 To 2
Range("A" & z) = bereich(b)
Rows(z).Select
Selection.Font.Bold = True
Selection.Font.Size = 12
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
For zeile = 2 To 1000
'Handelt es sich um den gewünschten Bereich: Wenn Ja dann 1) sonst nächsten Bereich  _
untersuchen
If wsh1.Range("E" & zeile) > (bereich(b) & "00000") And wsh1.Range("E" & zeile) '1) Neuer Kunde? Wenn ja dann weiter sonst nächste Zeile
If wsh1.Range("A" & zeile)  wsh1.Range("A" & zeile - 1) Or ((Left((wsh1.Range("E" & zeile) _
), 1))  (Left((wsh1.Range("E" & zeile - 1)), 1))) Then
z = z + 1
wsh3.Range("A" & z) = wsh1.Range("A" & zeile)
wsh3.Range("B" & z) = wsh1.Range("B" & zeile)
'Berechnungen:
wsh3.Range("C" & z).Value = Application.WorksheetFunction.SumIf(wsh1.Columns(1), wsh3. _
Range("A" & z), wsh1.Columns(17))
        'wsh3.Range("D" & z) = Application.WorksheetFunction.SumProduct((wsh1.Range(Cells(1,  _
1), Cells(1, 1000)) = wsh3.Range("A" & z)) * (wsh1.Range(Cells(30, 1), Cells(30, 1000)) = wsh3.Range("D1")) * (wsh1.Range(Cells(17, 1), Cells(17, 1000))))
End If
End If
Next
zeile = 2
z = z + 4
Next
Application.ScreenUpdating = True
End Sub


Und die SumProduct-Formel (fett markiert) funktioniert nicht. Es ergibt immer einen Laufzeitfehler 1004 und ich weiß nicht, warum. Kann mir jmd weiterhelfen?
Lieber Gruß
Verena

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Summenprodukt als VBA
25.10.2007 13:45:00
Verena
Ohne VBA funktioniert meine Formel übrigens wie folgt:
Tab2!D3=SUMMENPRODUKT((Tab1!A3:A1000=Tab2!A3)*(Tab1!AD3:AD1000=D$1)*(Tab1!Q3:Q1000))

Cells(1,1000) geht nur in Excel 2007
25.10.2007 14:05:00
NoNet
Hallo Verena,
beim Drüberschauen ist mir aufgefallen, dass Du Cells(1, 1000) als Bestandteil Deiner SUMPRODUCT-Funktion verwendest.
Cells(1,1) ist A1, Cells(1,2)=B1 etc.
Bis Excel 2003 gibt es nur 256 Spalten, d.h. max. Cells(1,256).
Ab Excel 2007 gibt es 16.384 Spalten, da funktioniert diese Bereichsangabe.
Oder meintest Du etwa Cells(1000,1) ?
Gruß, NoNet

AW: Cells(1,1000) geht nur in Excel 2007
25.10.2007 14:09:02
Verena
Oh ja, das hab ich versehentlilch vertauscht. :-)
Hab es jetzt geändert, aber funktioniert trotzdem net... :-(
Gruß
Verena

Anzeige
Hast Du auch Cells(30,1000) etc. getauscht ?
25.10.2007 14:09:44
NoNet
_oT

Ja:
25.10.2007 14:15:06
Verena
wsh3.Range("D" & z2) =
Application.WorksheetFunction.SumProduct((wsh1.Range(Cells(1, 1), Cells(1000, 1)) = wsh3.Range("A" & z2)) * (wsh1.Range(Cells(1, 30), Cells(1000, 30)) = wsh3.Range("D1")) * (wsh1.Range(Cells(1, 17), Cells(1000, 17))))

SUMPRODUCT funktioniert bei mir nicht mehr
25.10.2007 14:48:30
NoNet
Hallo Verena,
das ist ja der Oberhammer : Die VBA-Funktion Application.Worksheetfunction.SumProduct funktioniert bei mir nun überhaupt nicht mehr (Excel 2003 SP2).
Selbst bei einer einfachen Berechnung zeigt mir der Debugger einen Fehler an :
Userbild
Klicke ich auf "Sumproduct" und drücke F1, kann mir Excel auch keine Hilfe dazu anzeigen (zu anderen Funktionen schon !)
Ist da etwa etwas Grundsätzliches defekt ?!?!? Selbst nach Beendigung und Neustart von Excel war das Problem nicht behoben.
Jetzt muss ich aber echt staunen !!
rätselhafte Grüsse, NoNet

Anzeige
AW: SUMPRODUCT funktioniert bei mir nicht mehr
25.10.2007 15:03:00
Verena
Ja, das ist bei mir auch so. Will ich die Hilfe zu SumIf oder SumProduct ansehen, klappt das nicht.... :-(

SUMPRODUCT per VBA akzeptiert keine Vergleiche
25.10.2007 15:48:00
NoNet
Hallo Verena,
habe eben mal etwas diesbezügl. gegoogelt und etliche Beiträge zu diesem Thema gefunden.
Es wurde jedoch immer nur die Fehlermeldung genannt und nach der Ursache gefragt, aber konkrete Antworten gab es nirgends.
Allerdings kristallisiert sich heraus, dass Worksheetfunction.Sumproduct() unter VBA wohl nicht ganz so universell eingesetzt werden kann wie als Tabellenfunktion. Konkret : Man kann damit wohl tatsächlich nur die PRODUKTE summieren, jedoch keine Vergleichsoperatoren einsetzen.
Beispiel : Diese Tabelle (per Tabellenfunktionen kann man hier einiges berechnen) :
Mit den VBA-Varianten klappt es nur ohne den Vergleich :
Sub Summenprodukte()
    MsgBox Application.WorksheetFunction.SumProduct(Range("A1:A6", "B1:B6")) 'funktioniert : 72
    MsgBox Application.WorksheetFunction.SumProduct(Range("A1:A6"), Range("B1:B6")) 'funktioniert : 120
    'MsgBox Application.WorksheetFunction.SumProduct((Range("A1:A6") = 1) * (Range("B1:B6"))) 'LFZ 13
    'MsgBox Application.WorksheetFunction.SumProduct(Array((Range("A1:A6") = 1), Range("B1:B6"))) 'LFZ 13
    'MsgBox Application.WorksheetFunction.SumProduct(True * (Range("B1:B6"))) 'LFZ 13
    'MsgBox Application.WorksheetFunction.SumProduct((Array("1", "2", "3", "1", "2", "3")), (Range("B1:B6")))  'LFZ 1004
End Sub
Gruß, NoNet

Anzeige
AW: SUMPRODUCT per VBA akzeptiert keine Vergleiche
25.10.2007 16:05:00
Peter
Hallo NoNet,
zu deinem Beispiel:
MsgBox Evaluate("=SumProduct((A1:A10 = 1) * 1)")
geht, das ist aber eben nur ein Ausweg.
Gruß Peter

Schon klar, aber nicht per Worksheetfunction
25.10.2007 16:18:19
NoNet
Hallo Peter,
danke für Deine Ergänzung. MIR ist das schon klar, dass man EVALUATE oder auch die Kurzform [] verwenden kann. Es ging mir jedoch mehr darum, darzustellen, dass dies mit der WORKSHEETFUNCTION.SUMPRODUCT offenbar nicht funktioniert, während die anderen Worksheetfunctions schon recht gut in VBA einsetzbar sind.
Gruß, NoNet

Das liegt daran,...
25.10.2007 17:13:00
Luc:-?
...NoNet,
dass VBA zur kompletten Nachgestaltung dieser Fktionalität offensichtlich die .HasArray-Eigenschaft der Formelzelle benötigt - was wohl mit einer Subroutine nicht nachgestaltbar ist -, zumindest wenn gar kein direkter Bezug übergeben wird, sondern ein Datenfeld aus der Berechnung eines Ausdruckes im Bezug (da müsste wohl mit For Each...In gearbeitet wdn). Deshalb liefert die nachfolgende udF einen Fehlerwert (der ja mit MsgBox ohne Umwandlung in Text nicht ausgegeben wdn kann), wenn sie nicht als Matrixformel eingegeben wird, sonst aber das richtige Ergebnis.

Function ProduktSumme(ByVal DFeld1, Optional ByVal DFeld2)
If IsMissing(DFeld2) Then
ProduktSumme = WorksheetFunction.SumProduct(DFeld1)
Else: ProduktSumme = WorksheetFunction.SumProduct(DFeld1, DFeld2)
End If
End Function


Gruß Luc[ius]
:-?
PS: sum[ of ]product[s] = Produktsumme... ;-)

Anzeige
AW: Schon klar, aber nicht per Worksheetfunction
26.10.2007 10:20:59
Verena
Okay, ich kann das also so nicht machen, wie ich's machen wollte. Aber wie's jetzt richtig funktioniert hab ich noch net so raus...

AW: Summenprodukt als VBA
25.10.2007 13:45:00
Verena
Ohne VBA funktioniert meine Formel übrigens wie folgt:
Tab2!D3=SUMMENPRODUKT((Tab1!A3:A1000=Tab2!A3)*(Tab1!AD3:AD1000=D$1)*(Tab1!Q3:Q1000))

7 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige