【问题标题】:populate cells defined by dates period填充由日期期间定义的单元格
【发布时间】:2016-04-05 19:55:05
【问题描述】:

抱歉,如果该帖子实际上是重复的。只是无法谷歌任何类似的东西,我有点卡在方法上。 我正在尝试根据不同工作表行中的日期填充一张工作表中的单元格,如下所示:

Sheet1 - 条目表

ID | Name | Start date | End date
10 | Mike | 1.06.2016  | 2.06.2016
13 | Dido | 1.06.2016  | 5.06.2016
8  | Rene | 2.06.2016  | 20.06.2016

Sheet2 - 报告表

 ids/dates  | 1.06.2016 | 2.06.2016 | 3.06.2016 | date+1
  8         |           | Rene      | Rene      | Rene 
 10         | Mike      | Mike      |           |
 13         | Dido      | Dido      | Dido      | Dido 

列 名称 单元格将根据 Sheet1 列 ID、开始日期、结束日期填充到 sheet2 中。填充单元格的位置在 sheet2 中由列 ID 和行 Dates 定义,它们应等于 sheet1 中的相同值。

【问题讨论】:

  • 标记标志是任何值或条件格式。我将其删除并再添加一列 - 名称。应根据 ID 和日期范围填充单元格名称。

标签: date google-sheets populate


【解决方案1】:

这个报告可以借助一个公式来完成。请check this Example File。


假设

假设,您有 Sheet1 和数据:

  • Col A:ID
  • B 栏:名称
  • C 列:开始日期
  • Col D:结束日期

案例 1。ID 是唯一的。

转到 Sheet2 并将此公式粘贴到其中:

={{"ids/dates";filter(Sheet1!A2:A,Sheet1!A2:A<>"")},{ArrayFormula(add(MIN(Sheet1!C:D),COLUMN(OFFSET(A1,,,1,MAX(Sheet1!C:D)-MIN(Sheet1!C:D)))-1));ArrayFormula(if(--(add(MIN(Sheet1!C:D),COLUMN(OFFSET(A1,,,1,MAX(Sheet1!C:D)-MIN(Sheet1!C:D)))-1)>=filter(Sheet1!C2:C,Sheet1!C2:C<>0))*--(add(MIN(Sheet1!C:D),COLUMN(OFFSET(A1,,,1,MAX(Sheet1!C:D)-MIN(Sheet1!C:D)))-1)<=filter(Sheet1!D2:D,Sheet1!C2:C<>0))=1,VLOOKUP(FILTER(Sheet1!A2:A,Sheet1!A2:A<>""),Sheet1!A:B,2,0),""))}}

就是这样。当新数据到达 Sheet1 时,报表将自动展开。如果 Sheet1 上的数据不完整(缺少姓名或日期),报告将返回错误。


案例 2。ID 不是唯一的。

当 ID 不唯一时,此解决方案有效,ID 将被组合在一起。在这种情况下,一个 ID 属于一个人。

公式会长一点:

={{"ids/dates";sort(UNIQUE(filter(Sheet1!A2:A,Sheet1!A2:A<>"")))},{ArrayFormula(add(MIN(Sheet1!C:D),COLUMN(OFFSET(A1,,,1,MAX(Sheet1!C:D)-MIN(Sheet1!C:D)))-1));ArrayFormula(if(QUERY(QUERY({filter(Sheet1!A2:A,Sheet1!A2:A<>""),ArrayFormula((--(add(MIN(Sheet1!C:D),COLUMN(OFFSET(A1,,,1,MAX(Sheet1!C:D)-MIN(Sheet1!C:D)))-1)>=filter(Sheet1!C2:C,Sheet1!C2:C<>0))*--(add(MIN(Sheet1!C:D),COLUMN(OFFSET(A1,,,1,MAX(Sheet1!C:D)-MIN(Sheet1!C:D)))-1)<=filter(Sheet1!D2:D,Sheet1!C2:C<>0))))},"select Col1, sum(Col"&JOIN("), sum(Col",ArrayFormula(COLUMN(OFFSET(B2,,,1,MAX(Sheet1!C:D)-MIN(Sheet1!C:D)))))&") group by Col1"),"Select Col"&JOIN(", Col",ArrayFormula(COLUMN(OFFSET(B2,,,1,MAX(Sheet1!C:D)-MIN(Sheet1!C:D)))))&" where Col1>0",0)=1,VLOOKUP(sort(UNIQUE(filter(Sheet1!A2:A,Sheet1!A2:A<>""))),Sheet1!A:B,2,0),""))}}

见example here.


案例 3。ID 不是唯一的。一个ID一个名字

这里是working example,请查收。这个案子是最难的。我们可以有多个 ID 引用多个名称。最终公式:

={{"ids/dates",ArrayFormula(add(MIN(Sheet1!C:D),COLUMN(OFFSET(A1,,,1,MAX(Sheet1!C:D)-MIN(Sheet1!C:D)))-1))};{sort(UNIQUE(FILTER(Sheet1!A2:A,Sheet1!A2:A<>""))),ArrayFormula(IFERROR(VLOOKUP(QUERY(QUERY({FILTER(Sheet1!A2:B,Sheet1!A2:A<>""),ArrayFormula(--(add(MIN(Sheet1!C:D),COLUMN(OFFSET(A1,,,1,MAX(Sheet1!C:D)-MIN(Sheet1!C:D)))-1)>=filter(Sheet1!C2:C,Sheet1!C2:C<>0))*--(add(MIN(Sheet1!C:D),COLUMN(OFFSET(A1,,,1,MAX(Sheet1!C:D)-MIN(Sheet1!C:D)))-1)<=filter(Sheet1!D2:D,Sheet1!C2:C<>0))*row(OFFSET(A1,,,rows(FILTER(Sheet1!A2:B,Sheet1!A2:A<>"")))))},"select Col1, sum(Col"&JOIN("), sum(Col",ArrayFormula(COLUMN(OFFSET(C1,,,1,MAX(Sheet1!C:D)-MIN(Sheet1!C:D)))))&") group by Col1"),"Select Col"&JOIN(", Col",ArrayFormula(COLUMN(OFFSET(B2,,,1,MAX(Sheet1!C:D)-MIN(Sheet1!C:D)))))&" where Col1>0",0),{ArrayFormula(row(OFFSET(A1,,,rows(FILTER(Sheet1!A2:B,Sheet1!A2:A<>""))))),FILTER(Sheet1!A2:B,Sheet1!A2:A<>"")},3,0)))}}

如果两个日期范围相交,公式将无法正常工作:

102   Mike   6/21/2016  6/27/2016
102   Mike   6/11/2016  6/22/2016

【讨论】:

  • 太棒了。我将有一周的时间了解它是如何工作的。但是,一个问题是,ID 不是唯一的,它们会重新获取不同的日期和名称。它不是行唯一 ID。
  • 一个ID是否只属于一个人?
  • 不,有时会改名。
  • 如果没有明确说明您希望达到的目标,您可能找不到解决方案。解决的简单方法是拆分您的任务: 1. 获取从列表中第一个日期到最后一个日期的所有日期。 2.获取所有ID,如果它们重复,那么您需要重现所有唯一对(名称/ID)的列表。 3.在特定条件下获取日期和ID/名称相交的名称。尝试从日期列表开始。您可以使用以下公式获取它:=ArrayFormula(add(MIN(Sheet1!C:D),COLUMN(OFFSET(A1,,,1,MAX(Sheet1!C:D)-MIN(Sheet1!C:D)))-1))。此公式将重现对(ID + 名称):=sort(UNIQUE((Sheet1!A2:B)))
  • 马克斯,谢谢。根据您的输入,我将播放并找到解决方案。我的错是我把这个案子简单化了。我很惊讶一个单元格中的公式填充了整张纸。相反,我试图手动将所有 ID 放入报告表中,因为它们是有限且唯一的,并且仅根据日期列填充名称、颜色等在其行上。我也知道日期范围 - 最小值、最大值、所以我也会把它们固定在上面。因此,我愿意将公式放在日期下方和 ID 右侧的所有单元格中,如果应该填充它们,它们将在条目表中查找。
猜你喜欢
  • 2014-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
相关资源
最近更新 更多