Excel 过滤功能 - 选择某些列作为输出

Gan*_*ula 16 excel excel-formula

我想在输出中对多个列应用 Filter 函数,范围为A:G且仅包含 columns BD我该怎么做?

例如,=FILTER($A$1:$G$7,$K$1:$K$7=$K$1)结果会产生与条件匹配的行溢出数组,但输出仍将有 7 列 ( A:G)。我可以选择只输出 Column B&D吗?

Gan*_*ula 26

长话短说

  1. 选项1

    =FILTER(FILTER(A1:G7,K1:K7=K1),{0,1,0,1,0,0,0})
    
    Run Code Online (Sandbox Code Playgroud)
  2. 选项2:-参考

    =FILTER(INDEX(tblData,SEQUENCE(ROWS(tblData)),{4,3,5}),tblData[Customer Name]=I3)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 选项3: -罗里回答

    =FILTER(CHOOSE({1,2},B1:B7,D1:D7),$K$1:$K$7=$K$1)
    
    Run Code Online (Sandbox Code Playgroud)
  4. 选项4:- 由 Pb 评论

    =FILTER(FILTER($A$1:$G$7,$K$1:$K$7=$K$1),(COLUMN(A:G)=COLUMN(B:B))+(COLUMN(A:G)=COLUMN(D:D)))
    
    Run Code Online (Sandbox Code Playgroud)

解释

选项1

您可以将原始FILTER函数嵌套在another FILTER函数内,并指定一个1由 和0组成的数组,指出您需要哪一列,不需要哪一列。

例如,在上面的问题中,如果我只想要 B 列和 D 列,我可以这样做:

=FILTER(FILTER(A1:G7,K1:K7=K1),{0,1,0,1,0,0,0})
Run Code Online (Sandbox Code Playgroud)

由于 B 和 D 是第 2 列和第 4 列,因此您需要1在数组中的该位置指定 a


同样,如果您想过滤来自C:K且仅输出列C, D& 的列G,那么您的公式将是:

=FILTER(FILTER(C1:K7,M1:M7=M1),{1,1,0,0,1,0,0,0,0})
Run Code Online (Sandbox Code Playgroud)

优点和缺点 - 选项 1

  • 这个公式是最简单的,也容易理解
  • 您无法更改输出的顺序。您只能按原始顺序隐藏/取消隐藏
  • 您可以将其应用于多个列的范围,而无需进行太多更改

选项2

另一种看起来很复杂的方法是:
请注意,此方法允许您更改输出列的顺序。您可以参考以下站点以获取有关其工作原理的详细说明。

=FILTER(INDEX(tblData,SEQUENCE(ROWS(tblData)),{4,3,5}),tblData[Customer Name]=I3)
Run Code Online (Sandbox Code Playgroud)

优点和缺点 - 选项 2

  • 这个公式看起来很复杂,但是一旦理解了逻辑就很简单了
  • 您可以根据需要更改输出列的顺序
  • 您可以将其应用于多个列的范围,而无需进行太多更改

选项3

这实际上是Rory提供的答案

=FILTER(CHOOSE({1,2},B1:B7,D1:D7),$K$1:$K$7=$K$1)
Run Code Online (Sandbox Code Playgroud)

优点和缺点 - 选项 3

  • 这个公式很复杂,尤其是返回一系列连续列时
  • 您需要单独明确提及每个输出列
  • 您可以根据需要更改输出列的顺序
  • 将其应用于输出多个连续范围会变得很棘手(例如,您不能在上面的公式中替换B1:B7为)B1:C7

选项4

基于下面 Pb 的评论

=FILTER(FILTER($A$1:$G$7,$K$1:$K$7=$K$1),(COLUMN(A:G)=COLUMN(B:B))+(COLUMN(A:G)=COLUMN(D:D)))
Run Code Online (Sandbox Code Playgroud)

优点和缺点 - 选项 4

  • 这个公式很简单,与选项 1 有点相似。
  • 您无法更改输出的顺序。您只能按原始顺序隐藏/取消隐藏
  • 您可以将其应用于多个列的范围,而无需进行太多更改

关于 Google Sheet也提出了类似的问题。但Google Sheet也有Query明确支持选择特定列的功能

  • 您可以按照 K:K 的条件在 A:G 上创建过滤器,就像您所做的那样,然后过滤过滤范围内等于给定列的列的结果。 (2认同)

Gre*_*edo 13

尝试新的 CHOOSECOLS 功能(撰写本文时为beta 通道):

=CHOOSECOLS(filtered_array, {2,4})
Run Code Online (Sandbox Code Playgroud)

2024 年更新:现已广泛使用,请参阅文档


Ror*_*ory 8

你也可以CHOOSE这样使用:

=FILTER(CHOOSE({1,2},B1:B7,D1:D7),$K$1:$K$7=$K$1)
Run Code Online (Sandbox Code Playgroud)

这还允许您通过更改函数中列的顺序来对输出中的列重新排序CHOOSE