Benutzerdefinierte Benutzerfunktion ohne Verwendung von VBA


10

Ist es möglich, eine benutzerdefinierte Benutzerfunktion in Excel ohne Verwendung von VBA zu erstellen?
Mein Problem ist, dass ich eine lange Reihe von Standard-Excel-Funktionen habe, die zu einer sehr langen Funktion zusammengefügt sind. Diese Funktion wird in 25 verschiedenen Arbeitsblättern in meiner Arbeitsmappe verwendet. Wenn ich Änderungen daran vornehmen muss, möchte ich dies nur an einer Stelle tun und die Änderungen automatisch auf alle Blätter übertragen lassen.

Ein einfacher und trivialer Fall wäre beispielsweise, dem Ergebnis von SUM () einen hinzuzufügen, d. H. SUM (mySeries) +1 und nenne es eine neue Funktion MYSUM ().

Ich zögere, die lange Formel wegen möglicher Fehler und der zusätzlichen Komplexität in VBA zu übersetzen.


Schöne Frage, obwohl ich bezweifle, dass Sie eine Antwort finden werden. Ich denke, ein besserer Kurs wäre, um Hilfe beim Aufbau der erforderlichen Funktion in VBA zu bitten.
EliadTech

Antworten:


11

Ja, es ist möglich, wenn Sie benannte Excel-Formeln verwenden .

Angenommen, Sie müssen die Differenz zwischen den Summen zweier aufeinanderfolgender Spalten ( A5: Ax - B5: Bx ) an verschiedenen Stellen in Ihrer Arbeitsmappe berechnen ( x ist die letzte Zeile jeder Spalte):

Sie definieren also in A11 einen Namen namens diff (jeder Name kann verwendet werden) als = Summe (A $ 5: A10) -Summe (B $ 5: B10) , vorausgesetzt, die Daten beginnen in Zeile 5 bis zur vorherigen Zeile. Es kann sich um eine beliebige Zelle handeln, nicht nur um A11 , sondern die Definition ändert sich auf die gleiche Weise.

Leider fügt Excel 2010 absolute Präfixe ( $ ) und Arbeitsblattpräfixe ein, sodass Sie die Präfixe löschen müssen, aber die Ausrufezeichen beibehalten und die meisten $ -Zeichen löschen müssen .

Wenn Sie die Formeln verschieben, sind die meisten Referenzen relativ. Daher wird immer die Differenz zwischen der aktuellen und der folgenden Spalte berechnet, beginnend mit Zeile 5 bis zur Zeile vor der Gesamtzeile.

Wenn Sie also Daten zwischen C5 und D100 haben, geben Sie in C101 nur = Diff ein und es wird die Summe (C5: C100) - Summe (D5: D100) berechnet .

Natürlich können Sie in den genannten Formeln lokale oder globale Namen verwenden, wie Sie in Ihrer Frage erwähnt haben.

Weitere Informationen finden Sie unter Benannte Formeln .


2

Ich weiß, dass Sie kein VBA gesagt haben, aber wenn Sie wie folgt vorgehen, müssen Sie Ihre Formeln NICHT neu schreiben, viel über VBA wissen oder Ihre Formeln in VBA pflegen. Sie können es einmal schreiben und vergessen.

Erstellen Sie eine benutzerdefinierte Funktion, um die Formel als Zeichenfolge aus einer Zelle zu extrahieren:

Function GetFormula(Target As Range) As String
    GetFormula = Target.Formula
End Function

Erstellen Sie eine andere, um eine Zeichenfolge wie eine Formel auszuwerten:

Function Eval(Ref As String)
    Application.Volatile
    Eval = Evaluate(Ref)
End Function

Wenn Sie Ihre Hauptformel in Blatt1! A1 hätten, würden Sie diese in jede Zelle einfügen, die sie verwenden muss:

=eval(getformula(sheet1!a1))

Was ist der Vorteil dieser Methode gegenüber Excel-benannten Formeln?
DakotaD

Dies definiert tatsächlich eine Funktion, während "Benannte Formeln" nur einen Verweis auf ein Ergebnis definieren. Wenn ich beispielsweise eine Funktion erstellen möchte, die überprüft, ob eine Zelle entweder leer oder nur ein Leerzeichen ist, möchte ich sie wie folgt aufrufen =IF(BlankOrWhitespace(A5),true,false). Für benannte Formeln ist dies nicht möglich, da Sie auf den Formelinhalt einer Zelle
verweisen

1
Es gibt ein weiteres Problem, das sich aus der Verwendung von VBA ergibt. Sicherheit. Ihre Arbeitsmappe wird als unsicher eingestuft, da VBA missbraucht werden kann. Ihre Arbeitsmappe würde fälschlicherweise als Virus eingestuft.
Akangka

@ Akangkathe Grund, warum ich VBA vermeide. Das ist so traurig.
Pedro77

0

Dieser Thread ist etwas alt, aber ich bin auf der Suche nach etwas anderem darauf gestoßen und dachte, ich würde eine Arbeitsmappe teilen, die ich vor einiger Zeit erstellt habe, um genau das zu erreichen: https://www.dropbox.com/s/gf5qrjj5q81tpke/ Title_Case_Named_Range_Function.xlsx? Dl = 1

Kurz gesagt, Sie KÖNNEN eine UDF ohne VBA (sozusagen) erstellen, indem Sie eine der in Excel integrierten Formeln mit einer Zeichenfolgenausgabe von 0 entführen und eine Methode zur Interpretation der eingefügten Daten über die Manipulation von Zeichenfolgen mit benanntem Bereich entwickeln darüber hinaus ineffizient, dies zu tun. DU WURDEST GEWARNT! :) :)

METHODE:

  1. Im Beispiel habe ich sowohl = REPT ([Zellreferenz oder Text zwischen Anführungszeichen hier], 0) als auch = TEXT ([Zellreferenz oder Text zwischen Anführungszeichen hier], ";;;") als Ausgangspunkt verwendet Es kann eine Form der Benutzereingabe in eine integrierte Formel geben, die keinen sichtbaren Textergebnis in der Zelle selbst erzeugt.

  2. Dann habe ich einen benannten Bereich erstellt , der Ihrem UDF-Namen entspricht ( TCase ist das primäre Beispiel auf dem Blatt, aber es gibt auch einige andere Variationen darin). Dieser benannte Bereich verweist tatsächlich auf eine ganze Reihe anderer versteckter Namen in der Arbeitsmappe, um den FormulaText aus der Zelle zu extrahieren, in der er verwendet wird, und wendet dann eine Logik darauf an, um eine endgültige Ausgabe als Zeichenfolge zu erzeugen. Es ist erwähnenswert, dass diese Methode nur Textergebnisse und keine Zahlen zurückgeben kann (obwohl sie eine Zahl als Text zurückgeben kann, der in eine separate Zelle konvertiert werden soll).

  3. Auf seinem eigenen, = Tcase erzeugt einen Fehler , da es keine Zelle / string Referenz für sie zu interpretieren ist (im Beispiel Blatt, die Fehlermeldung nur eine Erinnerung an das Format ist , dass Bedürfnisse beachten). Durch die Kombination von TCase mit der erwarteten Excel-Formel für Zeichenfolgen mit einer Länge von 0 kann die Eingabe aus der Formel als Zeichenfolge gelesen und Ihre Logik darauf angewendet werden . Am Ende würde die Formel / Ausgabe ungefähr so ​​aussehen wie unten. Beachten Sie, dass ich die Textzeichenfolge direkt in die folgende Formel eingefügt habe, aber Sie werden im Beispielblatt sehen, dass sie auch eine einzelne Zellreferenz interpretieren kann.

    FORMEL:
    =TCase&REPT("i want to convert this mIxEd sTRing into A TITLE cAsE string!!!",0)

    AUSGABE:

    I Want to Convert This Mixed String Into a Title Case String!!!

Am Ende würde ich nicht empfehlen, diese Methode für etwas anderes als eine krankhafte Neugier zu befolgen, um zu sehen, an welche Grenzen Excel verschoben werden kann. VBA ist eine viel einfachere und elegantere UDF-Lösung, aber ich hatte zumindest Spaß daran, die Herausforderung anzunehmen.

HINWEIS: Wenn Sie sehen möchten, wie es in der Beispieldatei etwas einfacher funktioniert, verwenden Sie die Formel Formel aus der Multifunktionsleiste Formeln aus und treten Sie in einer der Zellen, in die ich ein Beispiel eingefügt habe, in die Formel ein oder aus. Ich habe alle zugrunde liegenden Named Rangesausgeblendet, um alleszu bereinigen, nachdem ich fertig war.Daher werden sienicht im Names Manager angezeigt, es sei denn, Sie blenden sie alle ein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.