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 内运行,适合单次操作
  • 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():释放资源,避免内存泄漏。
  • 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高效实现删除Excel重复数据的三种方法 python 删除excel表格重复行,数据预处理操作 使用Python删除Excel中的指定行列 Python轻松实现删除Excel工作表中的空白行列 使用Python删除Excel中的行列和单元格示例详解 利用Python自动化识别与删除Excel表格空白行和列 Python操作Excel插入删除行的方法
  • 目录
    • 核心需求适配
    • 前置认知:两种方法核心对比
    • 方法1:通过 Python 删除重复行
    • 方法2:VBA 脚本删除 Excel 重复行

    在日常处理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 内运行,适合单次操作

    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():释放资源,避免内存泄漏。

    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高效实现删除Excel重复数据的三种方法
    • python 删除excel表格重复行,数据预处理操作
    • 使用Python删除Excel中的指定行列
    • Python轻松实现删除Excel工作表中的空白行列
    • 使用Python删除Excel中的行列和单元格示例详解
    • 利用Python自动化识别与删除Excel表格空白行和列
    • Python操作Excel插入删除行的方法

    站内搜索