Google 带有 IN 子句的工作表过滤器

Google Sheets Filter with IN clause

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

详情

我正在使用 Google 表格来编写财务价差sheet,其中我所有的支出和收入都输入到一个名为“交易”的 sheet 中。我有一个名为 Constants 的单独 sheet,我在其中保留收入类别列表和支出类别列表。

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

常量

事务

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

我基本上需要在 google sheet 函数中执行此 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() 函数添加第三个条件,第三个条件将以某种方式将每行数据的类别列与有效费用或收入类别列表进行比较,return布尔值。

以下是我尝试过的一些其他方法,包括 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)

有什么建议吗?

您感兴趣的公式是:

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

函数 match(a, b, 0) 搜索是否可以在 b 中找到 a。您需要在末尾 0 进行完全匹配(默认为最接近的匹配)。如果找不到 a,就会出错,所以用 iferror 包装函数以跳过错误。

这里是working example file

由于每个分类都使用一个关键字,expenseincome,下面的公式return得到想要的结果

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