Suche nach einer Lösung zur Verkürzung einer IF-Formel


9

Ich habe eine lange Formel mit folgender Struktur:

=IF(!X!<>0,!X!+A1,"")

wo ! X! ist eine sehr lange Formel.

Gibt es eine Lösung, um zu vermeiden, dass das! X! zweimal? Ich brauche es aus zwei Gründen:

  1. Um die Formel für den Benutzer des Blattes lesbar zu machen
  2. Um die Prozesszeit zu reduzieren

Ich freue mich über jede Hilfe.

Danke, Dio


1
Wenn Sie möchten To reduce the process time, müssen Sie das Ergebnis natürlich irgendwo speichern, andernfalls muss Excel den Wert erneut berechnen, wenn die Bedingung übereinstimmt. Division ist auch eine sehr kostspielige Operation
phuclv

2
Nur neugierig, haben Sie die lange Formel so weit wie möglich "golfen" lassen? Um es kürzer zu machen, fügen Sie vielleicht benannte Bereiche hinzu?
BruceWayne

Um eine lange Formel besser lesbar zu machen, trennen Sie die Argumente mit alt + return in verschiedene Zeilen. Ein Nachteil ist, dass die Formel unvollständig aussieht, wenn der Benutzer die Höhe der Formelleiste nicht erweitert.
Brad Smith

Antworten:


12

Ein anderer Ansatz ist die Verwendung der doppelten Inversion :

=IFERROR(1/(1/really_long_formula)+A1,"")

Wenn die really_long_formula zu auswertet 0 , erhalten Sie eine Division durch Null bekommen und das IFERROR()wird es fangen!

Bitte beachten Sie, dass der übliche (und beste) Weg , um diese Anforderung zu erfüllen, eine Hilfszelle ist.


7
Dies kann unter Präzisionsverlusten aufgrund der Gleitkommadivision leiden
phuclv

3
@ LưuVĩnhPhúc Du bist völlig richtig! Der AFH- Ansatz ist der beste Ansatz!
Garys Student

Das ist ein schöner, schmutziger Trick. Ich würde es stark unterlassen, aber wer weiß es als letztes Mittel?
André Chalella

3
HINWEIS: es ist wahr , dass es möglicherweise einiger Genauigkeitsverlust, aber es würde kaum ein relevantes Problem. Ich habe 1/1/xmehrmals mit 100.000 Zufallszahlen in Excel getestet , und nur in 1,4% der Fälle gab es einen Rundungsfehler. Der maximale relative Fehler, den ich jemals gefunden habe, war 1,6e-16, was praktisch Null ist. Interessanterweise zeigten Ganzzahlen niemals Rundungsfehler (getestet mehrere Bereiche von 0 bis 1e14). Daher kann diese Antwort unter dem Gesichtspunkt der Reinheit / Reinheit verpönt sein, jedoch nicht unter dem Gesichtspunkt der praktischen Berechnung.
André Chalella

1
Ich finde die Lösung von Gary als die beste. Erstens, weil es sauber ist (wie auch von André erwähnt) und für andere Benutzer lesbar ist. Zweitens, weil es mein Bedürfnis befriedigt. Ich habe keine komplizierten oder langen ganzen Zahlen. Ich hoffe, dass die Benutzer, die diesen Ansatz wählen, die Kommentare lesen, um sich über die Vor- und Nachteile dieser Lösung zu informieren.
Dio

23

Die offensichtliche Antwort besteht darin, die Formel in eine Arbeitszelle außerhalb des Hauptblatts einzufügen. Wenn Sie beispielsweise verwenden H1, stellen Sie Folgendes ein:

=!X!

Ihre Formel lautet dann:

=IF(H1<>0,H1+A1,"")

Dies ist typisch für das, was man in einer anderen Programmiersprache tun würde.


Ich habe keine Möglichkeit, eine Hilfespalte hinzuzufügen. Danke trotzdem.
Dio

2
@Dio Wenn es nicht gesehen werden soll, dann verstecke einfach die Spalte. Sie können sogar die Spalte / den Bereich benennen, um das Lesen zu erleichtern
phuclv

4
@Dio - OK. Ihre akzeptierte Antwort ist ziemlich klug, aber beachten Sie, dass Sie aufgrund von Rundungen möglicherweise an Genauigkeit verlieren ( 1/(1/x)was nicht immer genau der gleiche ist wie x), insbesondere wenn Sie mit ganzzahligen Daten arbeiten. Es ist auch nicht allgemeiner anwendbar (z. B. Überprüfung auf weniger als Null). (Kommentar gekreuzt mit @ LưuVĩnhPhúc unter akzeptierter Antwort.)
AFH

Vielen Dank für Ihre Ratschläge und Kommentare. Ich werde die Frage noch offen lassen, um zu sehen, ob es noch neue Vorschläge gibt.
Dio

2
Es wäre hilfreich, die lange Formel zu sehen. Neben einer Arbeitszelle ist es möglich, einen Namen in einem Arbeitsblatt zu definieren, das eine Formel enthält
datatoo

3

Brauchen Sie wirklich das Ergebnis, um ""im falschen Fall zu sein? Wenn die Zelle nur leer aussehen soll (z. B. =ISNUMBER()später nicht mehr), können Sie die bedingte Formatierung verwenden , um den Inhalt im falschen Fall auszublenden.

Das bedingte Format, das Sie auf die Zelle anwenden, damit nichts angezeigt wird , ist das benutzerdefinierte Format ""wie dieses (es ist auf Portugiesisch, aber Sie haben die Idee):

Benutzerdefiniertes Format für leere Zellen

Die Formel in der Zelle ist wie erwartet einfach =!X!+A1.

Die bedingte Formatierungsformel könnte sein =!X!=0, aber das würde eine Neuberechnung erzwingen !X!, die Sie nicht wollen (Ihr "Punkt 2"). Es ist besser, die Zelle selbst zu nutzen =B1=A1(vorausgesetzt, unsere Zelle ist B1 ) - das würde bedeuten !X! = 0.

Selbst wenn der Zelleninhalt tatsächlich vorhanden sein muss "", können im Arbeitsblatt normalerweise geringfügige Änderungen vorgenommen werden, damit dieser Ansatz verwendet werden kann. Wenn dies der Fall ist, hinterlassen Sie einen Kommentar, der die Situation beschreibt.


1

Ich habe keine Möglichkeit, eine Hilfespalte hinzuzufügen. Danke trotzdem.

Wenn Sie keinen Helfer hinzufügen können Spalte , warum nicht ein ganzes Arbeitsblatt hinzufügen? Dies hat mehrere Vorteile:

  • Ihre Hilfszelle belegt keinen Speicherplatz, der andernfalls verwendet werden könnte, da sie sich in einem separaten Arbeitsblatt befindet.
  • Sie können die Zelle benennen und dann mit Namen adressieren, z=IF(X<>0,X+A1,"")
  • Wenn Sie dies in mehr als einer Zelle tun müssen, können Sie:
    1. Benennen Sie das Hilfsarbeitsblatt in "Helfer" um.
    2. Setzen Sie die Hilfsgleichung in dieselbe Zelle wie die Hauptgleichung (nennen wir es D5.
    3. Adressieren Sie die Zelle wie helper!D5im Hauptblatt.
  • Sie können das Hilfsblatt bei Bedarf ausblenden.
  • Es ist schneller als zweimal auszuwerten.
  • Es verliert nicht an Präzision.

Die Nachteile, die ich sehen kann, sind:

  • Sie müssen unbenannte Zellen im Hauptblatt als sheetname!D5statt nur als referenzieren D5.
  • Jetzt besteht die Formel aus zwei Teilen anstelle von einem.
  • Verbreitung von Arbeitsblättern.

Ich denke, dass dies für viele Anwendungsfälle eine gute Lösung ist, wenn man die Vor- und Nachteile abwägt. Es gibt Situationen, in denen es nicht optimal ist, obwohl mir im Moment keine einfällt.


1
Gute Antwort. Die Nachteile, die ich sehe, sind: 1. Es hilft nicht viel , die Berechnung für den Benutzer zu vereinfachen, da jetzt die große Formel versteckt ist. 2. Viele Arbeitsmappen sind bereits mit Blättern überfüllt. Selbst wenn Sie es ausblenden, müssen Sie möglicherweise viele versteckte Blätter durchgehen, um es einzublenden. Davon abgesehen ist es eine gute Lösung.
André Chalella

@ AndréNeves Danke dafür! Das erste ist mir eingefallen, aber ich habe es vergessen, als ich den Abschnitt mit den Nachteilen geschrieben habe .
wizzwizz4

1

Eine noch nicht vorgeschlagene Option ist das Erstellen einer benutzerdefinierten Funktion. Sie müssten die Registerkarte Entwickler in der Menüleiste aktivieren (google it) und ein Modul erstellen.

 public function udf_myCalc(ValueToAdd as double)
    dim myvar as double
    dim udf_myCalc as double
    myvar = .. put the logic of !X! in here

    if myvar<>0 then 
        udf_myCalc = myvar + ValueToAdd
    else
        udf_myCalc = ValueToAdd
    end if
 end function

In der Formelleiste würden Sie dann tun

=udf_myCalc(A1)

HINWEIS: Dies wird jetzt zu einer XLSX-Datei (mit Makros) und erfordert möglicherweise zusätzliche Berechtigungen in einem Unternehmensnetzwerk, da Makros für böswillige Zwecke verwendet werden können und einige E-Mail-Filter sie blockieren. Die Funktionen sind nicht dokumentiert, daher müssen Sie Notizen zu Ihren Funktionen bereitstellen. Ich finde es nützlich, alle meine Funktionen udf_xxxxx aufzurufen, damit klar ist, dass es sich nicht um eine integrierte Funktion handelt

Es gibt auch einige andere GOTCHAs mit UDFs. Unter diesem Link finden Sie einige gute Tipps: http://www.decisionmodels.com/calcsecretsj.htm

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.