news 2026/4/16 15:47:09

两种实用方法删除 Excel 重复行:Python + VBA

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
两种实用方法删除 Excel 重复行:Python + VBA

两种实用方法删除 Excel 重复行:Python + VBA(2025-2026 实用版)

删除 Excel 中的重复行是非常常见的办公/数据清洗需求。下面介绍两种目前最实用、高效的方法:

  1. Python(pandas + openpyxl)—— 适合批量处理、自动化、跨文件、需要复杂去重逻辑的场景
  2. VBA(Excel 自带宏)—— 适合快速手动操作、不想安装额外环境、直接在 Excel 里完成的场景

方法一:Python(pandas + openpyxl) —— 推荐用于自动化和批量处理

优点
  • 可以处理超大文件(几十万行)
  • 支持多列组合去重、保留第一条/最后一条、按某列排序后去重
  • 可以把结果写回原文件或生成新文件
  • 完全可脚本化、定时任务
代码示例(保留第一条重复记录)
importpandasaspd# 方法1:简单一行代码(最常用)defremove_duplicates_simple(file_path,sheet_name='Sheet1',output_path=None):# 读取 Exceldf=pd.read_excel(file_path,sheet_name=sheet_name,engine='openpyxl')# 删除重复行(保留第一条出现的记录)# keep='first'(默认) / 'last' / False(全部删除)cleaned_df=df.drop_duplicates(keep='first')# 如果想按某些列去重(比如只看“姓名+身份证”组合)# cleaned_df = df.drop_duplicates(subset=['姓名', '身份证号'], keep='first')# 保存结果ifoutput_pathisNone:output_path=file_path.replace('.xlsx','_cleaned.xlsx')cleaned_df.to_excel(output_path,index=False,engine='openpyxl')print(f"去重完成!原始{len(df)}行 → 去重后{len(cleaned_df)}行")print(f"结果保存至:{output_path}")# 使用示例remove_duplicates_simple("原始数据.xlsx")
更灵活版本(保留最后一条 + 指定去重列 + 不保存索引)
importpandasaspddefremove_duplicates_advanced(input_file,output_file=None,sheet_name='Sheet1',subset_columns=None,# 例如 ['姓名', '电话']keep='last',# 'first' / 'last' / Falsesort_by=None# 先排序再去重,例如 ['日期']):df=pd.read_excel(input_file,sheet_name=sheet_name,engine='openpyxl')original_rows=len(df)ifsort_by:df=df.sort_values(by=sort_by)cleaned_df=df.drop_duplicates(subset=subset_columns,keep=keep)ifoutput_fileisNone:output_file=input_file.replace('.xlsx','_去重后.xlsx')cleaned_df.to_excel(output_file,index=False,engine='openpyxl')print(f"去重完成!")print(f"原始行数:{original_rows}")print(f"去重后行数:{len(cleaned_df)}")print(f"保存路径:{output_file}")# 使用示例remove_duplicates_advanced("客户名单.xlsx",subset_columns=['姓名','手机号','身份证号'],# 只看这三列组合keep='last',# 保留最后出现的记录sort_by=['登记日期']# 先按登记日期排序)

方法二:VBA(Excel 宏) —— 适合快速手动清理

优点
  • 无需安装任何软件
  • 直接在 Excel 里运行
  • 速度快(几十万行也很快)
步骤
  1. Alt + F11打开 VBA 编辑器
  2. 插入 → 模块
  3. 粘贴下面代码
Sub RemoveDuplicatesAdvanced() Dim ws As Worksheet Dim rng As Range Dim lastRow As Long Dim lastCol As Long ' 设置要处理的工作表(可以改成 Sheets("Sheet1")) Set ws = ActiveSheet ' 找到最后一行和最后一列 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column ' 设置要处理的区域(从第1行表头开始) Set rng = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)) ' ====================== ' 方式一:删除所有完全重复的行(保留第一条) ' ====================== rng.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), _ Header:=xlYes ' 如果有表头就写 xlYes ' ====================== ' 方式二:只按指定列去重(例如只看第1列+第3列+第5列) ' ====================== ' rng.RemoveDuplicates Columns:=Array(1, 3, 5), Header:=xlYes MsgBox "去重完成!" & vbCrLf & _ "当前剩余行数:" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row, vbInformation End Sub
常用修改方式
需求修改方式
只看 A、B、C 三列去重Columns:=Array(1,2,3)
保留最后一条记录先按某列排序(Sort),再去重
包含表头Header:=xlYes
不包含表头Header:=xlNo
去重后自动筛选重复次数可加辅助列统计(高级用法)
快捷键运行
  1. 保存文件为.xlsm格式(启用宏)
  2. Alt + F8→ 选择RemoveDuplicatesAdvanced→ 运行

两种方法对比总结

维度Python (pandas)VBA (Excel 宏)
环境依赖需要安装 pandas + openpyxl无需安装,Excel 自带
处理数据量非常大(百万行轻松)几十万行也可以,百万行稍慢
灵活性极高(多条件、排序、逻辑复杂)中等(主要靠列号)
自动化程度最高(可定时、批量、命令行)中等(需手动触发)
学习成本中等(需会一点 Python)低(复制粘贴就能用)
推荐场景经常处理、批量、需要可复用脚本临时快速清理、手动操作

最终建议(2026 视角)

  • 日常小表、临时清理直接用 VBA,最快
  • 需要反复执行、批量处理、复杂去重逻辑、数据量大强烈推荐 Python + pandas
  • 企业内部自动化报表、ETL 流程→ 必选 Python

如果你有具体需求(例如:只去重某些列、保留最新记录、处理多个 sheet、去重后还要统计重复次数等),可以告诉我,我可以给你更针对性的代码!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 13:03:33

Java教练培训:智能排课系统源码解析

以下是对Java教练培训智能排课系统源码的解析,涵盖架构设计、核心模块、算法实现及技术亮点: 一、系统架构设计 分层架构 前端层:采用Vue3 Element Plus构建教练/学员管理后台,支持多角色权限控制(教练、管理员、学…

作者头像 李华
网站建设 2026/4/16 10:57:24

【IMU】零点误差

什么是零点测试 🧭 IMU 零点测试需要什么环境? 1. 必须完全静止(最关键) IMU 对微小振动极其敏感: 桌子上有人走动 风扇震动 设备线缆拉扯 桌面轻微晃动 都会让零点偏移变大。 建议:放在厚重的桌面或防震泡棉上。 2. 环境温度要稳定 IMU(尤其是陀螺仪)温漂非常明显…

作者头像 李华
网站建设 2026/4/16 7:24:56

从零开始构建大模型RAG检索系统:规则检索+向量检索实战指南

本文介绍了如何构建可扩展的RAG检索系统,从规则检索扩展到混合检索。文章阐述了检索层三大设计原则:不依赖LLM、不依赖prompt、各检索方式独立运行。通过模块化设计实现了规则检索、向量检索和混合检索三大核心组件,展示了如何将它们有机结合…

作者头像 李华
网站建设 2026/4/16 7:25:20

java+vue基于springboot的星星行李寄存系统

目录系统概述技术栈核心功能系统优势应用场景开发技术路线结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!系统概述 基于SpringBoot和Vue的星星行李寄存系统是一个现代化的Web应用,旨在为用户提供便捷的行李寄存服务。系统…

作者头像 李华