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

benannte Bereiche in WorksheetFunction verw.

benannte Bereiche in WorksheetFunction verw.
15.05.2007 07:43:12
Peter
Guten Tag
Ich möchte die Funktion Summenprodukt in VBA verwenden (in der Tabelle nur die entsprechenden Werte eintragen). Ich habe mir diese Formel zuerst mit dem Recorder aufgezeichnet und dann mal den ersten Teil (.Cells(5, 8) = WorksheetFunction.SumProduct) angepasst.
Mir ist nicht klar, wie ich die Argumente in den Klammern aufrufe.
Q_F, Q_VW und Q_B sind alles Bereiche in einer Tabelle namens "Import"
Link ist eine Zelle in einer Tabelle namens "Cockpit"
RC32 ist der Bezug auf Spalte AF der jeweiligen Zeile, wo dann der Eintrag erfolgen soll
Muss ich die Namen Q_F, Q_VW und Q_B dimensionieren?

Sub eintragen()
Dim zNr As Long
Dim iSheet As Worksheet
Set iSheet = ThisWorkbook.Sheets("Inventar")
strEND = Sheets("Inventar").Cells(65536, 4).End(xlUp).Row           'ermittelt letzten Eintrag  _
in Spalte D
zNr = 8
Do While zNr > strEND
If .Cells(zNr, 4)  "" Then
With iSheets
.Cells(ZNr, 5) = WorksheetFunction.SumProduct((Q_F = Link) * (Q_VW = RC32) * (Q_B))
zNr = zNr + 1
Loop
End With
End Sub


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

Betreff
Datum
Anwender
Anzeige
AW: benannte Bereiche in WorksheetFunction verw.
15.05.2007 07:55:24
haw
Hallo Peter,
so z.B.:

Sub eintragen()
Dim zNr As Long
Dim iSheet As Worksheet, imSheet As Worksheet
Set iSheet = ThisWorkbook.Sheets("Inventar")
Set imSheet = ThisWorkbook.Sheets("Import")
strEND = iSheet.Cells(65536, 4).End(xlUp).Row
zNr = 8
Do While zNr > strEND
If .Cells(zNr, 4)  "" Then
With iSheet
.Cells(zNr, 5) = WorksheetFunction.SumProduct((imSheet.Range("Q_F").Value = Link) *  _
_
(imSheet.Range("Q_VW").Value = .Cells(zNr, 32).Value) * (imSheet.Range("Q_B"). _
Value))
zNr = zNr + 1
End With
Loop
End Sub


Gruß
Heinz

Anzeige
AW: benannte Bereiche in WorksheetFunction verw.
15.05.2007 10:29:00
Peter
Vielen Dank für die Rückmeldung.
Nach Konsultation weiterer Beiträge habe ich festgestellt, dass man mit VBA nur einfache Berechnungen mit der Worksheet Funktion Summenprodukt machen kann.
Deshalb habe ich versucht, die Adressen der auszuwertenden Bereiche entsprechenden Variablen zu übergeben.
Bei der zentralen Stelle im Code, also bei .cells(zNr,5) = ...... erhalte ich die Fehlermeldung „TYPEN UNVERTRÄGLICH“
Kann mir jemand sagen, wo das Problem liegt?
Wenn ich den Code bis zur Zeile laufen lasse, haben die relevanten Variablen folgende Werte erhalten:
Erste Klammer (Q_F = Fonds) ergibt ( „Import!$K2:$K$3554“ = „SALK“)
Zweite Klammer (Q_VW = .cells(nNr,32) ergibt ( „Import!$A2:$A$3554“ = „524479TWD“)
Letztes Argument(Q_B) ergibt ( „Import!$D$2:$D$3554“)
Danke für jede Unterstützung!
Peter

Sub Inventar()
'Inventar wird aktualisiert
Dim zNr As Long
Dim iSheet As Worksheet
Dim strEND As String
Dim Fonds As String
Dim Q_F As String
Dim Q_VW As String
Dim Q_B As String
ThisWorkbook.Activate
Worksheets("Inventar").Activate
Set iSheet = ThisWorkbook.Sheets("Inventar")
Fonds = Range("link").Value
Q_F = "Import!" & Range("Q_F").Address
Q_VW = "Import!" & Range("Q_VW").Address
Q_B = "Import!" & Range("Q_B").Address
With iSheet
zNr = 8
strEND = Sheets("Inventar").Cells(65536, 4).End(xlUp).Row           'ermittelt letzten Eintrag  _
in Spalte D
Do While zNr  "" Then
Application.StatusBar = "Zeile " & zNr & " in Tabelle  I N V E N T A R  werden aktualisiert "
‚’’’’’’'=SUMMENPRODUKT((Q_F=Link)*(Q_VW=$AF8)*(Q_B)) ‚diese Formel soll mit Worksheet

Function ausgewertet werden
.Cells(zNr, 5) = WorksheetFunction.SumProduct((Q_F = Fonds) * (Q_VW = .Cells(zNr, 32) * Q_B))
Application.StatusBar = False
End If
zNr = zNr + 1
Loop
End With
End Sub


Anzeige
@haw: Hier fehlt noch...
15.05.2007 12:58:49
Luc:-?
....sheets("Cockpit").Range("Link"), Heinz!
Gruß Luc :-?
PS @Peter: Man kann mit Sumproduct alles machen, wenn man Evaluate verwendet!

AW: @luc
15.05.2007 13:23:00
Peter
Hallo Luc
Danke für deine Rückmeldung.
Ich habe tatsächlich den Code in der Zwischenzeit mit Evaluate umgesetzt. Ich wollte ursprünglich ohne Evaluate arbeiten, da ich annahm, dass WorksheetFunction.Sumproduct schneller abläuft. Da ich insgesamt ca. 7000 Zeilen abfülle, hätte das etwas gebracht, wenn meine Annahme richtig ist.
Kannst du irgend eine Aussage zu Geschwindigkeit Evaluate vs. WorksheetFuncion machen?
Freundlicher Gruss, Peter

Anzeige
AW: Nee, eigentlich nicht, denn ich...
15.05.2007 13:42:22
Luc:-?
...arbeite als Entwickler in aller Regel nicht mit so großen Datenmengen, Peter.
Allerdings verwendet Evaluate natürlich die gleichen DLLs wie die WshFct, es läuft dann auch alles im Hintergrund und du kannst das nicht unterbrechen. Auch darfst du dich beim Formeleintrag nicht irren - du bekommst keine detaillierte Fehlermeldung!
Sollte also kaum langsamer sein. Bei meinen Datenmengen konnte ich jedenfalls keinen Unterschied feststellen.
Gruß Luc :-?

AW: Nee, eigentlich nicht, denn ich...
15.05.2007 13:51:00
Peter
Hallo Luc
Vielen Dank für die Rückmeldung.
Gruss, Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige