Anzeige
Archiv - Navigation
1520to1524
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

Evaluate mit deutschen Formeln

Evaluate mit deutschen Formeln
20.10.2016 23:23:45
Niclaus
Grüezi miteinander
Ich habe folgende Funktion:

Function ZelleAuswerten(Zelle As Range)
xx = Zelle.Value
ZelleAuswerten = Evaluate(xx)
End Function

Diese Funktion funktioniert, wenn xx = "1+1+1" ist oder wenn xx = "SUM(A1:A2)" ist.
Sie funktioniert aber nicht, wenn xx = "SUMME(A1:A2)" ist. Ich erhalte dann die Fehlermeldung "#NAME?".
Weiss jemand, wie man mit Evaluate() auch deutsche Formeln evaluieren kann?
Vielen Dank und schöne Grüsse
Niclaus

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Evaluate mit deutschen Formeln
20.10.2016 23:53:05
Daniel
Hi
ob das in VBA mit Deutsch geht, weiß ich nicht.
wenn du das Evaluate in eine Excelzelle brauchst dann kannst du diese auch verwenden. Sie ist nur etwas versteckt.
Markiere die Zelle A1 und erstelle einen Excelnamen "XXX" mit dieser Formel bei "bezieht sich auf:
=Auswerten(Tabelle1!B1)

schreibe dann in die Zelle A1 die Formel =XXX und die Funktion Auswerten wird ausgeführt.
Das Auswerten entspricht dem Evaluate und verarbeitet als Excelfunktion deutsche Formeltexte.
Warum sie nicht als Normale Excelformel zur verfügung steht sondern nur als Name, kann ich dir jetzt auch nicht sagen, das hat MS halt so programmiert.
eine Kleine Einschränkung ist hier die festlegung auf den Zellbezug, dh die Zelle aus dem der Formeltext gelesen wird.
Du kannst hier zwar mit relativen Zellbezügen arbeiten (Text aus linker/rechter Nachbarzelle), was für das meiste ausreichen sollte, aber du kannst halt den Zellbezug nicht mehr frei festlegen und müsstest für Varianten im Zellbezug neue Namen anlegen.
Gruß Daniel
Anzeige
AW: Evaluate mit deutschen Formeln
24.10.2016 17:55:22
Niclaus
Grüezi Daniel
Vielen Dank!
Die Möglichkeit mit Namen und Auswerten ist mir geläufig. Mit VBA wäre mir besser gedient!
Viele Grüsse Niclaus
AW: Evaluate mit deutschen Formeln
24.10.2016 18:01:27
Luc:-?
Lies meinen BT per FORUMSLISTE! Das ist hier die Norm, nicht BEITRAGSLISTE! :-|
Luc :-?
AW: Evaluate mit deutschen Formeln
24.10.2016 18:53:20
Daniel
Hi
per VBA würde ich
- den Namen mit der Auswertefunktion in eine Zelle schreiben
- den auszuwertenden deutschen Formeltext in die Zelle schreiben, auf die sich der Name mit dem Auswerten bezieht
- den Wert der Zelle mit der Auswertefunktion auslesen.
Gruß Daniel
Ja, das kann man, aber nicht direkt, ...
21.10.2016 05:08:29
Luc:-?
…Niclaus;
Daniel hat ja bereits AUSWERTEN erwähnt, nur hat er sich da etwas geirrt:
• Das Auswerten entspricht dem Evaluate und verarbeitet als Excelfunktion deutsche Formeltexte.
  Das stimmt nicht ganz. Evaluate ist eine vbFkt und verarbeitet bekanntlich nur FmlTexte in US-Original-Notation (ggf auch französische), AUSWERTEN ist eine alte XLM-Fkt in der uralten MakroSprache von Xl4, was wohl auch das Folgende erklärt.
• Warum sie nicht als Normale Excelformel zur verfügung steht sondern nur als Name, kann ich dir jetzt auch nicht sagen, das hat MS halt so programmiert.
  Ja, vor ca 25 Jahren für Xl4! Mit VBA hat man idR mehr Möglichkeiten und die alten MakroBlätter wdn nur aus Kompa­tibi­litäts­gründen noch mitge­führt, erfordern aber wg der Xl-Neu­gestaltung nun Speicherung der sie verwen­denden Datei als .xlsm/b!
• eine Kleine Einschränkung ist hier die festlegung auf den Zellbezug, dh die Zelle aus dem der Formeltext gelesen wird.
  Das ist schlicht falsch! Der FmlText kann auch direkt in der benannten Fml angegeben wdn, zB so: FmlTextAuswert → =AUSWERTEN("SUMME(A10:A12)")
• Du kannst hier zwar mit relativen Zellbezügen arbeiten (Text aus linker/rechter Nachbarzelle), was für das meiste ausreichen sollte, aber du kannst halt den Zellbezug nicht mehr frei festlegen und müsstest für Varianten im Zellbezug neue Namen anlegen.
  Auch falsch! Man könnte die BereichsAngabe des FmlTextes auch dynamisch gestalten. Nur ist nicht immer alles möglich, weil auch benannte Fmln von den Zellen abhängen, in die ihre Namen als Fmln eingetragen wdn. Sie unterliegen damit der diesbzgl Xl-Steuerung.
Wenn du aber zB mit einer UDF einen dt FmlText auf Evaluate-Basis auswerten willst, kommt es darauf an, ob der auch als echte Fml vorliegt. Dann könnte man nämlich auch die Übersetzung ins Original auslesen und die, ggf modifiziert, verwenden. Ein reiner Text wird nicht übersetzt und die Tricks, das doch zu erreichen, fktionieren nur in einer SubProzedur, weil zumindest temporär eine echte Fml, benannt oder in einer Zelle, angelegt wdn muss.
Man kann einen solchen FmlText aber auch als echte Fml in eine Auswertungs-UDF einbinden, wobei das Ergebnis dieser Fml natürlich irrelevant ist. Die UDF liest aber ihre eigene Fml aus und isoliert daraus dann die übersetzte, die dann von ihr als Text per Evaluate berechnet wdn kann. Das ist aber ziemlich anspruchsvoll und ggf nichts für das von dir angegebene VBA-Level.
Übrigens habe ich mich schon vor vielen Jahren mit derartiger Problematik beschäftigt — ganz ohne Evaluate. Das könntest du natürlich auch versuchen, wäre aber 'ne HeidenArbeit. Sinnvoller wäre es hier allemal, eine Notationsform zu entwickeln, die einen linear-formalen analytischen Algorithmus aufbaut, der dann Schritt-für-Schritt berechnet wird. Das beschäftigt mich zZ, wird aber noch Wochen, Monate oder gar Jahre dauern…
Feedback nicht unerwünscht! Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Ja, das kann man, aber nicht direkt, ...
24.10.2016 18:03:08
Niclaus
Hallo Luc
Vielen Dank für Deine Hinweise.
Seinerzeit habe ich mich auch mit Excel4-Makros rumgeschlagen! - Jetzt warte ich halt noch einmal 20, 25 Jahre, dann gibt es vielleicht eine Formel, mit der man deutsche Formel-Texte auswerten kann.
Viele Grüsse
Niclaus
Warum warten? Trainieren und dann selber ...
24.10.2016 19:42:37
Luc:-?
…machen, Niclaus, ;-)
denn auf MS kannst du in dieser Frage wahrscheinlich bis zum St.Nimmerleins-Tag warten! Denn dt VBA gab's ja auch mal und das haben sie ja wohl nicht ohne Grund eingestellt.
Noch ein Tipp: Eine in eine Auswertungs-UDF (als TeilFml in entsprd UDF-Argument) eingebaute auszuwertende Fml in lokaler Notation sollte in ihren variablen Teilen so aufgebaut sein, dass sie einen Fehlerwert oder ein anderes markantes Ergebnis liefert. Daran kann das UDF-Pgm dann erkennen, dass dieser Teil seiner eigenen Fml ausgewertet wdn soll, ihn (ihr entsprd Argument) aus Application.ThisCell.Formula isolieren, vollständig argumentieren, mit Evaluate auswerten und dieses Ergebnis als eigenes liefern.
Luc :-?
Anzeige
AW: Warum warten? Trainieren und dann selber ...
26.10.2016 10:07:11
Niclaus
…machen, Niclaus, ;-)
Ja, Luc, ich bin schon seit Jahren dran. Folgendes habe ich bisher "verbrochen" und erweitere es immer wieder:
Option Compare Text
Function auswertenNEU(Zelle As Range)
xx = Zelle.Value
xx = Replace(xx, ";", ",")
xx = Replace(xx, "WENNS", "IFS")
xx = Replace(xx, "WENN", "IF")
xx = Replace(xx, "SUMMENPRODUKT", "SUMPRODUCT")
xx = Replace(xx, "SUMME", "SUM")
xx = Replace(xx, "ANZAHL2", "COUNTA")
xx = Replace(xx, "ANZAHL", "COUNT")
xx = Replace(xx, "MITTELWERT", "AVERAGE")
auswertenNEU = Evaluate(xx)
End Function
Aber über so primitive Formulierungen sträuben sich sogar mir selber die Haare! Auf der Suche nach etwas professionellerem und eleganterem habe ich hier ins Forum meine Frage gestellt.
Viele Grüsse Niclaus
Anzeige
So umständlich musst du es nicht machen, ...
28.10.2016 03:17:18
Luc:-?
…Niclaus;
ich weiß zwar nicht, wo und wie die Fmln vorliegen, vermutlich als Doku, aber du solltest die Fmln nicht als ein­fachen Text ein­tragen, sondern per Fml aus ihrer 1.Anwen­dungs­Zelle* holen. Dabei kann man, wie im Bsp unten gezeigt, beide Nota­tions­Formen, die lokale (zwecks Doku) und das US-Original (zwecks Eva­luie­rung) per Matrix­Fml in einer Verbund­Zelle unter­bringen (natürlich auch beide in Extra­Zellen). Hier ist deshalb nur die lokale Form zu sehen (die andere wird im Fml­Teil des Bsps nur zur Kontrolle angezeigt).
Diese Fmln sind natürlich ebenfalls Texte, deren Original­Form aber mit einer auf der vbFkt Evaluate basierenden UDF wie hier auch in einer Zell­Fml oder direkt in einer Sub­Prozedur aus­ge­wertet wdn kann. Dabei müssen ggf (relative) Bezugs­Adressen ange­passt wdn, was hier mit WECHSELN geschieht.
Falls nicht auf EinsatzZellen verlinkt wdn kann bzw soll, muss die Fml mit irgend­welchen Bezugs­Adressen als Fml (nicht als FmlText!) eben­falls in der Doku vor ihrem Doku-Text stehen. Die Fml-Auslese­Fml bezieht sich dann auf diese Zelle, die kein sinn­volles Ergeb­nis anzeigen muss (kann auch ein Fehler­wert sein!).
* Die im nachfolgd gezeigten Bsp verwendete UDF TextOf ist dafür (und Anderes) wahrscheinl besser geeignet als die neue Xl-Fkt FORMELTEXT (ab Xl2013/16).
 HIJK
1
⇒SUMMENPRODUKT(H2:H4;I2:I4)Muster110Die gleiche Fml in US-Original-No-220tation ist in der 2.Zelle des obigen 330Zellverbunds verborgen. Dazu wur-140140de erst die unten gezeigte Matrix-440fml über beide Zellen eingegeben 550und dann das Format der Muster-660Verbundzelle mit dem Formatpin-770770sel auf beide Zellen übertragen.H1:I1: {=WAHL(SPALTE(A1:B1);TextOf(H5;2);TextOf(H5;0))} I1: =SUMPRODUCT(H2:H4,I2:I4)I5;I9:=TxEval(T(JETZT())&WECHSELN(I$1;"H2:H4,I2:I4";ADRESSE(ZEILE(H2);SPALTE(H2);4)&":"&ADRESSE      (ZEILE(H4);SPALTE(H4);4)&","&ADRESSE(ZEILE(I2);SPALTE(I2);4)&":"&ADRESSE(ZEILE(I4);SPALTE(I4);4)))
2
3
4
5
6
7
8
9
10
11
12
13

Die beiden hier verwendeten UDFs sind im Herber-ForumsArchiv enthalten. Die aktuelle Version von TextOf (mit HLink-TeilTexte-Auslese­Zusatz) ist in einer kürzlich für Paulo hoch­gela­denen Text­Datei zu finden (hier können aber auch andere UDFs ver­wendet wdn, die beide oder gar alle 5 FmlVarianten auslesen können). TxEval benötigst du nur, wenn du FmlTexte in ZellFmln evaluieren willst. Aber auch in diesem Fall könntest du eine Trivial-Umset­zung der vbFkt verwenden. In einer Sub­Prozedur kannst du Bezugs­Adressen auch mit vbFkt (bzw -Methode) Replace aus­tauschen.
Gruß, Luc :-?
PS: Falls du hier noch antworten willst, musst du über einen Link zum Forums-Thread verfügen oder ihn dir selbst zusammen­stellen (ist nicht schwer!), solange er noch im unsicht­baren Teil des Forums vorhanden ist. In einigen Tagen wird das nicht mehr der Fall sein. Ansonsten kann ich nur hoffen, dass du auch noch im Archiv nachschaust, aber dort (auch über DEINE BEITRÄGE erreichbar) kann man nicht antworten. Du hast dir halt zuviel Zeit gelassen…
Anzeige

56 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige