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

SumProduct VBA

SumProduct VBA
16.06.2004 16:58:04
KleinKatha
Hallo zusammen,
ich habe ein Problem mit dem Summenprodukt in VBA. Da meine Laufzeiten ziemlich bescheiden sind, wollte ich mal ausprobieren, wie ich meinen Code optimieren kann.
Ursprünglicher Code:
Cells(i, 5).FormulaR1C1 = _
"=SUMPRODUCT(('Tab1'!R2C25:R300C25='Tab2'!RC[-4])*('Tab1'!R2C43:R300C43=3))"
Neuer Code (ohne die Formel jedes Mal in die entsprechende Zelle zu schreiben):
x = WorksheetFunction.SumProduct(Worksheets("Tab1").Range(Cells(2, 25), Cells(300, 25)) = _ Worksheets("Tab2").Range(Cells(i, 1))* _
Worksheets("Tab1").Range(Cells(2,43),Cells(300,43)))
Fehlermeldung bei neuem Code: "Die SumProduct-Eigenschaft des WorksheetFunction-Objects kann nicht zugeordnet werden." Zu was soll denn zugeordnet werden?
Ich habe schon versucht die Range(Cells,Cells) Bereiche durch Range("A1") zu ersetzen, aber die Fehlermeldung bleibt die gleiche.
Vielen Dank für eure Hilfe
Katharina

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SumProduct VBA
ChrisL
Hi Katharina
Für Cells musst du ebenfalls den Bezug zur Tabelle herstellen...
Worksheets("Tab1").Range(Worksheets("Tab1").Cells(2, 25), Worksheets("Tab1").Cells(300, 25)
oder besser...
Dim WS1 As Worksheet
Dim WS2 As Worksheet
Set WS1 = Worksheets("Tab1")
Set WS2 = Worksheets("Tab2")
x = WorksheetFunction.SumProduct(WS1.Range(WS1.Cells(2, 25), WS1.Cells(300, 25)) = _
WS2.Range(WS2.Cells(i, 1))* _
WS1.Range(WS1.Cells(2,43), WS1.Cells(300,43)))
Gruss
Chris
AW: SumProduct VBA
16.06.2004 17:18:36
KleinKatha
Hallo Chris,
vielen Dank für den Ansatz. Leider bekomme ich immer noch eine Fehlermeldung.
Dieses Mal: "Die Methode 'Range' für das Objekt '_Worksheet' ist fehlgeschlagen."
Immerhin ist es jetzt schon mal eine andere Fehlermeldung ;o)
Gruß
Katharina
Anzeige
noch offen
ChrisL
Hallo Katharina
Nun die Fehlermeldung ist behoben, dafür habe ich jetzt noch eine andere Fehlermeldung. :-)
Muss zu meiner Schande eingestehen, dass ich es einfach nicht hinbekomme. Frage mich langsam, ob es überhaupt geht. Die Test-Codes liegen bei... d.h. "t1" funktioniert nicht, alle anderen schon.
Na dann, vielleicht schafft es sonst jemand, aber ich leider nicht.
Gruss
Chris

Sub t1()
Dim WS1 As Worksheet
Dim WS2 As Worksheet
Dim i As Byte
Set WS1 = Worksheets("Tab1")
Set WS2 = Worksheets("Tab2")
For i = 1 To 5
MsgBox WorksheetFunction.SumProduct( _
(WS1.Range(WS1.Cells(2, 25), WS1.Cells(300, 25)) = WS2.Cells(i, 1)) * _
(WS1.Range(WS1.Cells(2, 43), WS1.Cells(300, 43)) = 3))
Next i
End Sub


Sub t2()
Dim i As Byte
For i = 1 To 5
Cells(i, 5).FormulaR1C1 = _
"=SUMPRODUCT(('Tab1'!R2C25:R300C25='Tab2'!R" & i & "C1)*('Tab1'!R2C43:R300C43=3))"
Next i
End Sub


Sub t3()
Dim WS1 As Worksheet
Dim WS2 As Worksheet
Dim i As Byte
Set WS1 = Worksheets("Tab1")
Set WS2 = Worksheets("Tab2")
For i = 1 To 5
Cells(i, 5).Formula = "=SumProduct((" _
& WS1.Range(WS1.Cells(2, 25), WS1.Cells(300, 25)).Address & "=" & WS2.Cells(i, 1).Address & ")*(" & _
WS1.Range(WS1.Cells(2, 43), WS1.Cells(300, 43)).Address & "=3))"
Next i
End Sub

Anzeige
AW: noch offen
KleinKatha
Hallo Chris,
ist doch keine Schande, dass du das nicht hinbekommst. Frauen sind halt ab und zu ein bisschen anspruchsvoll ;o)
Trotzdem danke für deine Versuche.
Gruß
Katharina
AW: SumProduct VBA
16.06.2004 17:59:54
KleinKatha
Ich habe das ganze nochmal auseinandergenommen und der Fehler liegt in der Zeile:
WS2.Range(WS2.Cells(6, 1)).Activate
"Die Methode 'Range' für das Objekt '_Worksheet' ist fehlgeschlagen"
Hier der ganze Code:
Dim WS1 As Worksheet, WS2 As Worksheet
Set WS1 = Worksheets("data")
Set WS2 = Worksheets("statement")
WS2.Range(WS2.Cells(6, 1)).Activate
Gruß
Katharina
AW: SumProduct VBA
Ulf
WS2.Cells(6, 1).Activate
Ulf
Anzeige
AW: SumProduct VBA
KleinKatha
Hallo Ulf,
danke für den Versuch. Die Fehlermeldung hat sich geändert ;o)
Im Gesamtkontext bekomme ich die Fehlermeldung "Typen unverträglich"
x = WorksheetFunction.SumProduct(WS1.Range(WS1.Cells(2, 25), _
WS1.Cells(300, 25)) = WS2.Cells(i, 1))
Gruß
Katharina
AW: SumProduct VBA
Ulf
Durch das zweite = erhälst du einen Wahrheitswert, das willst du doch nicht, oder?
Ulf
AW: SumProduct VBA
KleinKatha
Hallo Ulf,
nein, einen Wahrheitswert möchte ich nicht. In der normalen Tabellenfunktion hat es so auch funktioniert, nur halt nicht in VBA. Eigentlich soll ....
SumProduct(WS1.Range(WS1.Cells(2, 25), WS1.Cells(300, 25)) = WS2.Cells(i, 1)) die erste Bedingung dafür sein, dass gezählt wird.
Mit einer weiteren Bedingung könnte es dann z.B. so aussehen:
SumProduct((WS1.Range(WS1.Cells(2, 25), WS1.Cells(300, 25)) = WS2.Cells(i, 1))* _
(WS1.Cells(1,3)=4)
Gruß
Katharina
Anzeige
offen oT
Ulf
oT
AW: offen oT
KleinKatha
Was heißt oT ?
AW: offen oT
Ulf
ohne text, ich wollte nur, dass die Frage noch als offen gekennzeichnet ist.
Ulf
AW: SumProduct VBA
KleinKatha
Viiiiieeeeelen Dank für eure hartnäckige Fehlersuche.
Im Folgenden werde ich bestimmt wieder irgendeinen kniffligen Fehler haben, aber ich weiß ja, wo man auf gute Hilfe bauen kann.
Dankbare Grüße
Katharina
Evaluate scheint Lösung
ChrisL
Hi Katha
Reinhards Hinweis scheint richtig...

Sub t4()
Dim WS1 As Worksheet
Dim WS2 As Worksheet
Dim i As Byte
Set WS1 = Worksheets("Tab1")
Set WS2 = Worksheets("Tab2")
For i = 1 To 5
MsgBox Evaluate("=SumProduct((" _
& WS1.Range(WS1.Cells(2, 25), WS1.Cells(300, 25)).Address & "=" & WS2.Cells(i, 1).Address & ")*(" & _
WS1.Range(WS1.Cells(2, 43), WS1.Cells(300, 43)).Address & "=3))")
Next i
End Sub

Gruss
Chris
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige