如何根据可用性表计算下一天/同一天?

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

我正在研究一个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


r excel datetime excel-formula datetimeoffset
2个回答
0
投票

假设在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))

0
投票

好吧,这项工作花了我比预期更长的时间,最后我在几个helper专栏的帮助下提出了一个解决方案(不确定是否可以选择?)。>

因此,假设您具有以下命名范围

  • TblA_Date是您的Table A中的所有日期(该日期是可选的,因为我未在解决方案中使用它...);
  • TblB_Date
  • 是您的Table B中的所有日期。

    首先,我“”展开“

将您的Table B放入一个列出所有日期的列表结构:

Expand Table B

我的示例中单元格J2中第一个辅助列的公式是:

=SUM($I$2:I2)

用于在Table B中查找计数的总计。

[单元格M2中第二个帮助器列的公式是:

=INDEX(TblB_Date,MATCH(1,--(ROW(A1)<=$J$2:$J$8),0))

将行位置作为参考从Table B中“布置”所有日期,并将其与计数的连续总计进行比较,并返回相应的日期。假设它是数组公式

,则在公式栏中完成公式后,必须Ctrl + Shift + Enter,否则它将无法正常运行。然后,您只需将公式向下拖动即可应用。

请注意,我给第二个帮助者列M2:M18(不包括M19,这是一个错误)的名称TblB_Date_Expanded

下一步是根据您的条件在TblB_Date_Expanded中查找所需日期的位置

  1. “对于表A中的每个日期,结果日期是相同日期或下一个更高的日期” AND
  2. Table B中的日期只能使用不超过其对应的计数
  3. Index Column

单元格E2中的公式是:

=MAX(MATCH(AGGREGATE(15,6,TblB_Date_Expanded/(A2<=TblB_Date_Expanded),1),TblB_Date_Expanded,0),E1+1)

其中A2Table A中的第一个日期,如您在下一个屏幕截图中所见。

逻辑是使用AGGREGATE

函数基于TblB_Date_Expanded中的给定日期返回Table A中最接近的起始日期,然后使用MATCH函数返回行位置,最后使用如果已使用相同位置(在上一行中),则MAX函数将位置增加1

有了已知的行位置,我们可以使用以下公式轻松地从TblB_Date_Expanded返回相应的日期:

=INDEX(TblB_Date_Expanded,E2)

Result

想法

,我无法克服的困难部分是在帮助器列中使用“循环引用”或“自我引用”。换句话说,我不确定如何使用单个公式返回值的数组,其值取决于其先验值。我希望有人可以提出一种更优雅的方式来解决这个问题:)

让我知道您是否有任何疑问。干杯:)

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