Regex 搜索值并返回值出现的所有列
我在谷歌表单中有以下一组姓名列表:Regex 搜索值并返回值出现的所有列,regex,google-sheets,google-sheets-formula,array-formulas,Regex,Google Sheets,Google Sheets Formula,Array Formulas,我在谷歌表单中有以下一组姓名列表: ╔═══╦════════════╦══════════╦══════════╗ ║ ║ A ║ B ║ C ║ ╠═══╬════════════╬══════════╬══════════╣ ║ 1 ║ Barry ║ Rich ║ David ║ ╠═══╬════════════╬══════════╬══════════╣ ║ 2 ║ Rich ║ Jeff
╔═══╦════════════╦══════════╦══════════╗
║ ║ 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 ║
╚═══╩════════════╩══════════╩══════════╝
我试图找出一个公式来使用它搜索一个名字,并返回该名字出现在每一列中的所有名字。例如,如果我搜索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)))
下一级:
=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)))
如果Joel在B列中,您希望返回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))
更新:
要将所有结果放在一列中,有几个选项。您没有说您是否需要唯一的值,或者名称是否需要排序,所以我将忽略这些方面,只是垂直堆叠结果
一个简单的方法是使用一个未记录的函数,flatte
,它可能在某个点从工作表中删除,也可能不删除
添加到我的原始公式中,得出:
=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),
"")}
您要求的公式 …搜索名称并返回该名称出现在其中的每列中的所有名称 请使用以下公式
=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 ")
这些只为我返回一个名字。我需要获取“Joel”出现的整个列。@Dave你能共享一份你的工作表吗?它是专有的,所以我不能共享,但它与我上面的示例完全相同,但有更多的行和列。不清楚你的输入是什么。。。你的乔尔在一个牢房里还是在另一个范围内?如果它在一个单元格中,您希望输出为多行?示例中的第4行和第5行,“Joel”在B5和C4中。所以我想要一个列B和C中所有姓名的列表。使用相同的样本数据,如果我搜索“Michael”(在A6和C2中),我想要列a和C中的姓名列表。这对我来说很有效,但如果我想要所有数据显示在一列中呢?请将您的评论添加到您的问题中,为了让其他人在将来更清楚,当他们阅读问题时,看看他们是否符合自己的情况。有几种方法可以将结果放入一列。请参阅上面我编辑的答案。根据您的数据,我现在意识到我的公式可能需要一些增强,以计算输入数据的行数,并相应地修改查询。在继续之前,我将等待了解这是否是您的问题。我确实需要唯一性和排序。使用“展平”解决方案,我可以非常轻松地将整个内容包装成唯一的和排序的(我经常使用的公式)。在你看来,这是最好的方法吗?请同时检查答案。请记住,当一个答案回答你的问题时,它甚至是它,这样其他人也可以受益。这很好。它的功能与@kirkg13提供的解决方案相同,但代码较少。有点上述公式的最大好处是,无论名称列表有多长,它都保持不变,而在另一个公式中,您需要更新它并为添加的每一行展开“循环”。如果你有20行或50行,你能想象它的长度吗?我想说,最接近的公式是@basicYeah的公式。随着电子表格的增长,将添加更多的列。我有一个自定义函数,它使用getLastColumn()在这个公式中设置它(我在您的示例引用C列的所有地方都使用了它,并且效果很好)。这样,我就不必随着它的增长而不断调整。