如果列包含匹配值(没有 VBA),则获取列名

Get column names if column contains matching value (without VBA)

给定一个命名范围 Table1,我如何 return 数组 Table1[#Headers] 中的所有名称,其中该列中是否存在匹配的输入值?

a b c
1 2 3
4 5 2
6 1 2

对于上面的示例数据,我想return

search_value headers
1 a,b
2 b,c (or b,c,c)
3 c

使用上述示例数据,我可以使用公式 =SUM(--(Table1=search_value)) 计算命名 search_value 的出现次数。鉴于该公式中现有的 True/False 数组,我一直在尝试获取相对单元格映射信息。悲哀

有问题的工作簿是托管在 OneDrive 中的共享工作簿,因此我想尽可能避免 VBA。

一种方式(使用 Office 365)是:

=FILTER(Table1[#Headers],BYCOL(--ISNUMBER(MATCH(Table1,E2,0)),LAMBDA(x,MAX(x))))

其中 E2 是搜索值。

串联

抱歉 - 我刚刚意识到您想要一个串联的输出:

=TEXTJOIN( ",", 1, FILTER(Table1[#Headers],BYCOL(--ISNUMBER(MATCH(Table1,E2,0)),LAMBDA(x,MAX(x)))) )

另一种基于 Excel 的 Web 方法

这取决于 Excel Web 支持的 SEQUENCE。希望它适用于 Sharepoint。如果没有,那么有一种(麻烦的)方法可以使用 ROW() 梳理序列,但如果你不必去那里会更容易。

=TEXTJOIN(",",1,
     UNIQUE(IFERROR(INDEX(Table1[#Headers],
                    LARGE(IFERROR(MATCH(Table1,E2,0)*COLUMN(Table1[#Headers]),-1),
                          SEQUENCE(,COLUMNS(Table1),COLUMNS(Table1),-1))),
                    ""),
            1) )