基于多个标准的过滤范围(Google 表格)

问题描述 投票:0回答:1

我正在尝试根据多个关键字过滤属性列表(例如“酷室内”、“露台/庭院”)。这是一个基本的解释:

我要过滤的范围位于标题为“1”的工作表上,范围从 A2:O25 开始。该范围是受保护范围,称为“Properties_List”。每行代表不同的属性,每列代表不同的信息(名称、区域、价格、尺寸等)。在工作表“1”的 AA 列中,我有一个用逗号分隔的每个属性的关键字列表。 AA 列中的示例单元格如下所示:Mountain、Lake、Terrace/Patio、Multi-Unit、Garden。 AA 列中的范围是受保护范围,称为“Filter_List”,范围从 AA2:AA25。

[注意:“Filter_List”中的每一行都使用“JOIN”函数,该函数将从 Q-Y 列中选择多个关键字。 Q-Y 列中的每个单元格都包含下拉框,您可以在其中从 25-30 个关键字中选择一个术语。]

我为单独的工作表(工作表“2”)添加了 Code.gs 脚本。相同的保管箱(如上所述)位于工作表“2”的单元格 A4 中。在脚本中,用户可以从单元格 A4 的下拉框中选择关键字,该选择将显示在单元格 B4 中。此外,用户可以选择更多关键字,并且这些选择将出现在单元格 B4 中先前选择之后(以逗号分隔)。经过三个单独的选择后,单元格 B4 会像这样:山、花园、湖

我正在努力做的是:

根据单元格 B4 中与“Filter_List”中的文本字符串匹配的选择,过滤工作表“2”的单元格 A7 中的“Properties_List”。

因此,“Filter_List”中相应单元格内包含单词“Mountain”AND“Garden”AND“Lake”的任何属性都将显示在工作表“2”的 A7(及下方)中。

在我的尝试中,我还在工作表“2”中指定了单元格 C36:H36 以“抓取”单元格 B4 中的每个选择。因此,在上面的示例中,单元格 C36 将显示“山”,单元格 D36 将显示“花园”,单元格 E36 将显示“湖”,单元格 F36:H36 将显示空白。

我在工作表“2”的单元格 A7 中使用了以下函数:

=FILTER(Properties_List,REGEXMATCH(Filter_List,C36),REGEXMATCH(Filter_List,D36),REGEXMATCH(Filter_List,E36),REGEXMATCH(Filter_List,F36),REGEXMATCH(Filter_List,G36),REGEXMATCH(Filter_List,H36))

这样的作品?但并不完全。我发现该函数还将根据选择的顺序进行过滤。换句话说,只有带有“Filter_List”字符串的属性,其中“Mountain”位于“Garden”之前,“Garden”位于“Lake”之前,才会保留。我希望过滤器显示一个属性,其中字符串中的任何位置都包含“山”、“花园”和“湖”(所有三个)。

这有道理吗?到底有没有?哈哈。感谢您的帮助,如果我的做法有误,请告诉我!

最好的, 约翰尼

google-sheets filter google-sheets-formula string-matching
1个回答
0
投票
在过滤表的单元格 A5 中尝试此公式:

=query({Sheet1!A1:C},"select Col1, Col2, Col3 where Col1 is not null "&"and Col3 contains '"&textjoin(" and Col3 contains ",1,split(regexreplace(B2,"(\w+)","'$1'"),",")))



样本数据


报告样本


逻辑

  • regexreplace(B2,"(\w+)","'$1'")
    :在逗号分隔列表中的每个单词周围放置单引号。 h/t @TomSharpe:
    有没有办法将单元格中的逗号分隔值列表用引号括起来?
  • split
    :删除每个逗号并创建一个范围
  • textjoin
    :当属性数量不确定时启用 
    where
     子句。 h/t: @player0: 
    Google Sheets 查询总和不确定的列数
© www.soinside.com 2019 - 2024. All rights reserved.