2016-01-05 31 views
0

我使用index/match提取使用的date/timesINDEX(D:D,MATCH(A2,B:B,0)) A:A列匹配date/times數據已手動輸入。 B:Bdate/times輸入爲B2+time(,30,)並複製下來。指數/比賽時間匹配誤差

3行後,公式給出#N/A作爲答案。

它有事情做與時代不匹配正好即使A5=B5給出了一個true結果行給出#N/A 如果我複製到A:AB:B所有手動輸入的時候,它完美的作品。 請幫忙。

A    B    C  D E F G  H I  J     K 
AET Entered  AET + 30  = volts lo i1 i0  vl1 vl0  Value AET   Value Time +30 
1/08/15 10:00 1/08/15 10:00 TRUE 36 36 36 36  36 36  42217.4166666667000 42217.4166666667000 
1/08/15 10:30 1/08/15 10:30 TRUE 23 23 23 23  23 23  42217.4375000000000 42217.4375000000000 
1/08/15 11:00 1/08/15 11:00 TRUE 44 44 44 44  44 44  42217.4583333333000 42217.4583333333000 
1/08/15 11:30 1/08/15 11:30 TRUE 55 44 44 #N/A 44 #N/A 42217.4791666667000 42217.4791666667000 
1/08/15 12:00 1/08/15 12:00 TRUE 13 55 55 #N/A 55 #N/A 42217.5000000000000 42217.5000000000000 
1/08/15 12:30 1/08/15 12:30 TRUE 32 13 13 #N/A 13 #N/A 42217.5208333333000 42217.5208333333000 
1/08/15 13:00 1/08/15 13:00 TRUE 56 32 32 #N/A 32 #N/A 42217.5416666667000 42217.5416666667000 
1/08/15 13:30 1/08/15 13:30 TRUE 70 56 56 #N/A 56 #N/A 42217.5625000000000 42217.5625000000000 
1/08/15 14:00 1/08/15 14:00 FALSE 43 70 70 #N/A 70 #N/A 42217.5833333333000 42217.5833333334000 
1/08/15 14:30 1/08/15 14:30 TRUE 31 43 43 #N/A 43 #N/A 42217.6041666667000 42217.6041666667000 
1/08/15 15:00 1/08/15 15:00 TRUE 21 31 31 #N/A 31 #N/A 42217.6250000000000 42217.6250000000000 
1/08/15 15:30 1/08/15 15:30 FALSE 11 21 21 #N/A 21 #N/A 42217.6458333333000 42217.6458333334000 
1/08/15 16:00 1/08/15 16:00 TRUE 66 11 11 #N/A 11 #N/A 42217.6666666667000 42217.6666666667000 
1/08/15 16:30 1/08/15 16:30 TRUE 45 66 66 #N/A 66 #N/A 42217.6875000000000 42217.6875000000000 
1/08/15 17:00 1/08/15 17:00 FALSE 23 45 45 #N/A 45 #N/A 42217.7083333333000 42217.7083333334000 
+0

你能給數據的前幾行取樣? –

+0

我只是編輯我的問題並粘貼數據? –

+1

這是浮點精度的問題。正如你所看到的那樣,即使'='比較也會失敗,比如1/8/15 14:00'' 42012,5833333333'與'42012,5833333334'。與「MATCH(..,0)」或「VLOOKUP(..,FALSE)」的精確匹配使用另一種比較方法,因此它更經常失敗。如果我們需要完全匹配的日期時間值,那麼我們需要這些值'ROUND'的相同計數小數。因此,我們需要兩個輔助列,它們將ROUND A,B兩個小數點後8位,然後在MATCH(..,0)或VLOOKUP(..,FALSE)中使用這些輔助列。 –

回答

0

我會離開@AxelRichter張貼答案在他的評論,其中涉及四捨五入的時間戳和引用四捨五入,數字,以避免浮點精度。

另一種解決方案是簡單地允許VLOOKUP/MATCH使用每個函數中的最後一個參數來獲取'最接近的值'結果。即:

=INDEX(D:D,MATCH(A2,B:B,1)) 

請記住,這隻會在您的數據排序後才起作用。它有一個額外的好處,如果一個缺失的結果當然應該是下一個最接近的行,那麼這個行就會被提取出來 - 同樣的,它還有額外的成本,當匹配沒有找到時它不會發出警告。

+0

謝謝,是的,我發現lookup和vlookup的工作方式正如你所建議的填寫缺少的數據,這對大多數時間都適用於我。但是,我確實需要查看丟失了多少數據以評估它是否會對結果產生影響。所以匹配(,, 0)非常方便,特別是現在我可以使它工作。 :-) –

+0

我用32000行的文件試過這個解決方案,它開始用#N/A結果再次跳出。我將四捨五入改爲七個位置並解決了問題。再次感謝。 –

0

這是浮點精度的問題。正如你所看到的,即使= 1/8/15 14:0042012,583333333342012,5833333334的比較失敗。與MATCH(..,0)VLOOKUP(.., FALSE)的確切匹配使用了其他比較方法,因此更經常失敗。如果我們需要完全匹配的日期時間值,那麼我們需要這些值爲相同的小數點數。因此,我們需要幫助列,其中A和B到8位小數,然後使用MATCH(..,0)VLOOKUP(.., FALSE)中的幫助列。

至少需要一個幫助列,因爲我們可以直接在函數內舍入查找值。但是查找數組我們不能以這種方式進行。

實施例:

enter image description here

公式:

B3向下:

=B2+TIME(0,30,0) 

C2向下:

=A2=B2 

D2向下:

=MATCH(B2,A:A,0) 

E2向下:

=MATCH(ROUND(B2,8),G:G,0) 

G2向下:

=ROUND(A2,8)