Graham utilizza una formula che fa riferimento a due celle, B1 e C1. Tutto ciò che la formula fa è restituire il valore di una delle celle, come in = IF (A1 = 1, IF (B1> C1, B1, C1)). Sia B1 che C1 normalmente contengono date, ma a volte una o entrambe possono essere vuote. Se sono entrambi vuoti, il valore restituito (che è 0 perché sono vuoti) viene visualizzato come 1/0/1900. Quando entrambe le celle sono vuote, Graham vorrebbe che la formula restituisse un valore vuoto, non uno 0.

Ci sono diversi modi per affrontare questa esigenza. Per prima cosa, però, iniziamo con la formula di esempio di Graham:

=IF(A1=1, IF(B1>C1, B1, C1))

La formula è un po ‘”incompleta”, in quanto non fornisce cosa dovrebbe essere restituito se A1 non contiene il valore 1. Come scritto, se A1 contiene 2 (o qualsiasi altro valore eccetto 1), la formula restituisce “FALSE “. Quindi, modifichiamo la formula solo un po ‘in modo che se A1 non è 1 restituisca un valore “vuoto”, come questo:

=IF(A1=1, IF(B1>C1, B1, C1), "")

Successivamente è la chiave per capire cosa sta succedendo in “B1> C1”

confronto. Le date sono, ovviamente, memorizzate internamente come valori numerici, come numeri di serie. Se B1 contiene una data più recente di C1, il numero di serie in B1 sarà maggiore del numero di serie in C1.

Oltre a questo, le caratteristiche dei dati in B1 e C1 determinano il funzionamento del confronto (>).

  1. Se entrambe le celle contengono valori numerici (comprese le date), il confronto funziona come previsto.

  2. Se una delle celle contiene un valore di testo, entrambe le celle vengono trattate come se contenessero valori di testo, anche se una di esse contiene un valore numerico.

  3. Se una delle celle è vuota, quella cella viene trattata come se contenesse il valore 0.

In base a ciò, se una cella contiene una data e l’altra è vuota, equivale a confrontare un numero seriale (la data) con uno 0 (la cella vuota), quindi il numero seriale sarà sempre maggiore della cella vuota. Se entrambe le celle sono vuote, entrambe vengono considerate contenenti 0 e quindi entrambe sono uguali.

Quindi, diciamo che nella formula di Graham, la cella A1 contiene il valore 1, la cella B1 è vuota e la cella C1 è vuota. Ecco come la formula viene “tradotta” da Excel:

=IF(A1=1, IF(B1>C1, B1, C1), "")

=IF(1=1, IF(B1>C1, B1, C1), "")

=IF(B1>C1, B1, C1)

=IF(0>0, B1, C1)

=C1 =0

Questo è il motivo per cui Graham vede 0 restituito dalla formula e quando 0 è considerato un numero seriale di data, viene visualizzato come 1/0/00 (o 1/0/1900).

Per evitare ciò, è necessario verificare se sia B1 che C1 sono vuoti.

Ci sono molti modi in cui questo può essere fatto. Considera questa variazione sulla sua formula:

=IF(A1=1, IF((B1+C1=0), "", IF(B1>C1, B1, C1)), "")

Questa variazione aggiunge un’istruzione IF per vedere se B1 aggiunto a C1 è uguale a 0, che sarà se entrambi sono vuoti perché Excel considera gli spazi e 0 equivalenti in questo contesto. Lo svantaggio è che se B1 o C1 contiene un valore di testo, l’errore #VALORE viene restituito dalla formula.

Una variazione migliore potrebbe essere la seguente:

=IF(A1=1, IF(AND(B1=0,C1=0), "", IF(B1>C1, B1, C1)), "")

In questa incarnazione l’istruzione IF utilizza la funzione AND per determinare se sia B1 che C1 sono 0. Ciò risolve anche il potenziale problema di errore #VALORE.

Se vuoi davvero controllare se sia B1 che C1 sono vuoti, dovrai fare affidamento su un approccio diverso. Un modo è usare la funzione COUNTA:

=IF(A1=1, IF(COUNTA(B1:C1)=0, "", IF(B1>C1, B1, C1)), "")

Se sai per certo che sia B1 che C1 non conterranno mai valori di testo contemporaneamente, potresti anche utilizzare la funzione COUNT al posto della funzione COUNTA nella formula precedente.

Un altro approccio consiste nell’usare la funzione COUNTBLANK più o meno allo stesso modo; restituisce un conteggio del numero di celle in un intervallo che sono vuote:

=IF(A1=1, IF(COUNTBLANK(B1:C1)=2, "", IF(B1>C1, B1, C1)), "")

Una variazione simile consiste nell’usare la funzione ISBLANK (che restituisce TRUE se una cella è vuota) insieme alla funzione AND:

=IF(A1=1, IF(AND(ISBLANK(B1), ISBLANK(C1)), "", IF(B1>C1, B1, C1)), "")

Potresti anche fare in modo che Excel valuti B1 e C1 come se contenessero del testo, come si fa qui:

=IF(A1=1, IF(B1&C1="", "", IF(B1>C1, B1, C1)), "")

Questa formula non funzionerà come previsto se B1 o C1 contengono un singolo spazio, quindi potresti voler aggiungere la funzione TRIM nel mix:

=IF(A1=1, IF(TRIM(B1&C1)="", "", IF(B1>C1, B1, C1)), "")

In una qualsiasi delle formule discusse finora, potresti anche voler cambiare l’istruzione IF che restituisce B1 o C1 con la funzione MAX, in questo modo:

=IF(A1=1, IF(TRIM(B1&C1)="", "", MAX(B1:C1)), "")

C’è un avvertimento se si decide di farlo, tuttavia: la funzione MAX considera tutti i valori di testo come equivalenti a 0. Pertanto, se la cella B1 contiene “abc” e la cella C1 contiene 1, utilizzare l’operatore di confronto maggiore di (> ) considera “abc” maggiore di 1, ma MAX considera 1 maggiore di “abc”.

C’è anche un modo per tornare indietro e utilizzare la formula originale di Graham (quella che non controlla due celle vuote) e fare semplicemente affidamento sulla formattazione della cella contenente la formula. Basta creare un formato personalizzato come il seguente:

m/d/yyyy;;

Notare i due punti e virgola alla fine del formato. Questi dicono a Excel di non visualizzare nulla se il valore nella cella è negativo o un valore zero. Utilizzando questo formato, non vedresti mai apparire la data 1/0/1900; la cella verrebbe visualizzata come vuota.

Ovviamente potresti modificare Excel in modo che nasconda tutti i valori zero nel foglio di lavoro, come è stato trattato in altri ExcelTips, ma farlo potrebbe non essere adatto ai tuoi scopi se devi visualizzare zero risultati da altre formule.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (10386) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.