【发布时间】: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