2015-03-25 16 views
5

Ho usato la funzione VLOOKUP per trovare un valore in un array ma alcuni valori hanno fornito la risposta N/D nonostante sia disponibile nell'array.VLOOKUP non trova il valore nell'array

per arrotondare i numeri, ho usato CEILING funzione ma il punto interessante è in alcuni valori, non ha funzionato.

Ho controllato il tipo di valore se è numero o no.

Inoltre, ho usato la funzione ROUNDUP ma non ha funzionato.

Inoltre, ho provato la combinazione INDEX/MATCH e di nuovo non ha funzionato.

Nell'esempio che ho fornito nel collegamento, quando digito tra 15.00 e 15.20, si dà errore ma si provano altri valori, funziona.

Come posso risolvere questo problema? opere

risposta

3

Questo sembra essere un bug con VLOOKUP e MATCH utilizzando i valori di ritorno di CEILING. Se si utilizza:

=VLOOKUP(ROUND(CEILING(F4,0.1),1),A:B,2,FALSE)

allora funziona come previsto.

Se guardiamo a questo con VBA, vediamo cosa succede. La colpa dovrebbe essere davvero CEILING e ROUNDUP. Guarda l'esempio:

Sub testCeilingAndRoundup() 

Dim v As Double, test As Boolean, diff As Double 

v = [CEILING(15.1,0.1)] '15.1 
test = (v = 15.1) 'FALSE 
diff = 15.1 - v '-1.776...E-15 

v = [ROUNDUP(15.25,1)] '15.3 
test = (v = 15.3) 'FALSE 
diff = 15.3 - v '1.776...E-15 

End Sub 
+0

Sì, funziona davvero. Grazie. –

0

La funzione CEILING dovrebbe essere più preciso se si vuole trovare una corrispondenza per 15,10

Change a CEILING(F4,0.01) e sarà :)

+0

Questo esito negativo se l'ingresso è ad esempio 15.09. L'intento è chiaramente di arrotondare fino a 15.10 e restituire 95, ma la tua formula dà un errore. –

+0

Inoltre, non capisco * perché * 'CEILING (15.10.0.1)' e 'CEILING (15.10.0.01)' si comporterebbero in modo diverso (sebbene i test dimostrino che lo fanno). Entrambi dovrebbero in linea di principio restituire lo stesso numero esatto, cioè 15.1. Quindi non capisco perché hai suggerito questa risposta! –

+0

'CEILING (15.10, 0.1)' e 'CEILING (15.10, 0,01)' sono gli stessi. Non c'è differenza. –

4

Sembra che tu abbia incontrato un bug di Excel.

Applicando CEILING al numero 15.1 dovrebbe restituire lo stesso risultato esatto (15.1) indipendentemente dal fatto che il significato è di 0,1, 0,01, 0,001, ecc

E in effetti lo fa, secondo Excel: alla domanda se Sono uguali, la risposta è sempre TRUE.

Ma cercare questi numeri matematicamente uguali nella tabella di ricerca dà risultati diversi.

enter image description here

questo deve essere un bug.

Invece di CEILING(F4,0.1), suggerisco di utilizzare ROUNDUP(F4,1) che sembra essere privo di errori. No, ROUNDUP è bacato. Axel Richter's answer suggerisce di avvolgere CEILING in un ROUND e sembra che il problema scompaia.È inoltre possibile convertire in stringa e di nuovo al numero:

VALUE(TEXT(ROUNDUP(F4,1),"0.0")) 

questo modo ci sono

=VLOOKUP(VALUE(TEXT(ROUNDUP(F4,1),"0.0")),A:B,2,FALSE)