Return 单元格的值基于 Excel 中的日期范围
Return cell's value based on its date range in Excel
我有一个包含特定产品和日期的 table,我想获得与该日期对应的成本值。来源 table 有一个日期范围,而不是实际匹配(这是我的问题)。
这是任务:我们正在尝试根据 Sheet 2
填写“成本”列
SHEET 1:
Product
Date
Cost
price
First
29/12/2021
result 1 (formula type X)
100
Second
05/01/2021
result 2 (formula type X)
200
另一个 Sheet 具有具有所需结果(售价)的日期范围,如下所示:
SHEET 2:
Product
Start Date
End Date
Cost
First
28/12/2020
03/01/2021
result 1
Second
04/01/2021
11/01/2021
result 2
PS。我在同一日期对不同的产品有不同的成本。因此,我们还需要添加一个参数,将一个 sheet 的产品与另一个
的产品相匹配
如果给定范围均从 A1 开始并在 D3 结束,则以下内容适用于 Sheet1!C2
:
=INDEX(Sheet2!D:D,MATCH(1,(B2>Sheet2!B:B)*(B2<Sheet2!C:C)*(A2=Sheet2!A:A),0))
这是一个数组公式,需要输入ctrl + shift + enter
它索引 sheet2 列 D 并搜索所有提到的条件都为真的第一个匹配项 (=1
)。每个条件为范围内的每个单元格生成 1 或 0,并将其乘以同一行中下一个范围的单元格的结果。如果任一条件为假,则乘以 0 结果为 0。
如果所有条件都为真,结果将是 1 (111)。
整体产生一个数组{0,0,1,0,...}和匹配函数returns第N次出现的第1个,等于条件为真的行号.
既然你提到了 tables,我假设你指的是真正的 Excel Table 而不仅仅是格式化为 table 外观的单元格。
- Sheet 1 Table 被命名为:
tbl_ProductPrice
- Sheet 2 Table 被命名为:
tbl_ProductCost
sheet1 中的“成本”列公式:
=SUMIFS(tbl_ProductCost[Cost],[Date],">="&tbl_ProductCost[Start Date],[Date],"<="&tbl_ProductCost[End Date])
说明
第一个 SUMIFS 参数,“成本”列,是所有条件都为真时将被汇总的内容。
第一个如果:
- 第二个参数是要检查的日期标准。
- 第三个参数是要检查的内容,大于或等于开始日期。
第二个如果:
- 第四个参数是第二个 if 语句的日期
- 第五个参数正在检查是否小于或等于结束日期。
结果:
编辑
根据您对不同日期范围的多个产品条目的评论,我会改用索引匹配方法。
=INDEX(tbl_ProductCost[Cost],MATCH(1,([@Product]=tbl_ProductCost[Product])*([@Date]>=tbl_ProductCost[Start Date])*([@Date]<=tbl_ProductCost[End Date]),0))
使用Ctrl+Shift+Enter输入公式,因为它是一个数组公式。
我也添加了产品匹配,因为您为每种产品类型指定了多个日期范围。
结果
我有一个包含特定产品和日期的 table,我想获得与该日期对应的成本值。来源 table 有一个日期范围,而不是实际匹配(这是我的问题)。 这是任务:我们正在尝试根据 Sheet 2
填写“成本”列SHEET 1:
Product | Date | Cost | price |
---|---|---|---|
First | 29/12/2021 | result 1 (formula type X) | 100 |
Second | 05/01/2021 | result 2 (formula type X) | 200 |
另一个 Sheet 具有具有所需结果(售价)的日期范围,如下所示:
SHEET 2:
Product | Start Date | End Date | Cost |
---|---|---|---|
First | 28/12/2020 | 03/01/2021 | result 1 |
Second | 04/01/2021 | 11/01/2021 | result 2 |
PS。我在同一日期对不同的产品有不同的成本。因此,我们还需要添加一个参数,将一个 sheet 的产品与另一个
的产品相匹配如果给定范围均从 A1 开始并在 D3 结束,则以下内容适用于 Sheet1!C2
:
=INDEX(Sheet2!D:D,MATCH(1,(B2>Sheet2!B:B)*(B2<Sheet2!C:C)*(A2=Sheet2!A:A),0))
这是一个数组公式,需要输入ctrl + shift + enter
它索引 sheet2 列 D 并搜索所有提到的条件都为真的第一个匹配项 (=1
)。每个条件为范围内的每个单元格生成 1 或 0,并将其乘以同一行中下一个范围的单元格的结果。如果任一条件为假,则乘以 0 结果为 0。
如果所有条件都为真,结果将是 1 (111)。
整体产生一个数组{0,0,1,0,...}和匹配函数returns第N次出现的第1个,等于条件为真的行号.
既然你提到了 tables,我假设你指的是真正的 Excel Table 而不仅仅是格式化为 table 外观的单元格。
- Sheet 1 Table 被命名为:
tbl_ProductPrice
- Sheet 2 Table 被命名为:
tbl_ProductCost
sheet1 中的“成本”列公式:
=SUMIFS(tbl_ProductCost[Cost],[Date],">="&tbl_ProductCost[Start Date],[Date],"<="&tbl_ProductCost[End Date])
说明
第一个 SUMIFS 参数,“成本”列,是所有条件都为真时将被汇总的内容。
第一个如果:
- 第二个参数是要检查的日期标准。
- 第三个参数是要检查的内容,大于或等于开始日期。
第二个如果:
- 第四个参数是第二个 if 语句的日期
- 第五个参数正在检查是否小于或等于结束日期。
结果:
编辑
根据您对不同日期范围的多个产品条目的评论,我会改用索引匹配方法。
=INDEX(tbl_ProductCost[Cost],MATCH(1,([@Product]=tbl_ProductCost[Product])*([@Date]>=tbl_ProductCost[Start Date])*([@Date]<=tbl_ProductCost[End Date]),0))
使用Ctrl+Shift+Enter输入公式,因为它是一个数组公式。
我也添加了产品匹配,因为您为每种产品类型指定了多个日期范围。
结果