Python+VBA删除Excel重复行的两种实用方法详解

 更新时间:2026年01月31日 08:54:51   作者:Eiceblue  
在日常处理Excel数据时,重复行是高频出现的问题,本文将详细介绍两种高效的去重方案,分别是Free Spire.XLS for Python和VBA 脚本,有需要的小伙伴可以了解下

在日常处理Excel数据时,重复行是高频出现的问题,不仅会增加数据量,还可能导致统计分析出错。本文将详细介绍两种高效的去重方案:Free Spire.XLS for Python(适合自动化/批量处理)和 VBA 脚本(适合 Excel 内直接操作),帮助你根据场景选择最优方式。

核心需求适配

你在处理 Excel 重复行时,可能面临这些场景:

  • 需批量处理数十个 Excel 文件,希望自动化脚本一键去重;
  • 仅处理单个 Excel 文件,不想安装 Python,直接在 Excel 内操作;
  • 需保留 Excel 原生格式(样式、公式),同时精准控制去重规则;
  • 既想掌握轻量化的 VBA 快速操作,也想学会 Python 的批量处理能力。

前置认知:两种方法核心对比

特性Python (Free Spire.XLS)Excel VBA
操作环境需安装 Python + Spire.XLS 库无需额外安装,Excel 原生支持
适用场景批量处理多文件、跨平台单个文件快速处理、轻量化操作、办公场景
格式兼容性保留 Excel 原生格式、公式、样式完全原生操作,格式无损耗
学习成本入门级 Python 语法,代码可复用简单 VBA 语法,仅需掌握核心判重逻辑
自动化能力可集成到批量脚本、定时任务仅在 Excel 内运行,适合单次操作

方法1:通过 Python 删除重复行

Free Spire.XLS for Python 是一款无需安装 Microsoft Excel 即可操作 Excel 文件的免费 Python 库,适合批量处理多个 Excel 文件、自动化脚本开发场景。

1. 环境准备

首先安装Free Spire.XLS for Python,执行以下命令:

pip install Spire.Xls.Free

2. 完整实现代码

from spire.xls import *

# 创建Workbook实例
workbook = Workbook()
workbook.LoadFromFile("duplicates.xlsx")
sheet = workbook.Worksheets[0]

# 配置关键参数
key_column = 1  # A列(Spire.XLS中列号从1开始)
last_row = sheet.LastRow
# 定义要处理的范围
data_range = sheet.Range[f"A1:A{last_row}"]

# 用于跟踪已出现的值(去重核心)
seen_values = set()
rows_to_remove = []

# 获取总行数
row_count = data_range.Rows.Length

# 核心逻辑:从最后一行向前遍历
for i in range(row_count, 0, -1):
    # 获取单元格值并标准化
    cell = data_range[i, key_column]  
    cell_value = str(cell.DisplayedText).strip()
    
    # 规则:空值 或 已出现过的值 → 标记为删除
    if not cell_value or cell_value in seen_values:
        rows_to_remove.append(i) 
    else:
        seen_values.add(cell_value)

# 批量删除标记的行(逆序遍历收集的行号,直接删即可)
for row in rows_to_remove:
    sheet.DeleteRow(row)

# 保存并释放资源
workbook.SaveToFile("RemoveDuplicates.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

3. 代码关键解释

Workbook():创建Excel工作簿对象,负责加载/保存文件;

LastRow:获取工作表中实际有数据的最后一行,避免处理空行;

set:高效记录已出现的单元格值;

行数据去重逻辑:

  • 逆序遍历:从最后一行到第一行,彻底规避 删除行后行号偏移问题,无需调整行号;
  • 清晰的判断规则:拆分 空值处理和重复值处理逻辑,易读易维护;
  • 批量标记 + 批量删除:先收集所有要删除的行号,再统一删除,减少 IO 操作。

DeleteRow():删除标记为空白的行;

Dispose():释放资源,避免内存泄漏。

方法2:VBA 脚本删除 Excel 重复行

VBA(Visual Basic for Applications)是 Excel 内置的脚本语言,无需额外安装工具,适合手动操作单个 Excel 文件、快速去重的场景。

1. 准备工作:启用 VBA 编辑器

  • 打开 Excel 文件 → 【文件】→【选项】→【自定义功能区】→ 勾选 “开发工具”;
  • Alt + F11 打开 VBA 编辑器 →【插入】→【模块】,即可编写代码。

2. 完整 VBA 代码

该代码会删除当前工作表中基于第一列(A列)所有的重复行,保留第一条重复行:

Sub VBA_RemoveDuplicates_SpecCol()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim dict As Object
    Dim targetCol As String
    Dim cellVal As String
    Dim i As Long
    
    ' 指定判重列(如"A"列)
    targetCol = "A"
    
    Set ws = ActiveSheet
    Set dict = CreateObject("Scripting.Dictionary")
    lastRow = ws.UsedRange.Rows.Count
    
    If lastRow < 2 Then
        MsgBox "数据不足!", vbInfo
        Exit Sub
    End If
    
    ' 倒序遍历,仅按指定列判重
    For i = lastRow To 2 Step -1
        cellVal = IIf(IsEmpty(ws.Cells(i, targetCol).Value), "", ws.Cells(i, targetCol).Value)
        If dict.Exists(cellVal) Then
            ws.Rows(i).Delete
        Else
            dict.Add cellVal, i
        End If
    Next i
    
    Set dict = Nothing
    Set ws = Nothing
    MsgBox "按" & targetCol & "列去重完成!", vbInfo
End Sub

3. 代码关键解释

  • ActiveSheet:表示当前选中的工作表,也可手动指定ThisWorkbook.Worksheets("Sheet1")
  • targetCol = "A": 定义判重列,改值即可切换目标列;
  • 判重依据:仅提取指定列单元格值,用 IIf(IsEmpty(...)) 统一空值为"",避免判重错误
  • lastRow To 2 Step -1:防止删除行后索引错乱;
  • Delete:删除判断为重复的列

4. 运行 VBA 代码的方法

  • 在 VBA 编辑器中粘贴代码;
  • F5 运行,或点击 “运行” 按钮;
  • 回到 Excel,弹窗提示 “按A列去重完成”。

无论是 Python (Free Spire.XLS) 的批量自动化,还是 VBA 的轻量化原生操作,掌握这两种方法就能覆盖所有 Excel 去重场景,从根本上解决手动删重复行的低效问题,大幅提升数据处理效率。

到此这篇关于Python+VBA删除Excel重复行的两种实用方法详解的文章就介绍到这了,更多相关Python删除Excel重复行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 彻底搞懂Python字符编码

    彻底搞懂Python字符编码

    本篇文章带领大家彻底搞懂Python字符编码的一些知识,及python字符编码的一些基础概念,需要的朋友可以参考下
    2018-01-01
  • Pytorch关于Dataset 的数据处理

    Pytorch关于Dataset 的数据处理

    这篇文章主要介绍了Pytorch关于Dataset 的数据处理,学习如何对卷积神经网络编程;首先,需要了解Pytorch对数据的使用,也是在我们模型流程中对数据的预处理部分,下面我们就一起进入文章查看具体处理过程吧
    2021-12-12
  • 使用python实现ANN

    使用python实现ANN

    这篇文章主要为大家详细介绍了使用python实现ANN的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • 仅用50行Python代码实现一个简单的代理服务器

    仅用50行Python代码实现一个简单的代理服务器

    这篇文章主要介绍了仅用50行Python代码实现一个简单的代理服务器,利用最简单的client->proxy->forward原理在socket模块下编写,需要的朋友可以参考下
    2015-04-04
  • Python PaddleGAN实现照片人物性别反转

    Python PaddleGAN实现照片人物性别反转

    PaddleGAN中的styleganv2editing.py是支持性别编辑的。所以本文将介绍如何通过调整参数,来试着实现一下照片的性别翻转。感兴趣的小伙伴可以学习一下
    2021-12-12
  • Manjaro、pip、conda更换国内源的方法

    Manjaro、pip、conda更换国内源的方法

    这篇文章主要介绍了Manjaro、pip、conda更换国内源的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • python 保存float类型的小数的位数方法

    python 保存float类型的小数的位数方法

    今天小编就为大家分享一篇python 保存float类型的小数的位数方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • python使用时间间隔的操作及技巧分享

    python使用时间间隔的操作及技巧分享

    Python 中处理时间间隔和日期时间的操作通常涉及 datetime 模块,它提供了丰富的功能来处理日期和时间,本文给大家介绍了一些关于时间间隔操作的技巧和示例,并通过代码示例介绍的非常详细,需要的朋友可以参考下
    2024-12-12
  • Django ORM多对多查询方法(自定义第三张表&ManyToManyField)

    Django ORM多对多查询方法(自定义第三张表&ManyToManyField)

    今天小编就为大家分享一篇Django ORM多对多查询方法(自定义第三张表&ManyToManyField),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python接口自动化之浅析requests模块get请求

    Python接口自动化之浅析requests模块get请求

    这篇文章主要介绍了requests模块get请求,在Python语言中,虽然提供了urllib2和urllib的库,但是相比较而言,Requests仍然是实现接口测试最好的选择,因为它是用起来更加简便
    2021-08-08

最新评论