Excel - 根据条件

时间:2017-12-15 23:35:50

标签: excel date indexing match criteria

我希望有人能帮我解决一下我正试图解决的Excel问题。

我有两张桌子。一个叫做SENSOR,另一个叫做CARD

1 - 表SENSOR在一列中有日期/时间,在另一列中有员工ID 2 - 表CARD在一列中有日期/时间,在另一列中有员工ID

唯一完全匹配的是员工ID。表SENSOR的日期/时间与表CARD不完全匹配(通常为几分钟加或减)。我需要做的是在单元格C1上返回表格CARD中的日期/时间列,这是从SENSOR表格中的日期/时间列中找到的最近时间。

TABLE SENSOR:

A栏:日期/时间
11/3/17 10:48
11/3/17 16:02
11/10/17 7:09
11/13/17 20:58
11/15/17 21:24
11/16/17 11:32

B栏:员工ID
7164
7165
7166
7163
7167
7163

桌卡:

第一栏:日期/时间
11/3/17 16:05
11/10/17 7:10
11/13/17 21:04
11/15/17 21:30
11/16/17 11:40
11/3/17 10:45

COLUMN J:员工ID
7165
7166
7163
7167
7163
7164

这是我正在尝试做的事情(它实际上适用于其中一些,但在其他一些它只是不起作用,我无法理解为什么):

C1 = INDEX(2美元:285美元,匹配(最小(ABS(I $ 2:I $ 285-A16)),(2美元:285美元= B16)* ABS(I $ 2:I $ 285-A16), 0))

谢谢你们

1 个答案:

答案 0 :(得分:1)

自从您提到TABLES后,我使用了TABLES和结构化引用。从长远来看,使事情变得容易一些。但是,如果需要,您应该可以转换为直接引用。

这是公式:

=LOOKUP(2,1/(AGGREGATE(15,6,(ABS(([@[EMPLOYEE ID]]=CARD[EMPLOYEE ID])*
CARD[DATE/TIME]-[@[DATE/TIME]])),1)=ABS(([@[EMPLOYEE ID]]=CARD[EMPLOYEE ID])*
CARD[DATE/TIME]-[@[DATE/TIME]])),CARD[DATE/TIME])
  • 将传感器中的员工ID与卡中的员工ID进行比较
  • 返回匹配日期时间的数组或零(如果不匹配)
  • 从当前行中减去日期/时间并返回ABS值
  • 使用LOOKUP,返回与最小(ABS)差异处于同一位置的最后一次。
  • AGGREGATE函数用于避免处理错误值。它还允许避免使用ctrl + shift + enter作为数组公式。

enter image description here