使用 ArrayFormula 的 Google Sheet 多个相关下拉列表

时间:2021-04-12 09:23:10

标签: google-sheets

我正在尝试创建多个相关下拉列表来过滤 Google 表格中的数据集。

“Rate Filter Basic”选项卡按我预期的方式工作,无需创建 ArrayFunction 来复制下拉列表。

“费率表”选项卡是我要过滤的数据源。

“Rate Filter Adv”选项卡是我尝试创建一个 ArrayFormula 的地方,它将自动填充下拉列表的更深层次。我了解到并非所有函数都允许我在其中嵌套 ArrayFormula 或 AND OR 子句。

带有“”的选项卡是我为每个列表重建下拉数据的地方。 “付款”有一个突出显示的cel,上面不应该出现“NEXO”。

我遇到麻烦的地方是“付款”下拉列表,这取决于前 2 个(服务、令牌)。在“Rate Filter Adv”选项卡上,cel D5 结果应该只有“In-Kind”。非实物和 NEXO。

我对解决这个问题的全新方法持开放态度。
我正在尽我所能。目前正在研究 QUERY,但我也在研究 ArrayFormula、AND、OR 等方面的限制。

演示表

https://docs.google.com/spreadsheets/d/1rcWYgNeAXE8mEb43m0Jf50cQ9U9ntA0yd8znXAi5kMU/edit?usp=sharing

谢谢。

1 个答案:

答案 0 :(得分:0)

这是一个提案https://docs.google.com/spreadsheets/d/17b0FoUHM5lAOcdeWnzxrGm6ErqYxWlfggcNDsKt8yHQ/edit?usp=sharing 公式示例

=transpose(unique(query('Rate Table'!A$4:D,"select D where A='"& 'Rate Filter Adv'!B4 &"' AND B='"& 'Rate Filter Adv'!C4 &"' AND C='"& 'Rate Filter Adv'!D4 &"' ")))

在 C 或 D 列应用新值时,您可以使用 onEdit 删除其他值

function onEdit(event){
  var sh = event.source.getActiveSheet();
  var rg = event.source.getActiveRange();
  if (sh.getName()=='Rate Filter Adv'){
    var c = rg.getColumn();
    var r = rg.getRow();
    if (c==4){sh.getRange(r,c+1).setValue('')}
    if (c==3){
      sh.getRange(r,c+1).setValue('')
      sh.getRange(r,c+2).setValue('')
    }
  }
}