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

如何在Google Sheets中基于三列数据实现月度收支及净收益统计

用Google Sheets统计月度收支及净收益方案

假设你的表格列对应关系如下:

  • A列:Timestamp(时间戳)
  • B列:类型(收入/支出)
  • C列:金额

一、单月指标快速计算(用SUMIFS函数)

适合单独统计某一个月的三项数据,无需手动遍历行:

1. 月度总收入

=SUMIFS(C:C, B:B, "收入", A:A, ">="&DATE(2024,5,1), A:A, "<="&EOMONTH(DATE(2024,5,1),0))

参数说明:

  • C:C:指定要求和的金额列
  • B:B, "收入":筛选类型为「收入」的行
  • A:A, ">="&DATE(2024,5,1):限定时间戳在目标月份第一天及以后
  • A:A, "<="&EOMONTH(...):用EOMONTH自动获取当月最后一天,限定时间范围

2. 月度总支出

把上述公式中的"收入"替换为"支出"即可:

=SUMIFS(C:C, B:B, "支出", A:A, ">="&DATE(2024,5,1), A:A, "<="&EOMONTH(DATE(2024,5,1),0))

3. 月度净收益

直接用总收入减总支出,或合并成单公式:

=SUMIFS(C:C, B:B, "收入", A:A, ">="&DATE(2024,5,1), A:A, "<="&EOMONTH(DATE(2024,5,1),0)) - SUMIFS(C:C, B:B, "支出", A:A, ">="&DATE(2024,5,1), A:A, "<="&EOMONTH(DATE(2024,5,1),0))

二、自动生成全月度汇总表(用QUERY函数)

如果要一次性统计所有月份的收支数据,用QUERY函数直接生成结构化汇总表:
在空白单元格(比如E1)输入:

=QUERY(A:C, "SELECT MONTH(A)+1, YEAR(A), SUM(CASE WHEN B='收入' THEN C ELSE 0 END), SUM(CASE WHEN B='支出' THEN C ELSE 0 END), SUM(CASE WHEN B='收入' THEN C ELSE -C END) GROUP BY YEAR(A), MONTH(A)+1 LABEL MONTH(A)+1 '月份', YEAR(A) '年份', SUM(CASE WHEN B='收入' THEN C ELSE 0 END) '总收入', SUM(CASE WHEN B='支出' THEN C ELSE 0 END) '总支出', SUM(CASE WHEN B='收入' THEN C ELSE -C END) '净收益'", 1)

逻辑说明:

  • 按年份+月份自动分组,批量计算每个月的三项指标
  • MONTH(A)+1修正Google Sheets的月份索引(原函数返回0-11,加1后为1-12)
  • CASE语句区分收支类型计算金额,净收益直接通过「收入-支出」逻辑生成
  • LABEL参数设置中文表头,最后一个1表示原数据包含表头行

三、手动遍历行的脚本实现(Apps Script)

如果一定要通过遍历每一行判断条件来统计,可使用Google Apps Script实现:
打开表格后点击「扩展程序」→「Apps Script」,粘贴以下代码:

function calculateMonthlyBudget() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();
  const headers = data.shift(); // 获取表头行
  const timestampCol = headers.indexOf("Timestamp");
  const typeCol = headers.indexOf("类型");
  const amountCol = headers.indexOf("金额");

  const monthlyStats = {};

  // 遍历每一行数据
  data.forEach(row => {
    const date = new Date(row[timestampCol]);
    const year = date.getFullYear();
    const month = date.getMonth() + 1; // 转换为1-12月份
    const key = `${year}-${month}`;
    const type = row[typeCol];
    const amount = Number(row[amountCol]);

    // 初始化当月统计数据
    if (!monthlyStats[key]) {
      monthlyStats[key] = { income: 0, expense: 0, net: 0 };
    }

    // 判断类型并累计金额
    if (type === "收入") {
      monthlyStats[key].income += amount;
    } else if (type === "支出") {
      monthlyStats[key].expense += amount;
    }
    monthlyStats[key].net = monthlyStats[key].income - monthlyStats[key].expense;
  });

  // 将结果写入新工作表
  const resultSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("收支汇总") || SpreadsheetApp.getActiveSpreadsheet().insertSheet("收支汇总");
  resultSheet.clear();
  resultSheet.appendRow(["年份", "月份", "总收入", "总支出", "净收益"]);
  Object.keys(monthlyStats).forEach(key => {
    const [year, month] = key.split("-");
    const stats = monthlyStats[key];
    resultSheet.appendRow([year, month, stats.income, stats.expense, stats.net]);
  });
}

运行函数后,会自动生成「收支汇总」工作表,包含所有月份的统计结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:07:04