You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets Query函数:如何用命名范围自动分类支出?

解决方案

场景1:按分类提取对应支出项和费用明细

假设你的支出数据存放在Data工作表的A列(支出项)和B列(费用),Groceries、Travel等命名范围是各分类对应的支出项列表(单列数据)。可以用BYCOL+QUERY批量生成各分类的明细:

=BYCOL({"Groceries","Travel"}, LAMBDA(category, 
  QUERY(Data!A:B, "select A,B where A matches '"&TEXTJOIN("|", TRUE, INDIRECT(category))&"'", 1)
))

公式说明

  • BYCOL遍历指定的分类名称数组,对每个分类执行后续逻辑
  • INDIRECT(category)调用对应命名范围,获取该分类下的所有支出项
  • TEXTJOIN("|", TRUE, ...)将支出项拼接为正则匹配格式(|表示“或”),适配QUERY的matches条件
  • QUERY筛选出匹配当前分类支出项的行,返回支出项和费用明细

如果需要模糊匹配(比如“沃尔玛采购”属于Groceries),修改正则部分为带通配符的格式:

=BYCOL({"Groceries","Travel"}, LAMBDA(category, 
  QUERY(Data!A:B, "select A,B where A matches '"&TEXTJOIN("|", TRUE, "*"&INDIRECT(category)&"*")&"'", 1)
))

场景2:按分类汇总总费用

如果需要直接得到各分类的费用合计,用BYROW+SUMIF实现:

=HSTACK({"分类","总费用"}, 
  BYROW({"Groceries","Travel"}, LAMBDA(category, 
    HSTACK(category, SUMIF(Data!A:A, "*"&TEXTJOIN("*|*", TRUE, INDIRECT(category))&"*", Data!B:B))
  ))
)

或者先自动标注分类再用QUERY汇总:

=QUERY(
  {Data!A:B, BYROW(Data!A:A, LAMBDA(item, 
    XLOOKUP(TRUE, COUNTIF(INDIRECT("Groceries"), item)>0, "Groceries", 
      XLOOKUP(TRUE, COUNTIF(INDIRECT("Travel"), item)>0, "Travel", "未分类")
    )
  ))},
  "select Col3, sum(Col2) group by Col3 label sum(Col2)'总费用'", 1
)

注意事项

  • 命名范围必须为单列的支出项列表,避免多列或混合格式导致匹配失败
  • 新增分类时,只需在公式的分类名称数组(如{"Groceries","Travel"})中添加对应名称即可,无需修改其他逻辑
  • 若支出项存在重复命名,确保命名范围中的值与数据中的支出项完全一致(模糊匹配除外)

内容的提问来源于stack exchange,提问作者EchoB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:52:43