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

问题描述 投票:0回答:7

我想对从

A:G
开始的多个列应用过滤器函数,并且输出中仅包含
B
,
D
列。我该怎么办?

例如

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

excel excel-formula
7个回答
28
投票

TL;博士

  1. 选项1

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

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

    =FILTER(CHOOSE({1,2},B1:B7,D1:D7),$K$1:$K$7=$K$1)
    
  4. 选项4:-由P.b评论

    =FILTER(FILTER($A$1:$G$7,$K$1:$K$7=$K$1),(COLUMN(A:G)=COLUMN(B:B))+(COLUMN(A:G)=COLUMN(D:D)))
    

说明

选项1

您可以将原始

FILTER
函数嵌套在
another FILTER
函数中,并指定
1
的数组,并且
0
提及您需要哪一列和不需要哪一列。

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

=FILTER(FILTER(A1:G7,K1:K7=K1),{0,1,0,1,0,0,0})

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

1


类似地,如果您想过滤来自

C:K
的列并且仅输出列
C
D
G
,那么您的公式将是:

=FILTER(FILTER(C1:K7,M1:M7=M1),{1,1,0,0,1,0,0,0,0})

优点和缺点 - 选项1

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

选项2

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

=FILTER(INDEX(tblData,SEQUENCE(ROWS(tblData)),{4,3,5}),tblData[Customer Name]=I3)

优点和缺点 - 选项2

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

选项3

这其实是Rory提供的答案

=FILTER(CHOOSE({1,2},B1:B7,D1:D7),$K$1:$K$7=$K$1)

优点和缺点 - 选项3

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

选项4

基于下面 P.b 的评论

=FILTER(FILTER($A$1:$G$7,$K$1:$K$7=$K$1),(COLUMN(A:G)=COLUMN(B:B))+(COLUMN(A:G)=COLUMN(D:D)))

优点和缺点 - 选项 4

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

参考 Google Sheet 中提出了类似的问题。但 Google Sheet 也有

Query
功能,明确支持选择特定列


16
投票

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

=CHOOSECOLS(filtered_array, {2,4})

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


9
投票

您也可以像这样使用

CHOOSE

=FILTER(CHOOSE({1,2},B1:B7,D1:D7),$K$1:$K$7=$K$1)

这还允许您通过更改

CHOOSE
函数中的顺序来对输出中的列重新排序。


2
投票

迄今为止最简单的方法。

应用范围,您按照首选顺序选择的列,并可以选择使用

-

从右侧开始工作
=CHOOSECOLS(FilteredRange,2,4)

=CHOOSECOLS(FILTER($A$1:$G$7,$K$1:$K$7=$K$1),2,4)

=CHOOSECOLS(FILTER($A$1:$G$7,$K$1:$K$7=$K$1),4,2) 'Custom order

=CHOOSECOLS(FILTER($A$1:$G$7,$K$1:$K$7=$K$1),-6,-4)  'From the right side

1
投票

这些天我专门使用选项#2,但使用一系列单元格而不是数组。

=FILTER(INDEX(tblZero,SEQUENCE(ROWS(tblZero)),A2:M2),tblZero[TakenBy]=A1)

使用表格的 [#Headers] 也可以为我提供列标题。

=FILTER(INDEX(tblZero[#Headers],SEQUENCE(ROWS(tblZero[#Headers])),A2:M2),'Zero Dollar Review Data'!A1<>"")

我使用列标题正上方的行来保存列号。这样,我只需输入列号即可获得列标题和数据。我还可以在列号单元格中使用一些简单的公式来创建根据所用条件自定义的输出。因此,如果我输入“TBT”作为 TakenBy 值,我可以显示该特定代表特有的一组列,然后如果我输入“DXD”,我可以显示一组不同的列。


0
投票

是的,您可以为 B

=FILTER($B$1:$B$7,$K$1:$K$7=$K$1)
和 D
=FILTER($D$1:$D$7,$K$1:$K$7=$K$1)

创建 2 个单独的列

0
投票

除了其他答案之外,还需要记住一些事情:如果您将新列添加到目标矩阵以进行过滤,从而更改输出过滤列的位置,则您的公式可能不会更新。例如,如果您使用数字列引用(如

=CHOOSECOLS(filtered_array, {2,4})
中所示),就会发生这种情况。

防止这种情况的一种方法是给目标数据集动态表格式并使用动态表(命名)列引用和COLUMN公式,因为COLUMN将查找列的标题并始终返回相同的数字列引用如果添加新列:

=CHOOSECOLS(FILTER(A:W,F:F="YourTargetFilterValue"),
   COLUMN([Name]),
   COLUMN([Surname]))
© www.soinside.com 2019 - 2024. All rights reserved.