搜索值和 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 ")
我在 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 ")