首页 > 解决方案 > 检查 2 列中是否有重复项,如果是,则替换为新数据或保留旧数据?VBA

问题描述

我的 Excel 文件允许用户上传新报告,每个报告可以包含多个发票(每个发票 = Excel 上的 1 行)。如果用户导入了一份新报告,但它似乎已经根据 2 个标准上传:如果日期名称已经出现在过去的数据中,则提供替换保留旧发票的选项。

在此处找到此代码并将其改编为我的工作表: 如何检查 2 列中的重复项并将整行复制到另一张工作表中?

Sub Check()

Dim lw As Long, i As Long
  With targetSheet
     lw = .Range("A" & .Rows.Count).End(xlUp).Row
     For i = 2 To lw 
        If Application.CountIfs(Range("B" & i & ":B" & lw), Range("B" & i).Text, _
        Range("E" & i & ":E" & lw), Range("E" & i)) > 1 Then
            MsgBox ("A report was made on [DATE] with [NAME]. Do you want to replace the existing report or cancel?")
        End If
    Next i
  End With

End Sub

当我运行它时,它给了我错误:运行时错误'424':需要对象

我还找到了这个网站:https ://docs.microsoft.com/en-us/office/vba/excel/concepts/cells-and-ranges/prevent-duplicate-entries-in-a-range但不知道如何适应它..

标签: excelvba

解决方案


尝试做这样的事情,@Jade:

Public Sub Check()

Dim lw As Long, i As Long

Worksheets("SheetName").Activate

lw = ActiveSheet.Range("A1048576").End(xlUp).Row

    For i = 2 To lw 
        If Application.CountIfs(ActiveSheet.Range("B" & i & ":B" & lw), ActiveSheet.Range("B" & i).Value, ActiveSheet.Range("E" & i & ":E" & lw), ActiveSheet.Range("E" & i).Value) > 1 Then
            MsgBox "A report was made on [DATE] with [NAME]. Do you want to replace the existing report or cancel?", vbYesNo, "Title of MSGBOX"
            Exit For
        End If
    Next i

End Sub

推荐阅读