Google表格过滤器使用IN子句

Twi*_*ron 8 spreadsheet google-sheets google-apps-script

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

细节

我正在使用Google表格编写一份财务电子表格,其中我的所有费用和收入都输入到一张名为"交易"的表格中.我有一个名为常数的单独表格,其中列出了收入类别列表和费用类别列表.

以下是一些用于问题的示例数据:

常量

在此输入图像描述

交易

在此输入图像描述

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

在此输入图像描述

我需要在谷歌工作表功能基本上做这个SQL查询:

select date, category, amount from transactions 
where category not in (
    select * from expense_categories
)
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何让Google表格让我用他们的功能做一个IN概念.

这是一个单元函数表达式,我用它来根据日期字段过滤行:

=filter(Transactions!A2:C, 
        DATEVALUE(Transactions!A2:A) >= date(2015,4,1), 
        DATEVALUE(Transactions!A2:A) <= date(2015,4,30)
)
Run Code Online (Sandbox Code Playgroud)

我将向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)
Run Code Online (Sandbox Code Playgroud)

有什么建议?

小智 6

您感兴趣的公式是:

=filter(Journal!A2:C13,IFERROR(Match(Journal!B2:B13,Categories!A2:A3,0)))
Run Code Online (Sandbox Code Playgroud)

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

这是工作示例文件