Excel formula 索引/匹配时间匹配错误

Excel formula 索引/匹配时间匹配错误,excel-formula,Excel Formula,我正在使用index/match通过使用index(D:D,match(A2,B:B,0))匹配date/times来提取数据 A:日期/时间的列已手动输入。 B:B日期/时间的列作为B2+时间(,30,)输入并向下复制 在3行之后,公式给出了#N/A作为答案 这与时间不完全匹配有关,即使A5=B5给出了行给出的true结果#N/a 如果我将A:A复制到B:B中,即所有手动输入的时间,它工作正常。 请帮忙 A B C D E

我正在使用
index/match
通过使用
index(D:D,match(A2,B:B,0))匹配
date/times来提取数据
A:
日期/时间的
已手动输入。
B:B
日期/时间的列
作为
B2+时间(,30,)
输入并向下复制

在3行之后,公式给出了
#N/A
作为答案

这与时间不完全匹配有关,即使
A5=B5
给出了行给出的
true
结果
#N/a
如果我将
A:A
复制到
B: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

我将让@AxelRichter在他的评论中发布答案,其中包括对时间戳进行四舍五入,并引用四舍五入的数字以避免浮点精度

另一种解决方案是简单地允许VLOOKUP/MATCH使用每个函数中的最终参数获取“最近值”结果。即:

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

请记住,只有对数据进行了排序,这才有效。它还有一个额外的好处,那就是如果一个缺失的结果自然应该是下一个最近的行,那么该行就会被选中——同样,它还有一个额外的代价,那就是当没有找到匹配项时,它不会警告您。

我会让@AxelRichter在他的评论中发布答案,这涉及到对时间戳进行舍入并引用舍入的数字以避免浮点精度

另一种解决方案是简单地允许VLOOKUP/MATCH使用每个函数中的最终参数获取“最近值”结果。即:

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

请记住,只有对数据进行了排序,这才有效。它还有一个额外的好处,即如果缺少的结果自然应该是下一个最近的行,则该行将被拾取—同样,它还有一个额外的代价,即当未找到匹配项时,它不会向您发出警告。

这是一个浮点精度问题。如您所见,与
420125833333
420125833334
相比,即使=比较也会失败。与
MATCH(..,0)
VLOOKUP(..,FALSE)
的精确匹配使用了另一种比较方法,因此更容易失败。如果我们需要精确匹配的日期时间值,那么我们需要将这些值
四舍五入
设置为相同的小数计数。因此,我们需要将A和B四舍五入到8位小数的辅助列,然后在
匹配(..,0)
VLOOKUP(..,FALSE)
中使用这些辅助列

至少需要一个helper列,因为我们可以直接在函数中取整查找值。但是查找数组不能用这种方式进行取整

例如:

公式:

B3
向下:

=B2+TIME(0,30,0)
=A2=B2
=MATCH(B2,A:A,0)
=MATCH(ROUND(B2,8),G:G,0)
=ROUND(A2,8)
C2
向下:

=B2+TIME(0,30,0)
=A2=B2
=MATCH(B2,A:A,0)
=MATCH(ROUND(B2,8),G:G,0)
=ROUND(A2,8)
D2
向下:

=B2+TIME(0,30,0)
=A2=B2
=MATCH(B2,A:A,0)
=MATCH(ROUND(B2,8),G:G,0)
=ROUND(A2,8)
E2
向下:

=B2+TIME(0,30,0)
=A2=B2
=MATCH(B2,A:A,0)
=MATCH(ROUND(B2,8),G:G,0)
=ROUND(A2,8)
G2
向下:

=B2+TIME(0,30,0)
=A2=B2
=MATCH(B2,A:A,0)
=MATCH(ROUND(B2,8),G:G,0)
=ROUND(A2,8)

这是浮点精度的问题。如您所见,与
420125833333
420125833334
相比,即使=比较也会失败。与
MATCH(..,0)
VLOOKUP(..,FALSE)
的精确匹配使用了另一种比较方法,因此更容易失败。如果我们需要精确匹配的日期时间值,那么我们需要将这些值
四舍五入
设置为相同的小数计数。因此,我们需要将A和B四舍五入到8位小数的辅助列,然后在
匹配(..,0)
VLOOKUP(..,FALSE)
中使用这些辅助列

至少需要一个helper列,因为我们可以直接在函数中取整查找值。但是查找数组不能用这种方式进行取整

例如:

公式:

B3
向下:

=B2+TIME(0,30,0)
=A2=B2
=MATCH(B2,A:A,0)
=MATCH(ROUND(B2,8),G:G,0)
=ROUND(A2,8)
C2
向下:

=B2+TIME(0,30,0)
=A2=B2
=MATCH(B2,A:A,0)
=MATCH(ROUND(B2,8),G:G,0)
=ROUND(A2,8)
D2
向下:

=B2+TIME(0,30,0)
=A2=B2
=MATCH(B2,A:A,0)
=MATCH(ROUND(B2,8),G:G,0)
=ROUND(A2,8)
E2
向下:

=B2+TIME(0,30,0)
=A2=B2
=MATCH(B2,A:A,0)
=MATCH(ROUND(B2,8),G:G,0)
=ROUND(A2,8)
G2
向下:

=B2+TIME(0,30,0)
=A2=B2
=MATCH(B2,A:A,0)
=MATCH(ROUND(B2,8),G:G,0)
=ROUND(A2,8)

你能给前几行的数据采样吗?我只是编辑我的问题并粘贴数据吗?这是一个浮点精度的问题。正如您所看到的,与
420125833333
相比,
420125833334
,即使是
=
比较也会失败。与
MATCH(..,0)
VLOOKUP(..,FALSE)
的精确匹配使用了另一种比较方法,因此更容易失败。如果我们需要精确匹配的日期时间值,那么我们需要将这些值
四舍五入
设置为相同的小数计数。所以我们需要两个helper列,
A
B
四舍五入到8位小数,然后在
匹配(..,0)
VLOOKUP(..,FALSE)
@AxelRichter中使用这些helper列-也许可以将您的评论作为解决方案发布?谢谢您的帮助。我确实尝试在索引/匹配公式中使用round函数,但无法使其工作。能否为前几行提供数据采样?我是否只需编辑问题并粘贴数据?这是一个浮点精度问题。正如您所看到的,与
420125833333
相比,
420125833334
,即使是
=
比较也会失败。与
MATCH(..,0)
VLOOKUP(..,FALSE)
的精确匹配使用了另一种比较方法,因此更容易失败。如果我们需要精确匹配的日期时间值,那么我们需要将这些值
四舍五入
设置为相同的小数计数。所以我们需要两个helper列,
A
B
四舍五入到8位小数,然后在
匹配(..,0)
VLOOKUP(..,FALSE)
@AxelRichter中使用这些helper列-也许可以将您的评论作为解决方案发布?谢谢您的帮助。我确实尝试过在索引/匹配公式中使用round函数,但我无法让它发挥作用。谢谢,是的,我发现查找和vlookup可以按照您建议的方式工作,可以填充缺失的数据,这在大多数情况下对我都有效。然而,我确实需要能够看到有多少数据丢失,以评估它是否会对结果产生影响