python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python删除Excel重复行

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

作者:Eiceblue

在日常处理Excel数据时,重复行是高频出现的问题,本文将详细介绍两种高效的去重方案,分别是Free Spire.XLS for Python和VBA 脚本,有需要的小伙伴可以了解下

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

核心需求适配

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

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

特性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:高效记录已出现的单元格值;

行数据去重逻辑:

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

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

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

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

1. 准备工作:启用 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. 代码关键解释

4. 运行 VBA 代码的方法

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

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

您可能感兴趣的文章:
阅读全文