【问题标题】:Fill down excel values between dates填写日期之间的excel值
【发布时间】:2019-12-05 08:04:23
【问题描述】:

我有一个 Excel 表(称为 Sheet1),其中包含如下所示的数据行:

 Unit | Names  | Begin_Date | End_Date
-----------------------------------
  A   | Jones  | 1/1/2016   | 1/4/2018
  A   | Frank  | 2/11/2018  | 
  B   | Adam   | 3/5/2011   | 
  C   | Jane   | 6/9/2012   | 7/14/2016
  C   | John   | 7/28/2016  | 9/22/2017
  C   | Joe    | 12/31/2017 | 1/1/2019
  C   | Joe    | 1/2/2019   | 

我正在尝试将其转换为将单位作为列标题并将日期作为行的格式。这个想法是,对于开始日期和结束日期之间的每一天,人名都应该在适当的单元格中。如果同一单元内一个人的结束日期与下一个人的开始日期之间存在差距,则公式将列出“空缺”。假设每个单元在该单元的第一个“开始日期”之前是空置的,结束日期的空白表示该人仍然占据该单元。理想情况下,Sheet2 上的完整数据集应如下所示:

  Date     |   A    |   B   |   C   |
 -------------------------------------
 3/5/2011  | Vacant | Adam  | Vacant
 3/6/2011  | Vacant | Adam  | Vacant
   ...
 6/9/2012  | Vacant | Adam  | Jane
   ...
 1/1/2016  | Jones  | Adam  | Jane
   ...
 7/14/2016 | Jones  | Adam  | Jane
 7/15/2016 | Jones  | Adam  | Vacant
 7/16/2016 | Jones  | Adam  | Vacant
   ...
 7/28/2016 | Jones  | Adam  | John
  ...
 1/4/2018  | Jones  | Adam  | Joe
 1/5/2018  | Vacant | Adam  | Joe

等等

到目前为止,我的公式填充了第一个值,即第一个住在该单元中的人,或者,如果没有人,那么它会在 Sheet2 上列出“空置”。但是,我不确定如何扩展它来寻找下一个人。我在 A 列中列出了所有日期,在第 1 行中列出了所有唯一单位名称。任何帮助或建议将不胜感激!

=iferror(if(index(Sheet1!Names,match(1,(Sheet2!A$2=Sheet1!Begin_Date)*(Sheet2!$A3=Sheet1!End_Date),0))=Index(Sheet1!Names, match($A2,ArrayFormula(min(Sheet1!Unit=B$2,Sheet1!Begin_Date)),"空缺",Index(Sheet1!Names,match($A2,ArrayFormula(min(Sheet1!Unit=B$2,Sheet1! Begin_Date))),Index(Sheet1!Names,match($A2,ArrayFormula(min(Sheet1!Unit=B$2,Sheet1!Begin_Date))))

【问题讨论】:

    标签: excel excel-formula google-sheets-formula array-formulas


    【解决方案1】:

    这使用聚合,基本上是一个数组公式,但不必输入 CtrlShiftEnter

    =IF($F2="","",IFERROR(INDEX($B:$B,AGGREGATE(15,6,ROW($A$2:$A$10)/
    (($A$2:$A$10=G$1)*($F2>=$C$2:$C$10)*(($F2<=$D$2:$D$10)+($D$2:$D$10=""))),1)),"Vacant"))
    

    Aggregate(15,6...1) 找出其中数组的最小值,忽略任何错误值。该数组由第 2-10 行除以行上的条件组成。使用 * 表示 AND 和 + 表示 OR 设置条件(如您所做的那样)。如果条件为假,则会导致除以零,从而产生错误,因此只考虑满足条件的行。

    你也可以用这个

    =IF($F2="","",IFERROR(INDEX($B$2:$B$10,MATCH(1,
    ($A$2:$A$10=G$1)*($F2>=$C$2:$C$10)*(($F2<=$D$2:$D$10)+($D$2:$D$10="")),0)),"Vacant"))
    

    作为数组公式输入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多