【问题标题】:Array Formula with indirect not working间接不工作的数组公式
【发布时间】:2017-11-26 18:06:20
【问题描述】:

只是想不通。

测试数据:B2,3,4 = "a","b","b"; D2,3,4 = "c","d","d"

结果应该是“”、“CHOICE”、“DUP”

首先我在单元格 E1 中尝试了这个:

=ArrayFormula(if(row(A:A)=1,"Header",if((B2:B & D2:D)=(indirect("B"&row(B2:B)-1)&indirect( "D"&row(D2:D)-1)),"DUP",if((B2:B & D2:D)=(间接("B"&row(B2:B)+1)&indirect("D" &row(D2:D)+1)),"CHOICE",""))))

这带来了 B0 是无效单元格引用的错误。

接下来我在单元格 E2 中尝试了以下公式:

=ArrayFormula(if((B2:B & D2:D)=(间接("B"&row(B2:B)-1)&indirect("D"&row(D2:D)-1)))," DUP",if((B2:B & D2:D)=(间接("B"&row(B2:B)+1)&indirect("D"&row(D2:D)+1)),"CHOICE", "")))

这会产生我无法理解的结果“CHOICE”、“”、“”。

有什么想法吗?

【问题讨论】:

  • Concat(b3,d3)=concat(b4,d4),所以对于 e3,concat(b3,d3)=concat(b3+1,d3+1)= 选择。而对于 e4,concat(b4,d4)=concat(b4-1,d4-1)=dup
  • 去掉数组部分,公式有效
  • 其实应该是blank,choice,dup,因为concat(b2,d2)不匹配上面的行或者下面的行。

标签: arrays google-sheets array-formulas


【解决方案1】:

原因是间接不能用作数组公式。试试这个

=concatenate(B2:B4)

现在试试这个

=ArrayFormula(concatenate(indirect("B"&row(B2:B4))))

你得到了什么?

所以在你的公式中

row(B2:B)-1

只给你第 1 行

row(B2:B)+1

只给你第 3 行。

您可以使用这种方法而不是间接方法

=ArrayFormula(if((B2:B & D2:D)=B1:index(B:B,rows(B:B)-1)&D1:index(D:D,rows(D:D)-1),"DUP",if((B2:B & D2:D)=B3:index(B:B,rows(B:B)-1)&D3:index(D:D,rows(D:D)-1),"CHOICE","")))

它可以工作,但需要更多改进 - 如果工作表有(比如说)1000 行,由于偏移,您应该只将数组扩展为 998 行。

这样更好

=ArrayFormula(if((B2:index(B:B,rows(B:B)-1) & D2:index(D:D,rows(D:D)-1))=B1:index(B:B,rows(B:B)-2)&D1:index(D:D,rows(D:D)-2),"DUP",if((B2:index(B:B,rows(B:B)-1) & D2:index(D:D,rows(D:D)-1))=B3:index(B:B,rows(B:B))&D3:index(D:D,rows(D:D)),"CHOICE","")))

或者你可以使用偏移量代替索引

...offset(B2,0,0,rows(B:B)-2,1) ....

或者用

替换你的间接
...indirect("B2:B"&rows(B:B)-1)...

【讨论】:

  • 谢谢。我尝试按照您的建议更新我的公式,但无法正常工作。我决定将公式放入脚本中,并且效果很好。
猜你喜欢
  • 2020-08-27
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多