DATEDIF的负参考或列的反转顺序

时间:2017-12-03 20:49:56

标签: google-sheets

我在A列中有一个不规则日期的升序排序列表:A:

A           B   C   D (A:A,A2:A)   E (A:A,A3:A)
2017-11-09  10  10  NA             NA 
2017-11-10  11  21  1              NA
2017-11-14  15  36  4              5
2017-11-15  22  58  1              5

C列:C是B:B的滚动总和。我试图在D:D / E:E中找到arrayformula来查找当前行(开始日期)和上面X行(结束日期)之间的日期:

=ArrayFormula(DATEDIF(B:B-(X Rows),B:B,"D"))

目标是在X天内找到D:D的变化范围:

D:D - D:D-rowX / datedif (A:A-rowX, A:A)

即第C4行2天:

(C4-C2) / datedif(C4-2,C4,"D")
(58-21) / datedif(C2,C4,"D")
37 / 5 = 7.4

行C10上的5天:

(C10-C5) / datedif(C10-5,C10,"D")

行C20上的15天:

(C20-C5) / datedif(C20-15,C20,"D")

我试图计算出1,2,3,4,7,28行的X值,这意味着阵列必须启动1,2,3,4,7,28行。

现在,数组错误引用了错误的引用,因为第一个开始日期是DATEDIF(B-X,B1," D"),其中B-X是无效的负引用。具有错误值而不是错误引用的Arrayformulas似乎只是跳过过去的错误并在输入有效后开始工作。但我无法弄清楚如何跳过错误的引用。我尝试使用INDIRECT强制开始日期,但无法将其识别为日期。我也尝试了DATEDIF(B:B, B:B+X,"D"),它会吐出正确的数字,但结果会被X行所抵消。我尝试过反向排序A:A,=ArrayFormula(if(len(A:A),DATEDIF(SORT(A2:A,1,0),SORT(A:A,1,0),"D"),""))它生成一个正确答案的反向订单列表,我无法弄清楚如何翻转。

好像我错过了一些明显的东西?

编辑:试图澄清原帖

是否有一种简单的方法可以取代整个列? 替代解决方案?

公式大致有效但未与正确的行对齐:

C D E
1 2 3
1 2 3
1 2 3
1 2
1

我只需要它来显示

C D E
1
1 2
1 2 3 
1 2 3
1 2 3

为了使事情保持一致,我可以在F列的第2行放置单元格:

=array_constrain(ARRAYFORMULA(D:D),COUNT(A:A)-2,1)

或G列第3行中的单元格:

=array_constrain(ARRAYFORMULA(E:E),COUNT(A:A)-3,1)

但是如果我尝试从row1通过:

触发teh公式
=arrayformula(if(row(A:A)>=2,array_constrain(D:D,COUNT(A:A)-2,1)))

它标记everythign> = 2行false并且仍然呈现D:D而不将单元格移动适当的行数:

C D 
1 false
1 2 
1 2 
1 2
1

编辑:我关闭了请求,结果只是使用了vlookup(B:B-X),它提供了足够的结果来满足我的需求。

1 个答案:

答案 0 :(得分:0)

简短回答

将以下公式添加到D1

=ArrayFormula({"N/A";ARRAY_CONSTRAIN(DATEDIF(A:A,A2:A,"D"),COUNT(A:A)-1,1)})

以下公式为E1

=ArrayFormula({"N/A";"N/A";ARRAY_CONSTRAIN(DATEDIF(A:A,A3:A,"D"),COUNT(A:A)-2,1)})

解释

解决方案使用ARRAY_CONSTRAIN仅返回所需的结果值,并使用数组表示法为行添加所需的N / A值,因为它没有一对来计算日期差异。

备注:

请注意,DATEDIF函数使用列A作为引用,因为此列是保存日期值的列。