【发布时间】:2018-08-02 03:55:11
【问题描述】:
我正在尝试在 Google 表格中创建一个过滤器,该过滤器将从两列之一中选择值,具体取决于该行中另一列的值。我发现了几个似乎在问类似问题的问题,但我没有关注如何扩展这个想法。
左半部分显示输入数据,右半部分(从 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,但它们似乎都有语法错误:
=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 似乎要求所有数据都驻留在当前工作表中。在我的最终版本中,我需要获取另一张工作表的数据,所以看起来尝试使用 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
【问题讨论】:
-
为什么不使用简单的 if?
标签: google-sheets