这似乎可以满足您的要求。在结果表的 E6 中尝试以下公式。或者查看我添加到您工作表中的标签 Answer-GK。
=iferror(if(or(C5:C13),
QUERY ('Test string DB'!A3:H12, "Select * WHERE " &
IF(B2="","C <>'' "," C = '"&B2&"'") &
IF(C5, " and D matches '" & B5 & "' ",) &
IF(C6, " and D matches '" & B6 & "' ",) &
IF(C7, " and D matches '" & B7 & "' ",) &
IF(C8, " and E matches '" & B8 & "' ",) &
IF(C9, " and E matches '" & B9 & "' ",) &
IF(C10, " and E matches '" & B10 & "' ",) &
IF(C11, " and F=TRUE", ) &
IF(C12, " and G=TRUE", ) &
IF(C13, " and H=TRUE", )),
QUERY ('Test string DB'!A3:H12,"select * " & if(B2=""," "," where C = '"&B2&"'") ,0)),
"No results - Reduce your selected criteria")
有什么要注意的。由于您的某些数据元素具有专用列,而其他数据元素是共享列,因此它限制了您可以过滤的内容。例如,您找不到一个有海滩和湖泊的露营地,因为您的数据只允许您拥有一个或另一个元素。
访问相同 - 它不能同时是步行和 4WD。因此,如果您选中两个或多个复选框,无论是功能还是可访问者,都不会得到任何结果。Ammenities 没有这个问题,因为您有一个单独的列(数据元素)用于每个淋浴、厕所和插头。我希望这是有道理的,我假设您可能希望扩展您的数据结构以允许多个元素,就像您对便利设施所做的那样。在这种情况下,需要修改公式。
但除此之外,我认为它正在按您的预期工作。
让我们知道这方面的任何问题。
更新:
为了改善外观,我修改了“TRUE”值以显示为“Y”,使用 J 到 L 中的隐藏列,以及 M5 中的以下公式。还有其他方法可以做到这一点。
={"Toilet","Shower","Plugpoint";
arrayformula(if(J6:L,"Y",""))}
这将添加三个标题标签,然后在列 J、K、L 中查找 TRUE 值,并将它们作为“Y”返回。
