【问题标题】:Excel Filtered Values to ArrayExcel过滤值到数组
【发布时间】:2021-08-25 01:37:19
【问题描述】:

给定一个具有以下结构的 Excel 表格:

Col.A  Col.B  Col.C  Col.D  Col.E  Col.F  Col.G
2      3      2      5      2      2      
5      5      2      5      5      5      5

我在 E1 中使用的公式是

=FILTER($A1:$D1,$A1:$D1=2)

在 E2 中

=FILTER($A2:$D2,$A2:$D2=5)

Excel 返回不同单元格 E1、F1 和 E2、F2 和 G2 中的值。

是否可以存储例如E1 中公式的输出作为单元格 E1 本身中的数组,形状为

{2;2}

对于 E2

{5;5;5}

可以用类似的公式进一步分析

=SUMPRODUCT({2;2}=2)

?

理想情况下,不使用数组公式。

我知道我可以直接使用引用单元格

=SUMPRODUCT($A1:$D1=2)

但这不是我想要在这里实现的目标。

提前致谢。

【问题讨论】:

  • 没有一个单元格不能容纳一个数组。它只能保存一个值。该值可以是一个看起来像数组的字符串,但随后需要对其进行解析以创建数组。只需将过滤器包裹在 SUMPRODUCT 中:=SUMPRODUCT(--(FILTER($A1:$D1,$A1:$D1=2)=2))
  • 或者,从技术上讲,您可以这样做:=SUMPRODUCT(--(E2#=2)) 但我认为您不希望发生泄漏。
  • @ScottCraner 谢谢。我尝试使用 ="{"&TEXTJOIN(",",TRUE,FILTER($A1:$D1,$A1:$D1=2))&"}" 构建数组,但后来无法将其用作这样的。 “解析”是什么意思?
  • @ScottCraner 是的,确切地说,我不想泄漏。
  • 然后只需将过滤器公式放在您希望使用数组的公式中。用 TEXTJOIN 把它变成一个字符串,然后用 MID 或 FILTERXML 等其他函数解析每个部分很慢。

标签: arrays excel filter


【解决方案1】:

不,没有办法让 Excel 中的单个单元格保存一个数组。这就是他们发明泄漏的原因。

通过执行以下操作:

 ="{"&TEXTJOIN(",",TRUE,FILTER($A1:$D1,$A1:$D1=2))&"}" 

 =ARRAYTOTEXT(FILTER(A1:D1,A1:D1=2),1)

可能会创建一些看起来像数组的东西,即{2,2},它实际上是在创建一个文本字符串而不是一个实际的数组。此文本字符串无法轻松转换为数组。

这样做需要解析字符串。使用MID,LEFT,RIGHTFILTERXML 拆分, 上的字符串并提取每个部分以将文本字符串转回数组。对于EXAMPLE

这个过程虽然可能需要很长的公式并且使用过于复杂。

而只是将过滤器嵌套在所需的公式中,即:

=SUMPRODUCT(--(FILTER($A1:$D1,$A1:$D1=2)=2))

现在我们无需创建字符串并对其进行解析,这会增加计算周期并使公式过于复杂。

它还具有始终引用原始值的好处。

【讨论】:

    猜你喜欢
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多