news 2026/3/3 21:47:56

两种实用方法删除 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/3/4 6:51:39

Java程序员如何逆袭进大厂?

前几天,跟个老朋友吃饭,他最近想跳槽去大厂,觉得压力很大,问我能不能分享些所谓的经验套路。每次有这类请求,都觉得有些有趣,不知道你发现没有大家身边真的有很多人不知道怎么面试,也不知道怎么…

作者头像 李华
网站建设 2026/3/4 3:50:18

(含关键技术人员解析)从“千问崩了”到“系统重生”:一场30亿级高并发实战背后的全链路技术复盘

从“千问崩了”到“系统重生”:一场30亿级高并发实战背后的全链路技术复盘 适合读者:后端开发、SRE工程师、AI平台建设者、技术管理者、计算机专业学生 关键词:通义千问、高并发、大模型推理、系统稳定性、限流降级、Kubernetes、GPU调度、CS…

作者头像 李华
网站建设 2026/3/4 6:50:32

【C++与Linux基础】文件篇 -语言特性上的文件操作

【C与Linux基础】文件篇 - 语言特性上的文件操作 在 C 中进行文件操作&#xff0c;主要依赖两种方式&#xff1a; C 标准库&#xff08;<fstream>&#xff09;—— 现代 C 推荐方式&#xff0c;跨平台&#xff0c;面向对象风格C 风格文件操作&#xff08;<cstdio>…

作者头像 李华
网站建设 2026/3/4 2:49:06

大模型AI产品经理学习资源,价值2万的资料免费共享_大模型多个岗位详解,非常详细收藏我这一篇就够了

本文详细介绍了9个大模型相关岗位的职责与要求&#xff0c;并提供了价值2万元的大模型&AI产品经理学习资源包&#xff0c;包括7阶段学习路线图、300集视频教程、200本技术书籍及面试题合集&#xff0c;覆盖从入门到实战的全流程&#xff0c;适合小白和程序员系统学习大模型…

作者头像 李华
网站建设 2026/3/4 12:20:37

fpga lvds接口显示屏驱动

驱动源码: //------------------------------------文件信息--------------------------------------- // 文件名称: lcd2lvds_convert.v // 最后修改日期: 2018-5-3 // 最新版本: 1.0 // 功能描述: LCD数据格式转LVDS数据格式 // /…

作者头像 李华
网站建设 2026/3/4 7:21:35

Depth-Wise Emergence of Prediction-Centric Geometry in Large Language Models

Depth-Wise Emergence of Prediction-Centric Geometry in Large Language Models Authors: Shahar Haim, Daniel C McNamee Deep-Dive Summary: 论文总结&#xff1a;ControlNet - 为文本到图像扩散模型添加条件控制 这篇文章介绍了一种名为 ControlNet 的神经网络架构&am…

作者头像 李华