计算最近的较小值

问题描述 投票:0回答:2

我有一张 Excel 工作表,其中一列中包含日期(已排序),另一列中包含值。例如:

1/1/2019     10
1/2/2019     12
1/3/2019     8
1/4/2019     20
1/10/2019    8
1/12/2019    22

我想在第三列中计算该值小于或等于当前值的最近日期(如果当前是最低的,则使用当前日期)。 因此,对于上面的示例数据,

1/1/2019     10    1/1/2019
1/2/2019     12    1/1/2019
1/3/2019     8     1/3/2019
1/4/2019     20    1/3/2019
1/10/2019    8     1/3/2019
1/12/2019    22    1/10/2019

有没有一种方法可以在不使用 VBA 宏的情况下完成此任务?

excel excel-formula
2个回答
1
投票

这里有一个方法。 将它们粘贴并复制到该列中。

Column C:  =IF(COUNTIF(B2:B6,D1)=0,A1,MINIFS(A2:A6,B2:B6,D1))

Column D:  =CONCATENATE("<",TEXT(VALUE(B1),"#"))

您可以隐藏 D 列以使其更漂亮。 这是 COUNTIF 和 MINIFS 使用的标准。 C 列是输出。

1/1/2019    10  1/3/2019    <10
1/2/2019    12  1/3/2019    <12
1/3/2019    8   1/3/2019    <8
1/4/2019    20  1/10/2019   <20
1/10/2019   8   1/10/2019   <8
1/12/2019   22  1/12/2019   <22

公式查看:

43466   10  =IF(COUNTIF(B2:B6,D1)=0,A1,MINIFS(A2:A6,B2:B6,D1))  =CONCATENATE("<",TEXT(VALUE(B1),"#"))
43467   12  =IF(COUNTIF(B3:B7,D2)=0,A2,MINIFS(A3:A7,B3:B7,D2))  =CONCATENATE("<",TEXT(VALUE(B2),"#"))
43468   8   =IF(COUNTIF(B4:B8,D3)=0,A3,MINIFS(A4:A8,B4:B8,D3))  =CONCATENATE("<",TEXT(VALUE(B3),"#"))
43469   20  =IF(COUNTIF(B5:B9,D4)=0,A4,MINIFS(A5:A9,B5:B9,D4))  =CONCATENATE("<",TEXT(VALUE(B4),"#"))
43475   8   =IF(COUNTIF(B6:B10,D5)=0,A5,MINIFS(A6:A10,B6:B10,D5))   =CONCATENATE("<",TEXT(VALUE(B5),"#"))
43477   22  =IF(COUNTIF(B7:B11,D6)=0,A6,MINIFS(A7:A11,B7:B11,D6))   =CONCATENATE("<",TEXT(VALUE(B6),"#"))

这有点草率,因为您可以使用命名值或绝对值作为范围的末尾,例如6 博茨瓦纳元。 否则,您将查看表格下方的单元格,只要它们是空的就可以,但有点草率。

Column C:  =IF(COUNTIF(B2:B$6,D1)=0,A1,MINIFS(A2:A$6,B2:B$6,D1))

0
投票

单元格C10中的公式并向下拖动

=INDEX($A$1:$A$15,MAX(IF(MIN($B$10:B10)=$B$10:$B10,ROW($B$10:$B10),0)))

enter image description here

第 14 行的结果是实际日期,因为这是最小的,因此指的是实际日期。

INDEX
范围始终从单元格 A1 开始,以便更轻松地引用所需的行。

© www.soinside.com 2019 - 2024. All rights reserved.