Excel:查找特定时间范围内的值

Posted

技术标签:

【中文标题】Excel:查找特定时间范围内的值【英文标题】:Excel: Lookup the value that is within a certain time range 【发布时间】:2017-06-19 13:01:47 【问题描述】:

假设我有两张电子表格,一张包含住在我物业中的租户,另一张包含租户离开后在物业中进行的维修。这是他们的样子。 租约:

 Property ID | Tenant ID | Start of Tenancy | End of Tenancy | Start of next tenancy
 1           | 1         | 01/01/2001       | 30/01/2001     | 15/02/2001
 1           | 2         | 15/02/2001       | 28/02/2001     | 15/03/2001
 1           | 3         | 15/03/2001       | 30/03/2001     | 15/04/2001
 2           | 4         | 15/01/2001       | 30/01/2001     | 31/01/2001
 2           | 4         | 31/01/2001       | 30/04/2001     | 05/05/2001
 2           | 5         | 05/05/2001       | 05/06/2001     | 20/06/2001
 3           | 6         | 03/05/2001       | 15/08/2001     | 30/08/2001
 3           | 7         | 30/08/2001       | 15/10/2001     | 15/11/2001
 4           | 1         | 31/01/2001       | 30/04/2001     | 15/05/2001
 4           | 8         | 15/05/2001       | 30/08/2001     | 30/09/2001

维修:

 Property ID | Repair Issued Date |
 1           | 08/03/2001         |
 1           | 10/04/2001         |
 2           | 03/05/2001         |
 2           | 15/06/2001         |
 3           | 18/08/2001         |
 4           | 10/05/2001         |
 4           | 15/09/2001         |

我需要在维修完成之前找出谁是租户。因此,我需要匹配“物业 ID”,如果“维修签发日期”在“租赁结束”和“下一个租赁开始”之间的范围内,则分配“租户 ID”。简单的例子,属性“1”的第一次维修是在 2001 年 8 月 3 日,位于租户“2”的无效范围之间,因此将租户 ID 分配到下一列。

通常,如果每处房产只有一个租户,我可以进行简单的查找,但这会使我的情况复杂化。

我尝试使用 vlookup 和日期函数,但不知道怎么做。

感谢您的帮助

【问题讨论】:

【参考方案1】:

您可以使用 SUMIFS 函数执行此操作。将所有匹配的租户 ID 相加(只要只有一个)将得出租户 ID:

=SUMIFS(B:B,A:A,G2,D:D,"<" & H4,E:E,">" & H2)

正如@Tom Sharpe 所建议的,您可以测试多个匹配项并“错误”输出:

=IF(COUNTIFS(A:A,G2,C:C,"<" & H2,E:E,">" & H2)>1,"#MULTIPLE FOUND",SUMIFS(B:B,A:A,G2,C:C,"<" & H2,E:E,">" & H2))

【讨论】:

我不认为这是一个坏主意。也许您可以使用 COUNTIFS 来检查是否只有一个? 感谢@TomSharpe,我已经更改了答案以利用这个想法。【参考方案2】:

您似乎正在寻找具有多个匹配行号条件的 INDEX。通过在丢弃错误的同时强制所有不匹配的内容进入错误状态,可以使用 AGGREGATE 返回行号。

=INDEX(B:B, AGGREGATE(15, 6, ROW($1:$11)/((A$1:A$11=G2)*(D$1:D$11<=H2)*(E$1:E$11>=H2)), 1))

【讨论】:

这是完美的,公式完全符合我的需要。不过有两个问题。首先,由于我有相当大的数据集(126000 行和 20000 行),因此无法扩大规模。其次,在某些情况下,我会得到 #NUM!错误,即使引用是正确的。 如果我正在处理 126K 行,我会转移到 VBA 并完全在二维变量数组中工作,然后将值返回到工作表 en masse。使用本机工作表公式,没有什么不会导致明显的计算滞后。 #REF! 错误来自找不到匹配项,可以使用 IFERROR 包装器来避免。我无法进一步评论#REF!错误,因为我没有重现该问题的数据。

以上是关于Excel:查找特定时间范围内的值的主要内容,如果未能解决你的问题,请参考以下文章

在excel 2013中自动填充范围内的特定文本

如何从特定小时范围内的行中选择最小值?

从 Vava 到 MongoDB 查询:查找特定日期范围内的事件

尝试使用 OpenCV 查找特定范围内的像素(使用 for 循环)

特定时间范围内的重叠计数

用于查找单元格值是不是在范围内的双 For 循环