Excel 函数/VBA 根据日期时间和两个条件查找值

Excel 函数/VBA 根据日期时间和两个条件查找值

我测量了包含建筑物占用率数据的数据。每层楼有多个房间,每个房间内有多个房间区域。房间号包含楼层,因此我不需要按楼层搜索。

占用数据有一个时间戳,记录特定区域内的任何活动。

基本上,我希望 Excel 查看房间号和房间面积是否匹配以及时间是否匹配,然后报告该区域是否被占用。

我只能找到 INDEX MATCH,他们搜索多个精确标准,但这不适用于此处,因为我需要最接近的时间值匹配。

非常感谢您的帮助!我对可以实现此目的的函数最感兴趣,但我也接受 VBA 解决方案。

谢谢你!

这是数据链接

http://jmp.sh/v/D907ef9W3055ThlR1ssa

| Date / Time    | DATE     | TIME  | FLOOR | LAB    | LAB AREA | Occupancy (0 = unoccupied) |
|----------------|----------|-------|-------|--------|----------|----------------------------|
| 9/3/2015 10:30 | 9/3/2015 | 10:30 | 9     | 99400  | A        | 0                          |
| 9/3/2015 10:30 | 9/3/2015 | 10:30 | 10    | 109400 | D        | 0                          |
| 9/3/2015 10:30 | 9/3/2015 | 10:30 | 8     | 89400  | A        | 0                          |
| 9/3/2015 10:31 | 9/3/2015 | 10:31 | 10    | 109400 | D        | 1                          |
| 9/3/2015 10:36 | 9/3/2015 | 10:36 | 8     | 89400  | B        | 0                          |
| 9/3/2015 10:38 | 9/3/2015 | 10:38 | 8     | 89400  | A        | 1                          |
| 9/3/2015 10:40 | 9/3/2015 | 10:40 | 10    | 109410 | A        | 1                          |
| 9/3/2015 10:41 | 9/3/2015 | 10:41 | 15    | 159400 | A        | 1                          |
| 9/3/2015 10:52 | 9/3/2015 | 10:52 | 8     | 89400  | B        | 1                          |
| 9/3/2015 10:57 | 9/3/2015 | 10:57 | 8     | 89400  | E        | 1                          |
| 9/3/2015 11:20 | 9/3/2015 | 11:20 | 10    | 109410 | A        | 0                          |
| 9/3/2015 11:21 | 9/3/2015 | 11:21 | 17    | 179400 | D        | 1                          |
| 9/3/2015 11:21 | 9/3/2015 | 11:21 | 12    | 129400 | E        | 1                          |
| 9/3/2015 11:23 | 9/3/2015 | 11:23 | 10    | 109410 | A        | 1                          |
| 9/3/2015 11:26 | 9/3/2015 | 11:26 | 8     | 89400  | E        | 0                          |
| 9/3/2015 11:54 | 9/3/2015 | 11:54 | 8     | 89400  | C        | 0                          |
| 9/3/2015 14:10 | 9/3/2015 | 14:10 | 17    | 179400 | E        | 0                          |
| 9/3/2015 14:16 | 9/3/2015 | 14:16 | 12    | 129410 | B        | 0                          |
| 9/3/2015 14:17 | 9/3/2015 | 14:17 | 14    | 149410 | A        | 0                          |
| 9/3/2015 14:31 | 9/3/2015 | 14:31 | 17    | 179400 | E        | 1                          |
| 9/3/2015 14:38 | 9/3/2015 | 14:38 | 9     | 99400  | A        | 0                          |
| 9/3/2015 14:43 | 9/3/2015 | 14:43 | 14    | 149410 | A        | 1                          |
| 9/3/2015 14:47 | 9/3/2015 | 14:47 | 17    | 179400 | D        | 1                          |
| 9/3/2015 14:51 | 9/3/2015 | 14:51 | 9     | 99400  | A        | 1                          |
| 9/3/2015 14:56 | 9/3/2015 | 14:56 | 14    | 149410 | A        | 0                          |
| 9/3/2015 15:01 | 9/3/2015 | 15:01 | 10    | 109410 | A        | 0                          |
| 9/3/2015 15:04 | 9/3/2015 | 15:04 | 10    | 109410 | A        | 1                          |
| 9/3/2015 15:07 | 9/3/2015 | 15:07 | 14    | 149410 | A        | 1                          |
| 9/3/2015 15:15 | 9/3/2015 | 15:15 | 8     | 89400  | C        | 1                          |
| 9/3/2015 15:18 | 9/3/2015 | 15:18 | 12    | 129400 | E        | 1                          |
| 9/3/2015 15:22 | 9/3/2015 | 15:22 | 8     | 89400  | E        | 1                          |
| 9/3/2015 15:27 | 9/3/2015 | 15:27 | 17    | 179400 | D        | 0                          |
| 9/3/2015 15:27 | 9/3/2015 | 15:27 | 17    | 179400 | E        | 0                          |

答案1

请看下面的截图。为了便于理解,公式被拆分成几个辅助单元格,但可以将其构建为在一个单元格中(或使用命名范围)运行。

首先按日期/时间、然后按实验室区域、然后按实验室对数据进行排序。

firstRow       =MATCH(lab&Area,INDEX(FullTable[LAB]&FullTable[LAB AREA],0),0)
lastRow        =COUNTIFS(FullTable[LAB],lab,FullTable[LAB AREA],Area)+firstRow
TimeMatchRow   =MATCH(time,INDEX(FullTable[Date / Time],firstRow):INDEX(FullTable[Date / Time],lastRow),1)
occupancyValue =IF(INDEX(FullTable[Occupancy (0 = unoccupied)],firstRow+TimeMatchRow-1),"occupied","not occupied")

firstRow 确定找到实验室和区域组合的第一行。添加实验室和区域组合的计数有助于确定用于近似查找时间值的范围的最后一行。使用 1 作为最后一个参数,如果未找到精确匹配,Match 将返回下一个最小值。这是找到时间匹配的行。最后,在占用率列上使用索引,添加 firstRow 和时间匹配行并调整一。

在此处输入图片描述

相关内容