我在 Excel 2013 中有一个电子表格,它使用INDEX
andMATCH
函数按间隔时间(以 为单位I4
)进行搜索,以从匹配的相应行(以 为单位A
)中提取值。除了三行之外,它在所有其他行上都按预期工作 - 在那些有问题的行上,它实际上返回了上面单元格的值。
我正在使用以下代码:
=INDEX(B:B, (MATCH($I$4, A:A)))
我用来搜索间隔时间的值位于单元格中I4
(例如,上午 10:00),与其匹配的列是A:A
。我尝试返回的值位于中B:B
。
间隔时间列的范围是A2
- A37
(上午 6:00 - 晚上 11:30,以半小时为增量),我想要返回的值的范围是B2
- B37
。
所有值均正确返回,但搜索A4
、A7
和A10
(分别为 7:00 AM、8:30 AM 和 10:00 AM)中的值时除外,这些值会显示高于所需值的单元格的数据(即,当I4
= 7:00 AM(等于A4
)时,公式返回 的值B3
而不是B4
, I4
= 8:30 AM(A7
)→B6
而不是B7
,以及I4
= 10:00 AM(A10
)→B9
而不是B10
)。
当我尝试使用完全匹配时:
=INDEX(B:B, (MATCH($I$4, A:A, 0)))
它为问题行返回值 #N/A,而仅为其他一些行返回正确值。
对正在发生的事情有什么了解吗?
答案1
我认为@fixer1234 是正确的——这是浮点舍入误差 关于时间价值。我不完全明白发生了什么,但我能够在我的系统上重现它,我找到了一个解决方法:将公式更改为
=INDEX(B:B, MATCH($I$4+TIME(0,0,1), A:A))
这会将一秒(TIME(0,0,1)
;参数为)添加到值中;这似乎足以让它“过关斩将”,以便测试为 ≥ (或或)中的值。顺便说一句,我尝试了,但显然不会遵守秒的小数部分,因此它只是将其视为;即,只是纯零。如果要获得毫秒,可以使用。TIME(hours,minutes,seconds)
I4
A4
A7
A10
TIME(0,0,0.9)
TIME()
TIME(0,0,0)
TIME(0,0,1)*0.001
PS:您的公式中有一对不必要的括号;我已将其删除。