【发布时间】:2017-12-03 20:49:55
【问题描述】:
我在 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 行(结束日期)之间的 datedif:
=ArrayFormula(DATEDIF(B:B-(X Rows),B:B,"D"))
目标是找出 D:D 在 X 天内的变化范围:
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 是无效的负引用,因此数组出现错误引用。具有错误值而不是错误引用的数组公式似乎只是跳过过去的错误并在输入有效后开始工作。但我不知道如何跳过错误的引用。我尝试使用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 触发公式:
=arrayformula(if(row(A:A)>=2,array_constrain(D:D,COUNT(A:A)-2,1)))
它标记everythign >=2 row false 并且仍然渲染 D:D 而不会将单元格替换为正确的行数:
C D
1 false
1 2
1 2
1 2
1
编辑:我正在关闭请求,最后只使用了 vlookup(B:B-X) ,它提供了一个足够近似的结果来满足我的需要。
【问题讨论】:
-
@Rubén,哎呀,datedif 的错字。
标签: google-sheets