问题:在Google表格中,使用 内置函数,如何编写过滤器以排除基于a的记录每行中的列不在另一个范围的有效值列表中。
详情
我正在使用Google表格编写一份财务电子表格,其中我的所有费用和收入都输入到一张名为“交易”的表格中。我有一个名为常数的单独表格,其中列出了收入类别列表和费用类别列表。
以下是一些用于问题的示例数据:
常量
交易的
我有一张名为ByMonth的工作表,我想在一个部分显示所有费用交易,并在一个单独的部分显示所有收入交易。 目标:
我需要在Google工作表函数中实际执行此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)
有什么建议吗?
答案 0 :(得分:6)
您感兴趣的公式是:
=filter(Journal!A2:C13,IFERROR(Match(Journal!B2:B13,Categories!A2:A3,0)))
功能match(a, b, 0)
搜索a
中是否可以找到b
。最后需要0
才能完全匹配(默认为最接近匹配)。如果找不到a
,则会收到错误,因此您使用iferror
包装该函数以跳过错误。
答案 1 :(得分:2)
由于每个类别都使用关键字expense
或income
,因此以下公式会返回所需的结果
=query(Journal!A2:C13,"Select * where B contains 'expense'")
=query(Journal!A2:C13,"Select * where B contains 'income'")