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

Syntax bei Evaluate / Public Function

Syntax bei Evaluate / Public Function
09.03.2009 21:56:08
Peter
Guten Abend
Mit untenstehender Funktionen habe ich versucht, 2 Matrixformeln in VBA zu lösen. Die Matrixformeln habe ich von Josef Ehrensberger erhalten.
Die UDF GRO resp. KLE geben mir jedoch den Fehlerwert 2015 zurück
Ich möchte in G1 das gleiche Ergebnis erhalten, wie in H1, resp. in G2 wie in H2 (vgl. Beispieldatei).
Mir ist nicht klar, weshalb das nicht funktioniert.
Danke für jeden Hinweis.
Gruss, Peter

Public Function GRO(Bereich As Range, Anzahl As Long)
Dim BName As String
BName = Right(Bereich.Name, Len(Bereich.Name) - 1)
'Evaluate("SUM(LARGE(Zahlen,ROW(INDIRECT(("1:"&D1)))))")
GRO = Evaluate("SUM(LARGE(" & BName & ",ROW(INDIRECT(( """ & "1:" & "&" & Anzahl & ")))))""")
End Function



Public Function KLE(Bereich As Range, Anzahl As Long)
Dim BName As String
BName = Right(Bereich.Name, Len(Bereich.Name) - 1)
'Evaluate("SUM(SMALL(Zahlen,ROW(INDIRECT(("1:"&D2)))))")
KLE = Evaluate("SUM(LARGE(" & BName & ",ROW(INDIRECT(( """ & "1:" & "&" & Anzahl & ")))))""")
End Function


https://www.herber.de/bbs/user/60142.xls

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Syntax bei Evaluate / Public Function
10.03.2009 11:55:06
fcs
Hallo Peter,
Matrixformeln können mit der Evaluate-Funktion leider nicht ausgewertet werden bzw. es gibt keinen Parameter, um Evalate mitzuteilen einen Ausdruck als Matrixformel auszuwerten.
Wenn du die Matrixformel undbedingt durch eine Userdefinierte Funktion ersetzen willst, dann müssen in der UDF alle Berechnungen integriert werden, die die Matrixformel ausführt.
Dabei ist die UDF bei der Ausführung dann im allgemeinen wesentlich langsamer als die Standard-Funktionen in der Tabelle.
Gruß
Franz
AW: Syntax bei Evaluate / Public Function
10.03.2009 13:43:39
Peter
Hallo Franz
Danke für die Mitteilung.
Ich habe vor kurzem eine andere Matrixformel (vgl. nachstehend) in eine Funktion umgewandelt. Und diese hat mir immer die gleichen Ergebnisse wie die zugrundeliegende Matrixformel geliefert.
Heisst das nun, dass gewisse Matrixformeln (je nach Aufbau) doch in eine UDF eingebunden werden können und andere halt nicht?
Gruss, Peter

Public Function ABIG(Bereich As Range, Anzahl As Long)
Dim BName As String
BName = Right(Bereich.Name, Len(Bereich.Name) - 1)
'{=SUMME(WENN(Zahlen>=KGRÖSSTE(Zahlen;D1);Zahlen))}
'Evaluate("SUM(IF(Zahlen>=LARGE(Zahlen,D1),Zahlen))")
ABIG = Evaluate("SUM(IF(" & BName & ">=LARGE(" & BName & "," & Anzahl & ")," & BName & "))")
End Function


Anzeige
Quatsch!
10.03.2009 15:36:05
Josef
@ Franz,
das Ist Blödsinn!
EVALUATE wertet sehr wohl Matrixformeln aus, es erkennt sozusagen automatisch das es sich um Matrixformeln handelt.
@ Peter,
der Sinn, warum man eine einfache Formel unbedingt in VBA umsetzen muss, erschliesst sich mir zwar nicht, aber das muss es ja auch nicht;-))
Das INDIREKT() mag Evaluate nicht und ist auch unsinnig, weil der Formelstring so zusammengestellt wird, wie man ihn braucht.
Public Function GRO(Bereich As Range, Anzahl As Long) As Double
  Dim BName As String
  BName = Right(Bereich.Name, Len(Bereich.Name) - 1)
  'Evaluate("SUM(LARGE(Zahlen,ROW(INDIRECT(("1:"&D1)))))")
  GRO = Evaluate("SUM(LARGE(" & BName & ",ROW(1:" & Anzahl & ")))")
  
End Function

Public Function KLE(Bereich As Range, Anzahl As Long) As Double
  Dim BName As String
  BName = Right(Bereich.Name, Len(Bereich.Name) - 1)
  'Evaluate("SUM(SMALL(Zahlen,ROW(INDIRECT(("1:"&D2)))))")
  KLE = Evaluate("SUM(SMALL(" & BName & ",ROW(1:" & Anzahl & ")))")
End Function

Gruß Sepp

Anzeige
AW: Quatsch! --> Was gelernt :-)
10.03.2009 16:47:27
fcs
Hallo Sepp,
da hab ich dann auch mal was dazugelernt. Danke
Bin beim Testen, dann wohl an der INDIREKT-Klippe gescheitert und hab den falschen Schluß gezogen.
Gruß
Franz
AW: Quatsch! --> Was gelernt :-)
10.03.2009 18:20:24
Peter
Hallo Sepp
Fantastisch! Aber warum kann ich hier INDIRECT weglassen?
Gruss, Peter
Logik
10.03.2009 18:25:09
Josef
Hallo Peter,
das ist doch logisch.
In einer Formel wandelt INDIREKT() einen Text in einen Bezug um, im Code setzt du den ganzen Formelausdruck als String, also Text, zusammen und deshalb ist INDIREKT() hier überflüssig und wird ausserdem von EVALUATE nicht umgesetzt.
Gruß Sepp

Anzeige
AW: Logik - vielen Dank, macht Sinn! owT
10.03.2009 19:24:20
Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige