2015-08-05 24 views
5

Foglio di calcolo con dati di esempio collegati here.In che modo il test logico in una istruzione Excel se valuta le date in formati diversi?

Supponiamo di avere 3 date "4/1/2015", "30/06/2015" e "5/1/2016" impostate sul formato della cella Data in Excel.

È possibile confrontare direttamente le date utilizzando operatori logici (<,>, ecc.). Se "4/1/2015" era nella cella A1 e "30/06/2015" era nella cella A2, questa formula =IF(A1>A2,"True","False") restituisce "False".

Tuttavia, non è possibile confrontare una data con una stringa letterale (ad esempio "31/03/2015"). Se "4/1/2015" era nella cella A1, questa formula =IF(AND(A1>="4/01/2015",A1<="6/30/2015"),"True","False") viene sempre valutata come "False".

Con quanto sopra notato, perché è che aggiungendo un'operazione aritmetica a una stringa letterale; Excel consente il confronto tra le date memorizzate in diversi formati? Ad esempio, se "4/1/2015" era nella cella A1, questa formula =IF(AND(A1>="4/01/2015"+0,A1<="6/30/2015"+0),"True","False") verrà valutata su "Vero".

risposta

8

Le date vengono memorizzate come una doppia: il numero di giorni dal 31 dicembre 1899 più un importo frazionario che rappresenta la percentuale di tempo trascorso da mezzanotte. In questo momento, sto digitando questo al 42221.50049, che è 42.221 giorni dal 1899 e poco dopo mezzogiorno.

Si vede un formato data solo perché è stato applicato un formato data a quella cella. È ancora un numero sotto. Ma le date sono un po 'speciali. La data viene visualizzata anche nella barra della formula di Excel, non come numero, ma come data. Altri numeri formattati non sono mostrati in questo modo. Excel sta cercando di tracciare una linea sottile tra l'archiviazione delle date come Doppio e mostrare all'utente ciò che si aspettano di vedere.

Excel ha una coercizione di tipo incorporata. TC facciamo le cose senza essere super rigorosi sui tipi di dati. Fondamentalmente, se Excel può capire come fare quello che chiedi, lo farà. Se si chiede di aggiungere due stringhe, "1" + "1" Excel costringerà ciascuna di queste stringhe a un numero in modo che possa eseguire l'operazione e fornire 2. Se si chiede "1" + "a", si otterrà un errore #VALORE perché Excel non è in grado di capire come forzare "a" in qualcosa che è un operando valido.

I confronti non attivano la coercizione. Quindi ="1"=1 restituirà False: una stringa non è uguale a un numero e il confronto non attiva Excel per forzare alcun valore su un tipo diverso.

Nel tuo caso A1>="04/01/2015" sembra un'ottima opportunità per Excel di forzare quella che sembra una data a una data effettiva. Ma non è così. Questo è solo il modo in cui funziona. Ma aggiungendo zero alla data (che ricorda è solo una doppia), la impone in una data e ti rimane comparando A1 con qualcosa che è stato forzato ad una data.

Le stringhe letterali di date sembrano funzionare in molti ambienti come SQL Server. Ma generalmente non lo fanno in Excel. È preferibile, IMO, utilizzare la funzione DATE(), come in A1>=DATE(2015,4,1).