Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: SumProduct mit Bereichsnamen in VBA anwenden

SumProduct mit Bereichsnamen in VBA anwenden
Mike
Hallo,
ich möchte eine Matrixformel in VBA anwenden, wobei Region, Konzern und Status Breichsnamen sind.
Beispiel:
=SUMMENPRODUKT((Region="N01")*(Konzern="Metro")*(Status="1-offen"))

Wer kann mir helfen?
Vielen Dank!
Mike
Anzeige

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

Betreff
Benutzer
Anzeige
SumProduct nicht direkt in VBA
03.10.2009 17:30:08
Erich
Hallo Mike,
schau mal hier: https://www.herber.de/forum/archiv/680to684/t682601.htm
und hier:

Sub tst()
MsgBox Evaluate("=SUMPRODUCT((Region = ""N01"") * (Konzern = ""Metro"")" & _
" * (Status = ""1-offen""))")
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: SumProduct nicht direkt in VBA
03.10.2009 19:33:01
Mike
Hallo Erich,
es funktioniert perfekt! Wie sieht die Zeile jedoch aus, wenn ich anstatt Bereichsnamen,
Range-Variablen definiert habe und diese für Region, Konzern und Status verwenden möchte?
Vielen Dank!
Grüsse aus Kölle :-)
SumProduct mit Evaluate
03.10.2009 19:50:06
Erich
Hi Mike,
das hier läuft auch alles (die Dollarzeichen für absolute Adressierung
wirst du beim Evaluate aber kaum brauchen):

Sub tst()
MsgBox Evaluate("=SUMPRODUCT((Region=""N01"")*(Konzern=""Metro"")" & _
"*(Status=""1-offen""))")
MsgBox Evaluate("=SUMPRODUCT((A17:A26=""N01"")*(C1:C10=""Metro"")" & _
"*(M2:M11=""1-offen""))")
MsgBox Evaluate("=SUMPRODUCT((A$17:A$26=""N01"")*(C1:C10=""Metro"")" & _
"*($M2:$M11=""1-offen""))")
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: SumProduct mit Evaluate
03.10.2009 20:01:40
Mike
Hi Erich,
nochmals danke, aber ich meinte es so...
Function SumProd(sRegion As String, sKonzern As String, sStatus As String)
Dim rRegion  As Range
Dim rKonzern As Range
Dim rStatus  As Range
Dim vErgebnis
With ActiveWorkbook.Worksheets("Wartungen HE09")
Set rRegion = .Range("D5:D8000")
Set rKonzern = .Range("B5:B8000")
Set rStatus = .Range("I5:I8000")
End With
SumProd = Evaluate("=SUMPRODUCT((" & rRegion & " = " & sRegion & ") * (" & rKonzern & " = " & _
sKonzern & ") * (" & rStatus & " = " & sStatus & "))")
End Function
Leider erhalte ich eine Fehlermeldung 'Typen unverträglich' :-(
Anzeige
rRegion.Address usw.
03.10.2009 21:00:16
Erich
Hi Mike,
hier zwei Möglichkeiten, die hoffentlich dasselbe Ergebnis bringen:

Function SumProd(sRegion As String, sKonzern As String, sStatus As String)
SumProd = Evaluate("=SUMPRODUCT(('Wartungen HE09'!D5:D8000=""" & sRegion & """)" & _
" * ('Wartungen HE09'!B5:B8000" & "=""" & sKonzern & """)" & _
" * ('Wartungen HE09'!I5:I8000=""" & sStatus & """))")
End Function
Function SumProdR(sRegion As String, sKonzern As String, sStatus As String)
Dim rRegion  As Range, strReg As String
Dim rKonzern As Range, strKon As String
Dim rStatus  As Range, strSta As String
With ActiveWorkbook.Worksheets("Wartungen HE09")
Set rRegion = .Range("D5:D8000")
Set rKonzern = .Range("B5:B8000")
Set rStatus = .Range("I5:I8000")
strReg = "'" & .Name & "'!" & rRegion.Address(0, 0)
strKon = "'" & .Name & "'!" & rKonzern.Address(0, 0)
strSta = "'" & .Name & "'!" & rStatus.Address(0, 0)
End With
SumProdR = Evaluate("=SUMPRODUCT((" & strReg & "=" & sRegion & ") * (" & _
strKon & "=" & sKonzern & ") * (" & _
strSta & "=" & sStatus & "))")
End Function
Bei deinem Ansatz mit "...((" & rRegion & " = " & ... wird versucht,
den Inhalt der Variablen rRegion als Text mit den Texten davor und dahi8nter zu verketten.
Das geht nicht - rRegion ist ein Range und besteht aus vielen Zellen, da kann nicht einfach Value
als Standardeigenschaft verwendet werden wie bei einer einzelnen Zelle.
Evaluate kann man sich so vorstellen, dass Excel mit einer Zeichenkette (in Gänsefüßen) aufgerufen wird
mit dem Auftrag, diese Zeichenkette auszuwerten.
Der Ausdruck, den Excel hier bekommen soll, ist eine SUMMENPRODUKT-Formel, in der stehen Bereiche
nicht als Objekte, sondern mit ihren Adressen (z. B. A1:A15).
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
...oder als Matrixkonstanten(text)! Gruß owT
03.10.2009 21:50:22
Luc:-?
:-?
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige