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

Funktion SumProduct richtig anwenden

Funktion SumProduct richtig anwenden
11.08.2016 11:29:32
Tanja
Hallo Liebe Forumsmitglieder,
ich versuche vergeblich eine Excel-Formel in eine VBA Formel umzuwandeln. Die Beispieldatei ist hier abrufbar:
https://www.herber.de/bbs/user/107554.xlsm
Ich versuche auf Basis von zwei vorgegebenen Werten (Art und Index-Name) die hinterlegte Gebühr aus einen anderen Reiter (Gebühr) zu ermitteln.
Grundsätzlich kann es pro Indexnamen zwei Arten geben, und damit zwei Gebühren.
In meinen bisherigen Excel habe ich mittels einer SummenProdukt-Funktion aus der Art und dem Indexnamen mir die Zeilennummer aus dem Reiter Gebühren ausweisen lassen (damit habe ich dann in weiteren Formeln weitergerechnet, was ich hier nicht thematisieren will). Ich will nun diese Schritte mit VBA automatisieren. Nur die Ermittlung der Zeilennummer will mir nicht gelingen. Im beigefügten Sheet habe ich ein Beispiel dargestellt. der Bereich A1:C3 ist die Tabelle. Das erwartete Ergebnis ist in Spalte D und die Excelformel in Spalte E.
So lautet mein Makro, das aktuell aber auf Fehler (Typenunverträglichkeit) läuft:

Sub ZeilenindexExecution()
Dim wsDatenbasis As Worksheet
Dim wsExcecL As Worksheet
Dim wsClearL As Worksheet
Dim ZeileE As Double
Dim letzteZeile As Long
Dim i As Long
Set wsDatenbasis = ActiveWorkbook.Sheets("Datenbasis")
letzteZeile = wsDatenbasis.Cells(Rows.Count, 1).End(xlUp).Row
Set wsExcecL = ActiveWorkbook.Sheets("Execution Gebühren")
'Gibt den Zeilenindex für den Index aus Sheet Execution Gebühren zurück
For i = 2 To letzteZeile
ZeileE = Application.WorksheetFunction.SumProduct((wsExcecL.Range("A2:A4") = wsDatenbasis.Range( _
_
_
_
"A" & i)) * _
(wsExcecL.Range("E2:E34") = wsDatenbasis.Range("B" & i)), Application.WorksheetFunction.Row( _
wsExcecL.Range("A" & i)))
Range("C" & i).Value = ZeileE - 1
Next i
End Sub

Ich hoffe jemand kann mir weiter helfen und meine Frage ist verständlich genug.
vg Tanja

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Funktion SumProduct richtig anwenden
14.08.2016 15:42:12
fcs
Hallo Tanja,
unter VBA funktioniert die Funktion SUMMENPRODUKT nur mit Zellbereichen.
Die Variante im Tabellenblatt mit der Multiplikation von berechneten Ausdrucken, wie du sie anwendest, geht unter VBA nicht.
Du musst hier andere Methoden verwenden.
A) Die zu suchenden Werte werden zeilenweise in der Liste der Gebühren gesucht.
B) Die Berechnungsformel wird im Zellbereich eingefügt und dann durch die Werte ersetzt.
Gruß
Franz
'Variante mit zeilenweiser Berechnung und Wertevergleich
Sub ZeilenindexExecution()
Dim wsDatenbasis As Worksheet
Dim wsExcecL As Worksheet
Dim letzteZeile As Long
Dim i As Long
Dim arrGeb, varInstr_Art, varIndexName
Dim Zeile As Long
Set wsDatenbasis = ActiveWorkbook.Sheets("Datenbasis")
Set wsExcecL = ActiveWorkbook.Sheets("Execution Gebühren")
'Zellbereich mit Gebühren in Datenarray einlesen
With wsExcecL
letzteZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
arrGeb = .Range(.Cells(2, 1), .Cells(letzteZeile, 3))
End With
'Gibt den Zeilenindex für den Index aus Sheet Execution Gebühren zurück
With wsDatenbasis
letzteZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 2 To letzteZeile
varInstr_Art = .Cells(i, 1).Value
varIndexName = .Cells(i, 2).Value
For Zeile = LBound(arrGeb, 1) To UBound(arrGeb, 1)
If arrGeb(Zeile, 1) = varInstr_Art _
And arrGeb(Zeile, 2) = varIndexName Then
.Cells(i, 3).Value = Zeile
Exit For
End If
Next
Next i
End With
End Sub
'Variante mit Formel
Sub ZeilenindexExecution_2()
Dim wsDatenbasis As Worksheet
Dim wsExcecL As Worksheet
Dim letzteZeile As Long
Dim strFormel As String
Set wsDatenbasis = ActiveWorkbook.Sheets("Datenbasis")
Set wsExcecL = ActiveWorkbook.Sheets("Execution Gebühren")
'Formel zur Indexberechnung
With wsExcecL
letzteZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
strFormel = "=SUMPRODUCT(('" & .Name & "'!R2C1:R" & letzteZeile & "C1=RC1)" _
& "*('" & .Name & "'!R2C2:R" & letzteZeile & "C2=RC2)," _
& "ROW('" & .Name & "'!R2C1:R" & letzteZeile & "C1))-1"
End With
'Gibt den Zeilenindex für den Index aus Sheet Execution Gebühren zurück
With wsDatenbasis
letzteZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
If letzteZeile 

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige