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:查找特定时间范围内的值的主要内容,如果未能解决你的问题,请参考以下文章
从 Vava 到 MongoDB 查询:查找特定日期范围内的事件