如何基于frequency of expenses列自动复制Google Sheets行至后续工作表
Google Sheets 月度费用行自动同步方案
基础版:同步首个工作表的月度行
如果只需要把首个工作表(比如January)里的月度费用行同步到后续月份表(如Feb、Mar),在目标表的A2单元格输入这个公式即可:
=FILTER(January!A:C, January!C:C="monthly")
- 公式会自动筛选January表中「frequency of expenses」列值为
monthly的行,同步姓名、金额、频率三列内容 - 后续January表新增或修改月度行时,目标表会自动更新
进阶版:同步所有前期月份的月度行
要是像示例里那样,February表新增的Mary月度行也需要同步到Mar及之后的表,就需要合并所有前期表的月度行,在目标表(比如Mar)的A2单元格用这个公式:
=FILTER({January!A:C; February!A:C}, {January!C:C; February!C:C}="monthly")
{Sheet1!A:C; Sheet2!A:C}是把两个表的A到C列纵向合并- 后面的筛选条件对应合并后的频率列,只保留标记为
monthly的行 - 之后新增Apr、May这类表时,只需在公式里继续添加
; Apr!A:C和; Apr!C:C即可
全自动版:用脚本实现新增表自动同步
如果不想每次加新月份表都手动改公式,可以用Google Apps Script实现全自动同步:
- 打开你的表格,点击「扩展程序」→「Apps Script」
- 替换默认代码为以下脚本:
function syncMonthlyExpenses() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheets = ss.getSheets(); // 按月份顺序排序工作表(可根据你的表名调整排序规则) const monthOrder = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; const sortedSheets = sheets.sort((a,b) => monthOrder.indexOf(a.getName()) - monthOrder.indexOf(b.getName())); // 给每个后续表同步前面所有表的月度行 for(let i=1; i<sortedSheets.length; i++) { const targetSheet = sortedSheets[i]; // 清空目标表原有数据(保留表头) if(targetSheet.getLastRow() > 1) { targetSheet.getRange(2,1,targetSheet.getLastRow()-1,3).clearContent(); } // 收集所有前期表的月度行 let monthlyRows = []; for(let j=0; j<i; j++) { const sourceSheet = sortedSheets[j]; const allData = sourceSheet.getDataRange().getValues(); // 跳过表头,筛选月度行 allData.slice(1).forEach(row => { if(row[2] === "monthly") { monthlyRows.push(row); } }); } // 写入目标表 if(monthlyRows.length) { targetSheet.getRange(2,1,monthlyRows.length,3).setValues(monthlyRows); } } }
- 保存脚本,命名为「SyncMonthlyExpenses」
- 设置自动触发:点击「编辑」→「当前项目的触发器」,添加一个触发器,选择
syncMonthlyExpenses函数,事件源选「从电子表格」,事件类型选「打开时」或者「更改时」,这样每次打开表格或修改内容时,脚本会自动同步所有月度行。
内容的提问来源于stack exchange,提问作者Casey D
相关产品推荐
相关产品推荐

