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

WorksheetFunction.SumProduct

WorksheetFunction.SumProduct
27.11.2014 11:51:04
Max
Mahlzeit alle zusammen,
ich versuche gerade die Berechnung folgender Formel:
=SUMMENPRODUKT((A1:N35="Date")*ZEILE(1:35))
in VBA durchzuführen. Allerdings erhalte ich dabei immer den Fehler "Typen unverträglich".
firstLine = WorksheetFunction.SumProduct((Worksheets(wks1).Range("A1:M100") = "Date") * Worksheets(wks1).Range("1:100").Row)
wks1 ist als String definiert und enthält den Tabellenblattname samt ""
Sinn und Zweck der ganzen Geschichte ist, das ich damit einen Startpunkt berechnen möchte.
Hat jemand ne Idee?
MfG Max
p.s. Ab wann zählt man eigentlich zu den "Excel-Profies"?

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Dem 'WorksheetFunction'-Objekt steht ...
27.11.2014 12:14:15
Luc:-?
…die in ZellFmln wirksame XlSteuerung nicht zV, Max,
weshalb hier streng nach Vorschrift argumentiert wdn muss, was die Manipulation von Bereichen per Operations­Zeichen ausschließt. Dadurch entsteht der Fehler. Wenn du das nicht total umstellen, also alle Argument-Datenfelder separat ausrechnen willst, solltest du die vbMethode Evaluate verwenden, was eine normale FmlNotation (als Text), aber im US-Original erfordert.
Die andere Frage kannst du dir selbst beantworten, wenn du hier mal 'ne zeitlang Forum und Archiv studierst… ;-]
Gruß, Luc :-?

Allerdings ließe sich die 1.DatumsZeile in VBA ...
27.11.2014 13:00:55
Luc:-?
…auch anders ermitteln…
Luc :-?

Anzeige
AW: Dem 'WorksheetFunction'-Objekt steht ...
27.11.2014 13:20:59
Max
Erst mal danke für die ausführliche Erklärung Luc :-?,
die Evaluate-Methode funktioniert in diesem Fall einwandfrei.
firstLine = Evaluate("=SUMPRODUCT((A1:N35=""Date"")*ROW(1:35))")
Heute morgen hatte ich bereits die Evaluate-Methode für folgende Formel versucht:
{=MAX((A1:N35="Date")*ZEILE(1:35))}
Excel gibt mir dabei zwar nicht direkt einen Fehler zurück, allerdings ist der Wert meiner Variablen damit "Fehler 2015". Kann mir jemand evtl. dazu noch was sagen bzw. schreiben? Das brauche ich aber nicht mehr, würde mich einfach nur mal interessieren.

Wg ZEILE, muss ROW lauten; "->"" u.{} weg! orT
27.11.2014 14:27:11
Luc:-?
Ich schrieb ja → US-Notation!
Luc :-?

Anzeige
AW: Dem 'WorksheetFunction'-Objekt steht ...
27.11.2014 14:29:45
Daniel
Hi
der Fehler kommt, weil Evaluate die Formel nicht nicht auflösen kann, das kann daran liegen, dass du die Formel falsch geschrieben hast (Zeile() ist nicht englisch!) oder aber auch daran, dass EVALUATE keine "erzwungenen" Matrixformeln beherrscht.
EVALUATE selbest erzeugt dann noch keinen Fehlerabbruch, sondern gibt nur einen Fehlerwert als Ergebnis zurück.
Wenn du diesen Fehlerwert in eine Variant-Variable schreibst, hat VBA damit kein Problem sondern läuft zunächst normal weiter (Variant-Variablen können alle Datentypen aufnehmen und damit dann auch Fehlerwerte).
Ein VBA-Fehler mit Abbruch würde erst dann entstehen, wenn du firstLine in Erwartung einer Zeilennummer den DatenTyp LONG zugewiesen hättest, denn dieser Datentyp kann mit dem Fehlerwert der Evaluate-Funktion nichts anfangen und das erzeugt dann den Fehlerabbruch.
Gruß Daniel

Anzeige
Das war jetzt aber zum falschen BT; das ...
27.11.2014 14:33:00
Luc:-?
…hättest du zum 1.BT schreiben können, jetzt war schon alles gesagt!
Luc :-?

AW: nein das war schon zum richtigen Beitrag
27.11.2014 14:39:04
Daniel
Denn erst jetzt kam die Frage auf, warum kein Fehlerabbruch erfolgt, wenn die Formel nicht aufgelöst werden kann, sondern der Fehlertext in die Variable geschrieben wird.
Auf den Teil habe ich geantwortet und der wurde erst hier gefragt.
Gruß Daniel

AW: Evaulate und Matrixformeln
27.11.2014 15:59:34
Max
An dieser Stelle noch mal vielen Dank für die ganzen Antworten.
Nur um ein paar Missverständnisse auszuräumen.
In meinem Beispiel ist "Date" keine Variable sondern tatsächlich das Wort "Date". Ich suche also kein Datum sondern ein String, was mit der Evaluate-Methode einwandfrei funktioniert.
Zu der Frage mit der Matrixformel: Mir ist natürlich klar, dass ich im VBA die US-Notation brauche. Im Code selber stand:
firstLine = Evaluate("{=Max((A1:N35=""Date"")*ROW(1:35))}")
wie ich jetzt gelernt hab sind da {} nicht erlaubt
Da ich aber mit Evaluate keine Matrixformeln berechnen kann (wenn ich das richtig verstanden hab), bleibt für mich immer noch die Frage, wie ich denn sonst Matrixformel direkt im VBA berechnen kann.
Und die Abkürzungen von Luc konnte ich zumindest für meinen Teil alle recht problemlos entschlüsseln ;)
@Daniel: danke für den letzten Vorschlag, werde den bei Gelegenheit ausprobieren.

Anzeige
AW: Evaulate und Matrixformeln
27.11.2014 16:51:20
KlausF
Hallo Max,
Da ich aber mit Evaluate keine Matrixformeln berechnen kann
Doch doch, mit Evaluate lassen sich Matrixformeln in VBA berechnen
firstLine = Evaluate("=Max((A1:N35=""Date"")*ROW(1:35))") wäre also die richtige Schreibweise
(ob allerdings Deine Formel stimmt kann ich nicht beurteilen).
Alternativ ginge auch die Schreibweise mit eckigen Klammern:
firstLine =["=Max((A1:N35=""Date"")*ROW(1:35))"]
Gruß
Klaus

AW: Evaulate und Matrixformeln
27.11.2014 17:07:55
Daniel
Hi
du kannst Matrixformeln mit Evaluate berechnen, diesbezüglich ist meine Aussage falsch.
Gruß Daniel

Die automatisch gesetzten {} sind nur in Zell-...
27.11.2014 17:28:54
Luc:-?
…Fmln erforderlich, Max,
und direkt gesetzte {} nur für MatrixKonstt zulässig. Bei allen Xl-FmlEingabe­Möglichkeiten, bei denen diese Automatik nicht möglich ist, berücksichtigt Xl diese Variante ohnehin, weshalb Xl bei Evaluate genauso handelt wie bei analogen benannten Fmln (möglicherweise wird gerade dieses Verhalten bei der Methode genutzt).
Luc :-?

Anzeige
Na gut, meinethalben... owT
27.11.2014 17:18:20
Luc:-?
:-?

AW: WorksheetFunction.SumProduct
27.11.2014 12:59:31
fcs
Hallo Max,
den Grund warum SumProduct nicht funktioniert hat Luc ja schon erklärt, wenn auch mit ein paar Hyroglyphen/bedingt verständlichen Abkürzungen.
vereinfacht ausgedrückt: unter VBA kann die Funktion nur Zellbereiche verarbeiten.
Als Ersatz für deinen Fall kannst du mit der Suchfunktion arbeiten. Entweder in einer benutzerdefinierten Function oder (wenn der Suchbegriff immer vorhanden ist) auch direkt.
Ab wann zählt man eigentlich zu den "Excel-Profies"?
Wenn die Anzahl der eigenen Fragen hier im Forum langsam gegen null geht.
Gruß
Franz
Sub aaTest()
Dim firstLine As Long
firstLine = fncStartZeile(ActiveSheet.Range("A1:M100"), "Date")
MsgBox "1. zeile mit ""Date"" : " & firstLine, , "Function fncStartZeile"
firstLine = ActiveSheet.Range("A1:M100").Find(what:="Date", LookIn:=xlValues, _
lookat:=xlWhole, Searchorder:=xlByRows).Row
MsgBox "1. zeile mit ""Date"" : " & firstLine, , "Suchfunktion direkt"
End Sub
'Code in einem allgemeinen Modul
Public Function fncStartZeile(Bereich As Range, varSuch) As Long
'Ermittelt die Nummer der 1. Zeile im Bereich in der der Suchbegriff steht
Dim Zelle As Range
Set Zelle = Bereich.Find(what:=varSuch, LookIn:=xlValues, lookat:=xlWhole, _
Searchorder:=xlByRows)
If Zelle Is Nothing Then
fncStartZeile = 0
MsgBox "Suchgegriff """ & varSuch & """ nicht gefunden", , "Suchen Startzeile"
Else
fncStartZeile = Zelle.Row
End If
End Function

Anzeige
AW: WorksheetFunction.SumProduct
27.11.2014 13:15:15
daniel
Hi
Dein Variablenname "FirstLine" lässt darauf achliessen, dass "Date" nur einmal im Bereich vorkommt und du die Zeilennummer suchst.
Das geht dann einfacher mit

firstline = sheets("...").Range("A1:M100").Find(what:="Date"), lookat:=xlwhole).row
Gibt aber einen Fehler, wenn der Suchwert nicht gefunden werden kann.
Gruß Daniel

187 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige