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输入公式,因为它是一个数组公式。

我也添加了产品匹配,因为您为每种产品类型指定了多个日期范围。

结果