如何编写Google Sheets脚本:匹配E列值时删除B列对应整行
解决Google Sheets批量删除匹配行的两种方法
方法一:公式标记后手动删除(无需代码)
适合不想写脚本的场景,操作简单:
- 找个空列(比如F列),在F2单元格输入公式:
=IF(ISNUMBER(MATCH(B2,E:E,0)),"删除","保留")
这个公式会检查B2的值是否在E列存在,存在就标记「删除」,否则标记「保留」。 - 选中F2单元格,双击右下角填充柄,把公式下拉到B列最后一行。
- 选中F列,点击「数据」→「创建筛选」,点击F列筛选按钮,只勾选「删除」。
- 选中所有筛选出的行(避开表头),右键→「删除行」即可。
方法二:Google Apps Script高效处理(适合大量数据)
针对B列1万条数据的场景,脚本处理更快且不易出错:
- 打开目标Google Sheet,点击「扩展程序」→「Apps 脚本」进入脚本编辑器。
- 删除默认的
function myFunction(),粘贴以下代码:
function deleteMatchingRows() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 获取E列非空值,转成Set提升查找效率 const eValues = sheet.getRange("E2:E").getValues().flat().filter(val => val !== ""); const eSet = new Set(eValues); // 获取B列数据及对应行号(从第2行开始,假设第1行是表头) const lastRow = sheet.getLastRow(); const bRange = sheet.getRange("B2:B" + lastRow); const bValues = bRange.getValues(); const rowsToDelete = []; // 遍历B列,记录需删除的实际行号 bValues.forEach((row, index) => { const bVal = row[0]; if (bVal !== "" && eSet.has(bVal)) { rowsToDelete.push(index + 2); // B2对应第2行,数组索引从0开始,所以+2 } }); // 倒序删除行(必须从下往上删,否则删除后行号会错乱) rowsToDelete.reverse().forEach(rowNum => { sheet.deleteRow(rowNum); }); SpreadsheetApp.getUi().alert(`已删除${rowsToDelete.length}条匹配行`); }
- 点击脚本编辑器的「保存」,给脚本命名(比如DeleteMatchingRows)。
- 点击「运行」,首次运行需完成授权,按提示操作即可。
脚本说明:
- 用
Set存储E列值,比数组查找速度快,适配大量数据场景。 - 先收集所有需删除的行号,再倒序删除,避免删除前面行后导致后续行号偏移。
- 自动跳过空单元格,防止误删。
内容的提问来源于stack exchange,提问作者Nick Vrv
相关产品推荐
相关产品推荐

