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

如何编写Google Sheets脚本:匹配E列值时删除B列对应整行

解决Google Sheets批量删除匹配行的两种方法

方法一:公式标记后手动删除(无需代码)

适合不想写脚本的场景,操作简单:

  1. 找个空列(比如F列),在F2单元格输入公式:
    =IF(ISNUMBER(MATCH(B2,E:E,0)),"删除","保留")
    这个公式会检查B2的值是否在E列存在,存在就标记「删除」,否则标记「保留」。
  2. 选中F2单元格,双击右下角填充柄,把公式下拉到B列最后一行。
  3. 选中F列,点击「数据」→「创建筛选」,点击F列筛选按钮,只勾选「删除」。
  4. 选中所有筛选出的行(避开表头),右键→「删除行」即可。

方法二:Google Apps Script高效处理(适合大量数据)

针对B列1万条数据的场景,脚本处理更快且不易出错:

  1. 打开目标Google Sheet,点击「扩展程序」→「Apps 脚本」进入脚本编辑器。
  2. 删除默认的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}条匹配行`);
}
  1. 点击脚本编辑器的「保存」,给脚本命名(比如DeleteMatchingRows)。
  2. 点击「运行」,首次运行需完成授权,按提示操作即可。

脚本说明:

  • 用Set存储E列值,比数组查找速度快,适配大量数据场景。
  • 先收集所有需删除的行号,再倒序删除,避免删除前面行后导致后续行号偏移。
  • 自动跳过空单元格,防止误删。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:26:17