我正在研究一个excel公式,以根据excel表查找下一个可用的日期。我有两个表,A和B,表A具有日期和结果列,表B具有日期和计数,我想根据表A和B中的日期计数将表B中的日期获取到表A的结果列中。请注意,表A“结果”列中的日期是预期的输出,并且始终与表A的日期列中的日期相同或更高。日期格式为月/日/年
table A
Date Result
01-02-2018 01-02-2018
01-02-2018 01-02-2018
01-05-2018 01-05-2018
01-05-2018 01-05-2018
01-05-2018 01-07-2018
01-05-2018 01-07-2018
01-06-2018 01-07-2018
01-07-2018 01-10-2018
01-09-2018 01-10-2018
01-11-2018 01-12-2018
01-12-2018 01-12-2018
table B
Date Count
01-02-2018 3
01-03-2018 1
01-04-2018 3
01-05-2018 2
01-07-2018 3
01-10-2018 3
01-12-2018 2
假设在A1:A9中放入“表A”,包括A1
:“表A”,A2:B2
(标题):“日期”和“结果”
放在A11:A1中的“表B”,包括A11
:“表B”,A12:B12
(标题):“日期”和“计数”
在“结果”列B3
中,公式向下复制:
=IF(COUNTIF(A$3:A3,A3)<=IFERROR(VLOOKUP(A3,$A$13:$B$17,2,0),0),A3,AGGREGATE(15,6,$A$13:$A$17/($A$13:$A$17>=MAX(A3,INDEX(A3:A$10,MATCH(1,INDEX(0+(A3:A$10<>A3),0),0)))),1))
好吧,这项工作花了我比预期更长的时间,最后我在几个helper专栏的帮助下提出了一个解决方案(不确定是否可以选择?)。>
因此,假设您具有以下命名范围
:Table A
中的所有日期(该日期是可选的,因为我未在解决方案中使用它...);Table B
中的所有日期。首先,我“”展开“
Table B
放入一个列出所有日期的列表结构:我的示例中单元格J2
中第一个辅助列的公式是:
=SUM($I$2:I2)
用于在
Table B
中查找计数的总计。
[单元格M2
中第二个帮助器列的公式是:
,则在公式栏中完成公式后,必须按Ctrl + Shift + Enter,否则它将无法正常运行。然后,您只需将公式向下拖动即可应用。=INDEX(TblB_Date,MATCH(1,--(ROW(A1)<=$J$2:$J$8),0))
将行位置作为参考从
Table B
中“布置”所有日期,并将其与计数的连续总计进行比较,并返回相应的日期。假设它是数组公式
请注意,我给第二个帮助者列M2:M18
(不包括M19
,这是一个错误)的名称TblB_Date_Expanded
下一步是根据您的条件在TblB_Date_Expanded中查找所需日期的位置
单元格E2
中的公式是:
=MAX(MATCH(AGGREGATE(15,6,TblB_Date_Expanded/(A2<=TblB_Date_Expanded),1),TblB_Date_Expanded,0),E1+1)
其中
A2
是Table A
中的第一个日期,如您在下一个屏幕截图中所见。
逻辑是使用AGGREGATE
函数基于TblB_Date_Expanded
中的给定日期返回Table A
中最接近的起始日期,然后使用MATCH函数返回行位置,最后使用如果已使用相同位置(在上一行中),则MAX函数将位置增加1
。有了已知的行位置,我们可以使用以下公式轻松地从
TblB_Date_Expanded
返回相应的日期:
=INDEX(TblB_Date_Expanded,E2)
想法
,我无法克服的困难部分是在帮助器列中使用“循环引用”或“自我引用”。换句话说,我不确定如何使用单个公式返回值的数组,其值取决于其先验值。我希望有人可以提出一种更优雅的方式来解决这个问题:)让我知道您是否有任何疑问。干杯:)