【问题标题】:Negative References or reversing order of column for DATEDIFDATEDIF 的负引用或反转列的顺序
【发布时间】: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


【解决方案1】:

简答

将以下公式添加到 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 列作为引用,因为该列是保存日期值的列。

【讨论】:

  • 谢谢,我的问题是如果 enddate 为 B3+:B(或更多),解决方案不会偏移数组正确的行数。我在原文中添加了一列以显示所需的行为。例如:=ArrayFormula({"N/A";ARRAY_CONSTRAIN(DATEDIF(B:B,B3:B,"D"),COUNT(B:B)-2,1)}),数组约束应该从第 3 行开始。在尝试使用 if(row(A:A >=3, then execute datedif 偏移 datedif 数组之前,我尝试过 array_constrain,但无法使语法正常工作。
  • 关于 IF 语法,见IF
猜你喜欢
  • 1970-01-01
  • 2020-09-07
  • 2015-03-05
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多