【问题标题】:Google Sheets Filter with IN clause带有 IN 子句的 Google 表格过滤器
【发布时间】:2016-01-20 19:45:24
【问题描述】:

问题:在 Google 表格中,内置函数,我如何编写一个过滤器来排除基于每行中的列不存在于另一个范围的有效值列表中。

详情

我正在使用 Google 表格编写一个财务电子表格,其中我的所有支出和收入都输入到一张名为“交易”的表格中。我有一个单独的表格,称为常量,其中保存了收入类别列表和费用类别列表。

这里是一些用于问题的示例数据:

常量

交易

我有一张名为 ByMonth 的工作表,我想在其中显示一个部分中的所有费用交易,并在单独的部分中显示所有收入交易。 目标:

我基本上需要在谷歌表格函数中执行这个 sql 查询:

select date, category, amount from transactions 
where category not in (
    select * from expense_categories
)

但我不知道如何让 Google 表格让我用它们的功能做一个 IN 概念。

这是我用于根据日期字段过滤行的单元格函数表达式:

=filter(Transactions!A2:C, 
        DATEVALUE(Transactions!A2:A) >= date(2015,4,1), 
        DATEVALUE(Transactions!A2:A) <= date(2015,4,30)
)

我将向 filter() 函数添加第三个条件,第三个条件将以某种方式将每行数据的 Category 列与有效费用或收入类别列表进行比较,并返回一个布尔值。

以下是我尝试过的其他一些方法,但无济于事,包括 MATCH、ARRAYFORMULA 等的一些变体:

=filter(Transactions!A2:C, row(Transactions!B2:B) = UNIQUE(Constants!A2:A))
=filter(Transactions!A2:C, Transactions!B2:B = UNIQUE(Constants!A2:A))
=filter(Transactions!A2:C, Transactions!B2:B = Constants!A2:A)

有什么建议吗?

【问题讨论】:

  • 您有可以分享的示例电子表格

标签: google-apps-script google-sheets spreadsheet


【解决方案1】:

你感兴趣的公式是:

=filter(Journal!A2:C13,IFERROR(Match(Journal!B2:B13,Categories!A2:A3,0)))

函数match(a, b, 0) 搜索a 是否可以在b 中找到。最后需要0 才能完全匹配(默认是最接近的匹配)。如果找不到a,则会出现错误,因此使用iferror 包装函数以跳过错误。

这里是working example file

【讨论】:

  • 这正是我想要的。我尝试了 Match,但输出看起来不正确。第三个参数是我所缺少的。谢谢@daniel!
  • IFERROR 应更改为 ISERROR。您希望 ISERROR 的布尔值 true 返回过滤范围内不存在的那些。
  • @LStarky,好收获!我原来的示例文件有错误,所以结果收入/费用结果被切换了。我修复了错误。我还添加了一个使用ISERROR 的示例来说明差异。
【解决方案2】:

由于每个类别都使用关键字expenseincome,因此以下公式会返回所需的结果

=query(Journal!A2:C13,"Select * where B contains 'expense'")
=query(Journal!A2:C13,"Select * where B contains 'income'")

【讨论】:

  • 我在示例中使用了“费用”和“收入”这两个词来使示例更清晰,但我不想要求这些关键字出现。但我很高兴知道这是一个选项。感谢您的回答@Rubén!
  • 欢迎您@TwitchBronBron。要了解有关 Google 查询语言的更多信息,请参阅developers.google.com/chart/interactive/docs/…
猜你喜欢
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 2012-12-06
  • 2013-11-27
  • 2015-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多