Excel:查找特定时间范围内的值
想象一下,我有两个电子表格,一个是关于住在我的房子里的房客的,另一个是关于房客离开后在房子里进行的维修。这是他们的样子。 租约:Excel:查找特定时间范围内的值,excel,excel-formula,lookup,Excel,Excel Formula,Lookup,想象一下,我有两个电子表格,一个是关于住在我的房子里的房客的,另一个是关于房客离开后在房子里进行的维修。这是他们的样子。 租约: 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 |
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年3月8日,它位于租户“2”的无效范围之间,因此将租户ID分配给下一列
通常,如果每个房产只有一个租户,我可以做一个简单的查找,但这会使我的情况复杂化
我试着使用vlookup和dates函数,但找不到方法
感谢您的帮助您似乎正在寻找一个包含多个匹配行号条件的索引。通过在丢弃错误的同时强制所有不匹配的内容进入错误状态,可以使用聚合返回行号
=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))
=索引(B:B,聚合(15,6,行($1:$11)/(A$1:A$11=G2)*(D$1:D$11=H2)),1))
您似乎在寻找一个包含多个匹配行号条件的索引。通过在丢弃错误的同时强制所有不匹配的内容进入错误状态,可以使用聚合返回行号
=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))
=索引(B:B,聚合(15,6,行($1:$11)/(A$1:A$11=G2)*(D$1:D$11=H2)),1))
您可以使用SUMIFS函数来完成此操作。如果只有一个租户ID,则将所有匹配的租户ID相加将生成租户ID:
=SUMIFS(B:B,A:A,G2,D:D,"<" & H4,E:E,">" & H2)
=SUMIFS(B:B,A:A,G2,D:D,”&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))
=IF(COUNTIFS(A:A,G2,C:C,“&H2)>1,“#找到多个”,SUMIFS(B:B,A:A,G2,C:C,“&H2))
您可以使用SUMIFS函数完成此操作。如果只有一个租户ID,则将所有匹配的租户ID相加将生成租户ID:
=SUMIFS(B:B,A:A,G2,D:D,"<" & H4,E:E,">" & H2)
=SUMIFS(B:B,A:A,G2,D:D,”&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))
=IF(COUNTIFS(A:A,G2,C:C,“&H2)>1,“#找到多个”,SUMIFS(B:B,A:A,G2,C:C,“&H2))
我认为这不是个坏主意。也许你可以用COUNTIFS来检查只有一个?谢谢@TomSharpe,我已经改变了答案来利用这个想法。我不认为这是个坏主意。也许你可以用COUNTIFS来检查是否只有一个?谢谢@TomSharpe,我已经改变了答案来利用这个想法。这很完美,公式完全符合我的需要。但有两个问题。首先,因为我有相当大的数据集(126000行和20000行),所以不可能将其放大。第二,在某些情况下,我得到#NUM!错误,即使引用是正确的。如果我处理的是126K行,我将转到VBA并完全在二维变量数组中工作,然后将值整体返回工作表。使用本机工作表公式时,没有任何东西不会导致明显的计算延迟。#REF代码>错误来自未找到匹配项,可以使用IFERROR包装避免。我无法对#REF#进一步发表评论!错误,因为我没有复制问题的数据。这是完美的,公式完全符合我的需要。但有两个问题。首先,因为我有相当大的数据集(126000行和20000行),所以不可能将其放大。第二,在某些情况下,我得到#NUM!错误,即使引用是正确的。如果我处理的是126K行,我将转到VBA并完全在二维变量数组中工作,然后将值整体返回工作表。使用本机工作表公式时,没有任何东西不会导致明显的计算延迟。#REF代码>错误来自未找到匹配项,可以使用IFERROR包装避免。我无法对#REF#进一步发表评论!错误,因为我没有再现问题的数据。