Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 搜索值并返回值出现的所有列_Regex_Google Sheets_Google Sheets Formula_Array Formulas - Fatal编程技术网

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列的所有地方都使用了它,并且效果很好)。这样,我就不必随着它的增长而不断调整。