Ich wollte eine benutzerdefinierte Funktion erstellen, die eine Abkürzung für sein würde if(somefunction(arg)=something,"sometext",somefunction(arg))
Ich muss also nicht duplizieren somefunction(arg)
Jedes Mal mache ich das, genau wie iferror
lass uns abschaffen if(iserror(somefunction(arg)),"sometext",somefunction(arg)
Zum Beispiel möchte ich tippen können iftrue(somefunction(arg),"=A1","message")
und das gleichzusetzen mit if(sumfunction(arg)=A1,"message",sumfunction(arg))
Ich habe es versucht:
Function iftrue(Fx, condition, show)
iftrue = Application.WorksheetFunction.if(Fx & condition, show, Fx)
End Function
Aber es gibt # Wert.
Um mein Problem zu diagnostizieren, habe ich einige einfachere Funktionen ausprobiert, um festzustellen, wo ich falsch liege. Also habe ich die Funktionen SUM und If dupliziert.
Diese "Summen" -Funktion funktioniert.
Function testsum(a, b)
test = Application.WorksheetFunction.Sum(a, b)
End Function
Aber diese "Wenn" -Funktion funktioniert nicht.
Function testif(a, b, c)
testif = Application.WorksheetFunction.if(a, b, c)
End Function
Ich denke, mein Problem ist die Art, wie ich das anrufe worksheet.function.if
.
Ich weiß, ich könnte dies einfach umgehen, indem ich stattdessen VBA ifs verwende, aber das ist nicht wirklich das, was ich tun möchte.
iftrue
's Parameter, die Sie ausprobiert haben und nicht funktionierten. Was funktioniert nicht? Falsche Ausgabe / Fehlermeldung?Antworten:
Es gibt kein
Application.WorksheetFunction.If()
Selbst wenn dies der Fall wäre, müssten Sie immer noch zusätzliche Anführungszeichen in den Testteil des if einfügen. Zum Beispiel, wenn der FX in aufgelöst wurde
"test"
und zustand war"=test"
Die resultierende Zeichenfolge wäre"test = test"
Setzen Sie das
Verwenden Sie also stattdessen Evaluate.
Wir müssen den String in einem bestimmten Format für Evaluate analysieren.
Wir müssen zusätzliche Anführungszeichen in die resultierende Zeichenfolge einfügen. Zum Beispiel, wenn der FX in aufgelöst wurde
"test"
und Zustand war"=test"
Die resultierende Zeichenfolge wäre"test = test"
.Wenn Sie dies in Auswerten eingeben, sucht die Funktion nach einer Funktion mit dem Namen
test
. Wir brauchen also einen String, der so aussieht""test"="test""
, die auf True aufgelöst wird.Wenn der Zustand war immer eine Gleichheit und niemals eine Ungleichheit, die wir einfach verwenden könnten
IF fx = condition then
anstelle von allem bis einschließlichIf tst Then
.Diese Funktion ist dynamischer, da sie Ungleichungen zulässt:
Sie würden es dann so nennen
Bearbeiten
Sie können das IIF () verwenden und die Anzahl der Zeilen reduzieren
quelle