查找重复行,并标记

目的:查找重复行,并标记出来。有意思的地方在于,不同于以前处理的简单双重循环,这里需要在外层循环进行限定(num = num + 1),以避免冗余运算。

Option Explicit

Sub Lookup()
    Dim r As Long, c As Long, i As Integer, j As Integer, num As Integer, _
        Delete_num As Integer
    Dim myRange As Range
    Dim myFon As Font
    'r为行数,c为列数,i为外层循环数控制,j为内层循环数控制
    
    Set myRange = ActiveSheet.UsedRange
    myRange.ClearFormats
    'myRange.ClearFormats
    r = myRange.Rows.Count
    Debug.Print r
    c = myRange.Columns.Count
    num = 3
    
    Delete_num = 0
    
    '查找重复行
    If myRange.Cells(2, 1) = myRange.Cells(4, 1) Then
        Debug.Print "第" & 111111; "行为重复行"
    End If
    
    For i = 2 To r
        Debug.Print "第" & i; "行"
        For j = num To r
            If myRange.Cells(i, 1) = myRange.Cells(j, 1) And _
                myRange.Cells(i, 4) = myRange.Cells(j, 4) Then
                Debug.Print "第" & j & "行为重复行"
'                'myRange.Cells(i, 1).EntireRow.Delete shift:=xlShiftUp 'xlShiftToLeft
                Delete_num = Delete_num + 1
                myRange.Cells(j, 2).Value = "Delete Row Found"
                
                Set myFon = myRange.Cells(j, 1).EntireRow.Font
                With myFon
                .Name = "楷体"
                .Size = 15
                .Bold = True
                .Italic = True
                .Color = RGB(255, 0, 0)
                .Strikethrough = True '水平删除线
                .Underline = xlUnderlineStyleNone 'xlUnderlineStyleSingle 'xlUnderlineStyleDouble
                .Shadow = False  '是/否无变化??
                .Subscript = False
                .Superscript = False
                '具体属性设置参看:https://docs.microsoft.com/zh-cn/office/vba/api/excel.xlpattern
                End With
                
            End If
         Next
         num = num + 1
    Next
    
    MsgBox "共有: " & Delete_num & "条重复记录"
End Sub
### 如何在Excel中查找标记重复 #### 方法一:使用条件格式化 通过条件格式化可以直观地标记出Excel中的重复。具体操作如下: 1. 首先选中需要检查重复的区域(例如A1:C100),然后转到「开始」选项卡,点击「条件格式化」按钮。 2. 选择「突出显示单元格规则」 -> 「重复值」[^1]。 3. 在弹出的对话框中可以选择用于标记重复值的颜色或其他格式设置。 4. 单击「确定」后,所有符合条件的重复将会被高亮显示。 这种方法简单易用,适合于初步查看哪些存在重复情况。 #### 方法二:借助辅助列判断重复 如果希望更精确地识别整个记录级别的重复,则可采用增加辅助列的方式完成此任务: - 假设原始数据位于A至D四列之间,在E列创建一个新的字段作为唯一键组合各字段内容形成字符串表达式`=CONCATENATE(A1,B1,C1,D1)`或者利用现代版本支持的`TEXTJOIN()`函数:`=TEXTJOIN("",TRUE,A1:D1)` - 接下来按照前述提到过的基于单个字段的方法再次运用COUNTIF统计该复合关键字在整个列表里出现频次是否超过一次即代表当前为冗余项[^3]. 对于大型工作表而言,这种方式虽然稍微复杂一点但提供了更大的灵活性允许我们自定义比较逻辑而不仅仅局限于单一维度上的匹配. #### 方法三:编程自动化处理(以Python为例) 当面对批量文件或是超大规模数据集时手动方式效率低下容易出错此时引入脚本语言如Python配合专门库pandas或openpyxl能够极大提升工作效率下面给出一段示范代码展示怎样读取xlsx格式电子表格定位其中存在的完全相同整将它们标注出来保存成新的副本以便后续审查调整[^4]: ```python import pandas as pd def mark_duplicates(file_path, output_file): df = pd.read_excel(file_path) duplicated_rows = df[df.duplicated(keep=False)] # Add a new column to indicate duplicates df['IsDuplicate'] = False duplicate_indices = duplicated_rows.index.tolist() for idx in duplicate_indices: df.at[idx,'IsDuplicate']=True writer = pd.ExcelWriter(output_file, engine='xlsxwriter') df.to_excel(writer,sheet_name="Sheet1",index=False) worksheet = writer.sheets["Sheet1"] format_red = workbook.add_format({'bg_color': '#FFC7CE','font_color': '#9C0006'}) for row_num in range(len(df)): if df.iloc[row_num]['IsDuplicate']: worksheet.set_row(row_num+1,None,format_red) mark_duplicates('source_data.xlsx', 'output_with_marked_dups.xlsx') ``` 以上程序片段实现了加载源Excel文档扫描全部可能的重复实例附加额外标志位最后导出更新后的结果保留原有结构同时还附带视觉提示方便人工核验确认无误后再做进一步处置动作. ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值