搜索值和 Return 值出现的所有列

Search for Value and Return All Columns In Which Value Appears

我在 Google Sheet 中有以下一组姓名列表:

╔═══╦════════════╦══════════╦══════════╗
║   ║     A      ║     B    ║     C    ║
╠═══╬════════════╬══════════╬══════════╣
║ 1 ║ Barry      ║ Rich     ║ David    ║
╠═══╬════════════╬══════════╬══════════╣
║ 2 ║ Rich       ║ Jeff     ║ Michael  ║
╠═══╬════════════╬══════════╬══════════╣
║ 3 ║ Bruce      ║ Bruce    ║ Jeff     ║
╠═══╬════════════╬══════════╬══════════╣
║ 4 ║ Rober      ║ Barry    ║ Joel     ║
╠═══╬════════════╬══════════╬══════════╣
║ 5 ║ David      ║ Joel     ║ Howard   ║
╠═══╬════════════╬══════════╬══════════╣
║ 6 ║ Michael    ║ Howard   ║ Rich     ║
╚═══╩════════════╩══════════╩══════════╝

我正在尝试找出一个公式来搜索姓名和 returns 出现在每一列中的所有姓名,该姓名出现在其中。例如,如果我搜索 Joel,我想要获取 B 列和 C 列的全部内容。

这样试试:

=VLOOKUP("Joel", A:C, {2, 3}, 0)

下一级:

=IFNA(VLOOKUP(A1, Sheet1:A:C, {2, 3}, 0))

下一级:

=ARRAYFORMULA(IFNA(VLOOKUP(A1:A, Sheet1:A:C, {2, 3}, 0)))

如果更多列:

=ARRAYFORMULA(IFNA(VLOOKUP(A1:A, Sheet1:A:C, COLUMN(B:K), 0)))

如果乔尔在 B 列,而你想 return A 和 C 列:

=ARRAYFORMULA(IFNA(VLOOKUP(A1:A, {Sheet1!B:B, Sheet1!A:C}, {2, 4}, 0)))

或者也许:

=ARRAYFORMULA(FLATTEN(SPLIT(TRIM(REGEXREPLACE(FILTER(A:A&" "&B:B&" "&C:C, 
 REGEXMATCH(A:A&" "&B:B&" "&C:C, D10)), D10, )), " ")))

您可以尝试以下公式:

=IFERROR(INDEX($A:$C,0,SMALL(FILTER(FLATTEN(COLUMN($A:$C)*("Jeff"=$A:$C)),FLATTEN(COLUMN($A:$C)*("Jeff"=$A:$C))>0),COLUMN(A1))),"")

此公式自动填充行,但不会自动填充列,因此请将其复制到右侧。

您是否正在寻找这样的输出:

让我们知道这是否有帮助。

主要公式有点蛮力,但非常简单。 但它可能会出现问题,具体取决于您的数据中可能有多少行或列。

=TRANSPOSE(QUERY({TRANSPOSE(A1:C6)},"
             where Col1 = '" & F1 & "' 
                or Col2 = '" & F1 & "' 
                or Col3 = '" & F1 & "' 
                or Col4 = '" & F1 & "' 
                or Col5 = '" & F1 & "' 
                or Col6 = '" & F1 & "' ",0))

更新:

要将所有结果放在一个列中,有多种选择。你没有说你是否想要唯一值,或者名称排序,所以我会忽略这些方面,只是垂直堆叠结果。

一种简单的方法是使用未记录的函数,FLATTEN,它可能会或可能不会在某些时候从表格中删除。

添加到我的原始公式中,得到:

=FLATTEN(TRANSPOSE(QUERY({TRANSPOSE(A1:C6)},"
             where Col1 = '" & F1 & "' 
                or Col2 = '" & F1 & "' 
                or Col3 = '" & F1 & "' 
                or Col4 = '" & F1 & "' 
                or Col5 = '" & F1 & "' 
                or Col6 = '" & F1 & "' ",0)))

但您可能希望将一列堆叠在另一列之上,而不是将它们合并。在那种情况下,您可以尝试这个丑陋的公式,它需要多次重复查询,以检查输出中有多少列。如果您必须这样做,我建议将查询结果保存在辅助范围内,或者提交一个新的更具体的问题:

={query({TRANSPOSE(QUERY({TRANSPOSE(A1:C6)},"
             where Col1 = '" & F1 & "' 
                or Col2 = '" & F1 & "' 
                or Col3 = '" & F1 & "' 
                or Col4 = '" & F1 & "' 
                or Col5 = '" & F1 & "' 
                or Col6 = '" & F1 & "' ",0))},"select Col1 ",0); 
 if(columns(TRANSPOSE(QUERY({TRANSPOSE(A1:C6)},"
             where Col1 = '" & F1 & "' 
                or Col2 = '" & F1 & "' 
                or Col3 = '" & F1 & "' 
                or Col4 = '" & F1 & "' 
                or Col5 = '" & F1 & "' 
                or Col6 = '" & F1 & "' ",0)))>1,
     query({TRANSPOSE(QUERY({TRANSPOSE(A1:C6)},"
             where Col1 = '" & F1 & "' 
                or Col2 = '" & F1 & "' 
                or Col3 = '" & F1 & "' 
                or Col4 = '" & F1 & "' 
                or Col5 = '" & F1 & "' 
                or Col6 = '" & F1 & "' ",0))},"select Col2 ",0),
     "");
  if(columns(TRANSPOSE(QUERY({TRANSPOSE(A1:C6)},"
             where Col1 = '" & F1 & "' 
                or Col2 = '" & F1 & "' 
                or Col3 = '" & F1 & "' 
                or Col4 = '" & F1 & "' 
                or Col5 = '" & F1 & "' 
                or Col6 = '" & F1 & "' ",0)))>2,
     query({TRANSPOSE(QUERY({TRANSPOSE(A1:C6)},"
             where Col1 = '" & F1 & "' 
                or Col2 = '" & F1 & "' 
                or Col3 = '" & F1 & "' 
                or Col4 = '" & F1 & "' 
                or Col5 = '" & F1 & "' 
                or Col6 = '" & F1 & "' ",0))},"select Col3 ",0),
     "")}

您要求的公式

...searches for a name and returns all the names that appear in each column the name appears in

请使用以下公式

=query(ArrayFormula(regexextract( 
                query(flatten(TRANSPOSE(ArrayFormula(column(A2:C)&"-"&A2:C))), 
                   "where Col1 matches '"&textjoin("|",1,(ArrayFormula(if(A2:C=A1,column(A2:C)&"-.*",""))))&"' ") 
                                ,"-(.*)")),  
    "where Col1 is not null ")