Alla ricerca di una soluzione per abbreviare una formula IF


9

Ho una formula lunga con la seguente struttura:

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

dove ! X! è una formula molto lunga.

Esiste una soluzione per evitare di ripetere! X! due volte? Ne ho bisogno per due motivi:

  1. Per rendere la formula leggibile per l'utente del foglio
  2. Per ridurre i tempi di processo

Apprezzo qualsiasi aiuto.

Grazie, Dio


1
se vuoi, To reduce the process timeovviamente, devi memorizzare il risultato da qualche parte, altrimenti Excel deve ricalcolare di nuovo il valore quando la condizione corrisponde. La divisione è anche un'operazione molto costosa
phuclv,

2
Anche solo curioso, hai "giocato a golf" la formula lunga più in basso che puoi? Per renderlo più breve forse aggiungere intervalli denominati?
BruceWayne,

Per rendere più leggibile una formula lunga, separa gli argomenti su righe diverse usando alt + return. Un aspetto negativo è se l'utente non espande l'altezza della barra della formula, la formula sembra incompleta.
Brad Smith,

Risposte:


12

Un altro approccio è utilizzare la doppia inversione :

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

Se real_long_formula viene valutato a 0 , otterrai una divisione per zero e la IFERROR()prenderai!

Si noti che il modo normale (e il modo migliore) per gestire questo requisito è con una cella di supporto.


7
ciò potrebbe risentire della perdita di precisione dovuta alla divisione in virgola mobile
phuclv,

3
@ LưuVĩnhPhúc Hai perfettamente ragione! l' approccio AFH è l'approccio migliore!
Gary's Student,

Questo è un bel trucco sporco. Vorrei trattenermi pesantemente dall'usarlo, ma, come ultima risorsa, chi lo sa?
André Chalella,

3
NOTA: è vero che potrebbe esserci una perdita di precisione, ma raramente sarebbe un problema rilevante. Ho provato più 1/1/xdi 100.000 numeri casuali più volte in Excel e solo l'1,4% delle volte si è verificato un errore di arrotondamento. L'errore relativo massimo che abbia mai trovato era 1,6e-16, che è, in effetti, zero. Inoltre, è interessante notare che gli interi non hanno mai mostrato errori di arrotondamento (testati diversi intervalli da 0 a 1e14). Quindi, questa risposta può essere disapprovata dal punto di vista della purezza / purezza, ma non dal punto di vista del calcolo pratico.
André Chalella,

1
Trovo la soluzione di Gary come la migliore. Innanzitutto perché è pulito (come indicato anche da André) e leggibile da altri utenti. Secondo, perché soddisfa il mio bisogno. Non ho numeri interi complicati o lunghi. Spero che gli utenti, che scelgono questo approccio, leggano i commenti per essere consapevoli dei pro e dei contro di questa soluzione.
Dio,

23

La risposta ovvia è mettere la formula in una cella di lavoro, lontano dal foglio principale. Ad esempio, se lo usi H1, impostalo su:

=!X!

La tua formula diventa quindi:

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

Questo è tipico di ciò che si farebbe in qualsiasi altro linguaggio di programmazione.


Non ho la possibilità di aggiungere una colonna di aiuto. Grazie comunque.
Dio,

2
@Dio se non dovrebbe essere visto, allora semplicemente nascondi la colonna. Puoi persino nominare la colonna / intervallo per rendere più facile la lettura
phuclv

4
@Dio - OK. La tua risposta accettata è piuttosto intelligente, ma tieni presente che, a causa dell'arrotondamento, potresti perdere la precisione ( 1/(1/x)non è sempre esattamente la stessa di x), specialmente se hai a che fare con dati interi. Inoltre, non è applicabile più in generale (ad es. Controllo per meno di zero). (Il commento è stato incrociato con la risposta accettata di @LưuVĩnhPhúc.)
AFH

Grazie per i tuoi consigli e commenti. Lascerò la domanda ancora aperta per vedere se ci sono ancora nuovi suggerimenti.
Dio,

2
Sarebbe utile vedere la formula lunga. Oltre a una cella di lavoro, è possibile definire un nome in un foglio di lavoro che contiene una formula
datatoo

3

Hai davvero bisogno che il risultato sia ""nel caso falso? Se hai solo bisogno che la cella appaia vuota (ad esempio non userai qualcosa di simile =ISNUMBER()in seguito), puoi usare la formattazione condizionale per nascondere i contenuti nel caso falso.

Il formato condizionale che applicherai alla cella in modo che non visualizzi nulla è il formato personalizzato "", in questo modo (è in portoghese ma ottieni l'idea):

formato personalizzato per celle vuote

La formula nella cella sarà, come previsto, semplicemente =!X!+A1.

La formula di formattazione condizionale potrebbe essere =!X!=0, ma ciò costringerebbe il ricalcolo di !X!, che non vuoi (il tuo "Punto 2"). È meglio sfruttare la cella stessa usando =B1=A1(supponendo che la nostra cella sia B1 ) - ciò implicherebbe !X! = 0.

Anche se è necessario che il contenuto della cella sia effettivamente "", in genere è possibile apportare piccole modifiche al foglio di lavoro in modo da poter utilizzare questo approccio. In tal caso, lascia un commento che descriva la situazione.


1

Non ho la possibilità di aggiungere una colonna di aiuto. Grazie comunque.

Se non riesci ad aggiungere una colonna di supporto , perché non aggiungere un intero foglio di lavoro? Ci sono diversi vantaggi in questo:

  • La tua cella di supporto non occupa spazio che potrebbe altrimenti essere utilizzato, poiché si trova in un foglio di lavoro separato.
  • Puoi nominare la cella quindi indirizzarla per nome, ad es=IF(X<>0,X+A1,"")
  • Se è necessario farlo in più di una cella, è possibile:
    1. Rinomina il foglio di lavoro dell'helper "helper"
    2. Inserisci l'equazione di aiuto nella stessa cella dell'equazione principale (chiamiamola D5.
    3. Indirizza la cella come helper!D5nel foglio principale.
  • È possibile nascondere il foglio di supporto, se necessario.
  • È più veloce della valutazione due volte.
  • Non perde precisione.

Gli svantaggi che posso vedere sono:

  • Devi fare riferimento a celle senza nome nel foglio principale come sheetname!D5anziché come D5.
  • Ora la formula è divisa in due parti anziché in una.
  • Proliferazione del foglio di lavoro.

Valutando i vantaggi e gli svantaggi, penso che per molti casi d'uso questa sia una buona soluzione. Esistono situazioni in cui non è ottimale, anche se al momento non riesco a pensarci.


1
Bella risposta. Gli svantaggi che vedo sono: 1. Non aiuta molto a rendere il calcolo più semplice per l'utente, poiché ora la formula grande è nascosta. 2. Molte cartelle di lavoro sono già affollate di fogli. Anche se lo nascondi, potresti dover passare attraverso molti fogli nascosti per scoprirlo. A parte questo, è una buona soluzione.
André Chalella,

@ AndréNeves Grazie per quello! Quella prima mi è venuta in mente, ma l'ho dimenticata quando stavo scrivendo la sezione degli svantaggi .
wizzwizz4,

1

un'opzione non ancora suggerita è quella di creare una funzione definita dall'utente. Dovresti attivare la scheda Sviluppatore nella barra dei menu (google it) e creare un modulo.

 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

Nella barra della formula lo faresti

=udf_myCalc(A1)

NOTA: questo ora diventa un file .xlsx (con macro) e potrebbe essere necessario disporre di autorizzazioni aggiuntive in una rete aziendale poiché le macro possono essere utilizzate per scopi dannosi e alcuni filtri e-mail li bloccano. Le funzioni non sono documentate, quindi dovrai fornire note su ciò che le tue funzioni stanno facendo e trovo utile chiamare tutte le mie funzioni udf_xxxxx in modo che sia chiaro che non è una funzione integrata

Esistono anche altri GOTCHA con UDF. Vedi questo link per alcuni buoni consigli http://www.decisionmodels.com/calcsecretsj.htm

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.