我正在尝试在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中加入的公式。
我尝试了下面的公式,但它只显示#VALUE!
=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是不正确的:
=QUERY({B2:E},"SELECT Col3 WHERE Col1='"&H1&"' OR Col2='"&H1&"'",0)
此外,查询看起来可能需要所有数据都驻留在当前工作表中。在我的最终版本中,我需要获取另一个工作表的数据,所以看起来尝试使用QUERY是不可能的。
更新:我可以创建三个独立的公式:
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
发布于 2018-08-01 19:54:20
这看起来像是在做这个把戏:
=FILTER(IF(B2:B=H1,D2:D,E2:E),{(B2:B = H1)+(C2:C = H1)})
过滤器的第二个参数确保选定的行是C或D列与所选值匹配的行。
然后,第一个参数选择返回的参数。
发布于 2018-08-01 19:55:11
所以,如果水果是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)})));"")
https://stackoverflow.com/questions/51639784
复制