我有包含 3 列字段的数据start date
,finish date
和progress
。
用户报告示例:
开始日期 | 结束日期 | 进步 |
---|---|---|
2022 年 1 月 12 日 | 2022 年 1 月 13 日 | 20 |
用户将这三列一遍又一遍地添加到此文件中。
因此 1 行包含第 n 列。
例如“附加报告”
前 3 列是用户 1,后 3 列是用户 2
开始日期 | 结束日期 | 进步 | 开始日期 | 结束日期 | 进步 |
---|---|---|---|---|---|
2022 年 1 月 12 日 | 2022 年 1 月 13 日 | 20 | 2022 年 1 月 11 日 | 2022 年 1 月 12 日 | 20 |
在所有这些“报告”栏之前,有 2 个摘要栏
最后报告的开始日期 | 最后报告的结束日期 | ETC.... |
---|---|---|
2022 年 1 月 11 日 | 2022 年 1 月 12 日 | ETC... |
我需要与last reported start date
在下输入的最右边的日期相匹配start date
。
我需要与last reported end date
在下输入的最右边的日期相匹配end date
。
请注意,可能缺少开始日期和/或结束日期 在这种情况下,它会检查左边的下一列...因此,从右边开始在此行内查找日期,不管它是最大日期还是最小日期。
这种做法确实有效
IFNA(LOOKUP(2,1/($P15:$AAZ15>D15),$P15:$AAZ15),[@[Planned Start Date]])
但它还不够智能,只能使用start date
inLast Reported start date
和end date
forlast reported end date
使用上面的例子我最终得到的结果
最后报告的开始日期 | 最后报告的结束日期 | ETC.... |
---|---|---|
2022 年 1 月 12 日 | 2022 年 1 月 12 日 | ETC... |
完整报告如下
最后报告的开始日期 | 最后报告的结束日期 | 开始日期 | 结束日期 | 进步 | 开始日期 | 结束日期 | 进步 | 开始日期 | 结束日期 | 进步 | ETC... |
---|---|---|---|---|---|---|---|---|---|---|---|
2022 年 1 月 12 日 | 2022 年 1 月 9 日 | 2022 年 1 月 12 日 | - | 20 | - | 2022 年 1 月 21 日 | 5 | - | 2022 年 1 月 9 日 | 50 | ETC |
请注意,这里我想要的两天是指定的唯一开始日期(在本例中为 2022 年 1 月 12 日),然后(因为有多个结束日期)是最右边的结束日期(即 2022 年 1 月 9 日)
答案1
如果我理解正确的话,您每天要输入 9 列数据。每条记录包含 3 组数据,每组数据包括Start Date
、End Date
和Progress
。并非所有这些字段都会被填写。这意味着您可能会有这样的一行:
您希望提取最右侧的Start Date
和值,即使它们不是该行中输入的最大值。您可以像这样提取:End Date
Start Date
=INDEX(2:2,MAX(IF(($1:$1="Start Date")*(2:2>0),COLUMN(2:2))))
INDEX(2:2,
因为我们要从第 2 行提取一些值。您不必引用整行(这里或其他地方),但它会使您的公式在数据不断增长时继续起作用。($1:$1="Start Date")*(2:2>0)
是数组以外的一种使用方法AND
。当您强制 TRUE/FALSE 值进行数学运算时,它们会变成 1/0 值。但是,如果它正在寻找 TRUE/FALSE 值并且您给它 1/0 值,它仍然会很高兴。这将是一个 TRUE/FALSE 数组,只有当第一行中的文本为“开始日期”并且此行中的值不为 0 时,它才是 TRU。除非您认为有人会输入 1/0/1900 作为日期,否则这样做没问题。您也可以检查不等于空白,但这种方法有效。IF((~)*(~),COLUMN(2:2))
将返回列号(当这两个条件为真时)或 FALSE(视为 0)。MAX(IF((~)*(~),COLUMN(2:2)))
然后,将找到上述两个条件都为真的最高列号。INDEX(2:2,MAX())
将从第 2 行(即这两个条件都为真的最后一列)中提取值。
对于End Date
,你可以做一些非常类似的事情:
=INDEX(2:2,MAX(IF(($1:$1="End Date")*(2:2>0),COLUMN(2:2))))
...或者,如果您认为某人可能会输入开始日期而不输入结束日期,并且您想要获取最后一个开始日期右侧的任何值:
=INDEX(2:2,MAX(IF(($1:$1="Start Date")*(2:2>0),COLUMN(2:2)))+1)
注意:2:2
是相对的,但$1:$1
也是绝对的。这允许您将公式放在第 2 行,然后将其向下复制以更新行引用,但不更新标题行引用。