Google sheets 将两列筛选为一列根据某些条件选择其中一列或另一列

Google sheets 将两列筛选为一列根据某些条件选择其中一列或另一列,google-sheets,Google Sheets,我试图在Google Sheets中创建一个过滤器,它将根据行中另一列的值从两列中的一列中选择值。我发现了几个问题,似乎问了一个类似的问题,但我不明白如何扩展这个想法来做到这一点 下面的测试表显示了我试图完成的目标: 左半部分显示输入数据,右半部分(从G列开始)显示我试图完成的任务 我在H1上过滤。我想要在B列或C列中包含H1值的每一行。如果它出现在B列中,那么我还想要相应的D单元格的值,而如果它出现在C列中,我想要相应的E单元格的值。我们可以假设它永远不会出现在B列和C列中 我能够用G3中的

我试图在Google Sheets中创建一个过滤器,它将根据行中另一列的值从两列中的一列中选择值。我发现了几个问题,似乎问了一个类似的问题,但我不明白如何扩展这个想法来做到这一点

下面的测试表显示了我试图完成的目标:

左半部分显示输入数据,右半部分(从G列开始)显示我试图完成的任务

我在H1上过滤。我想要在B列或C列中包含H1值的每一行。如果它出现在B列中,那么我还想要相应的D单元格的值,而如果它出现在C列中,我想要相应的E单元格的值。我们可以假设它永远不会出现在B列和C列中

我能够用G3中的公式创建G3:I范围:

=FILTER(A2:C,(B2:B = H1)+(C2:C = H1))
但我正在努力把公式放进J3

我尝试了以下公式,但它只显示了
#值

=FILTER({D2:D,E2:E},{(B2:B = H1),(C2:C = H1)})
我的想法是,
D2:D,E2:E
将两列并排堆叠,如果B单元格匹配H1,我将使用第一列,如果C单元格匹配H1,则使用第二列

我试过这个公式:

=FILTER({D2:D,E2:E},{(B2:B = H1)+(C2:C = H1)})
但它同时显示两列,我只需要一列或另一列,这取决于H1中的值在行中显示的列

我还尝试了查询,但它们似乎都有语法错误:

=QUERY({D2:D,E2:E},"SELECT (D*(B=H1))",0)
=QUERY({D2:D,E2:E},"SELECT (D*IF(B=H1,1,0))",0)
在本例中,我首先尝试通过将每列(D和E)乘以1或0来建立值,这取决于我想看的是哪列,然后将它们相加。因为我只有数字,所以这种方法似乎可行

我突然想到,我可能会使用where子句只获取与其中一个匹配的行:

=QUERY({B2:E},"SELECT Col3 WHERE Col1='"&H1&"'",0)
但这只会得到B与H1匹配的行,我不知道如何将它与C与H1匹配的行组合起来,并且仍然保持正确的顺序

如果我匹配B列或C列匹配,我仍然不知道如何在一种情况下选择Col3,在另一种情况下选择Col4。这只得到Col3,这对于#=4是不正确的:

此外,查询可能需要所有数据驻留在当前工作表中。在我的最终版本中,我需要获取另一张工作表的数据,因此尝试使用查询似乎已经失败

更新: 我可以创建三个单独的公式:

J3: =FILTER({D2:D,E2:E},{(B2:B = H1)+(C2:C = H1)})
L3: =FILTER(IF(B2:B=H1,1,0),{(B2:B = H1)+(C2:C = H1)})
M3: =FILTER(IF(C2:C=H1,1,0),{(B2:B = H1)+(C2:C = H1)})
该工作表如下所示:

有没有什么方法可以在J3中将它们组合成一个公式,如下所示:

J3*L3 + K3*M3

这似乎起到了这个作用:

=FILTER(IF(B2:B=H1,D2:D,E2:E),{(B2:B = H1)+(C2:C = H1)})
过滤器的第二个参数确保所选行是C或D列与所选值匹配的行


然后,第一个参数选择返回的参数。

这似乎完成了以下操作:

=FILTER(IF(B2:B=H1,D2:D,E2:E),{(B2:B = H1)+(C2:C = H1)})
过滤器的第二个参数确保所选行是C或D列与所选值匹配的行


然后,第一个参数选择返回的参数。

因此,如果水果是H列,则要查找D列的编号;如果水果是I列,则查找E列的编号

我从一个简单的if开始,但是由于H3:H=H1只返回false一次,所以我不得不添加一个数组公式

=ARRAYFORMULA(IF(H3:H=H1;/* get the D value */;/* get the E value */))
现在我用你们的公式得到了D和E的值

FILTER(D2:D;{(B2:B = H1)+(C2:C = H1)})
FILTER(E2:E;{(B2:B = H1)+(C2:C = H1)})
当我将所有空行放在一起时,所有空行都出现了一个错误,因此我添加了一个
IFERROR

=IFERROR(ARRAYFORMULA(IF(H3:H=H1;FILTER(D2:D;{(B2:B = H1)+(C2:C = H1)});FILTER(E2:E;{(B2:B = H1)+(C2:C = H1)})));"")

所以,你想要的是找到D列的数字,如果水果在H列,或者E列,如果水果在I列

我从一个简单的if开始,但是由于H3:H=H1只返回false一次,所以我不得不添加一个数组公式

=ARRAYFORMULA(IF(H3:H=H1;/* get the D value */;/* get the E value */))
现在我用你们的公式得到了D和E的值

FILTER(D2:D;{(B2:B = H1)+(C2:C = H1)})
FILTER(E2:E;{(B2:B = H1)+(C2:C = H1)})
当我将所有空行放在一起时,所有空行都出现了一个错误,因此我添加了一个
IFERROR

=IFERROR(ARRAYFORMULA(IF(H3:H=H1;FILTER(D2:D;{(B2:B = H1)+(C2:C = H1)});FILTER(E2:E;{(B2:B = H1)+(C2:C = H1)})));"")

为什么不使用简单的if?为什么不使用简单的if?谢谢!我根据你的建议找到了一个简化的调用,它只使用一个
过滤器
和一个
IF
调用。由于某些原因,我无法在过滤器中使用IF,很高兴你能解决它!谢谢我根据你的建议找到了一个简化的调用,它只使用一个
过滤器
和一个
IF
调用。由于某些原因,我无法在过滤器中使用IF,很高兴你能解决它!