消息框find重复项时

我试图要求macros在C列find重复的条目,然后创build一个消息框,说'find重复值,请仔细检查',这里是我的代码如下:

Sub findduplicates() Range("C3").Select Do While ActiveCell.Value <> "" vtnaddress = ActiveCell.Address vtn = ActiveCell.Value Range("C3").Select Do Until ActiveCell.Address = vtnaddress If ActiveCell.Value = vtn Then MsgBox "Duplicate VTN found, please check again" Else ActiveCell.Offset(1, 0).Select End If Loop ActiveCell.Offset(1, 0).Select Loop End Sub 

我的问题是,消息框不断popup(我必须杀死excel摆脱msgbox),即使只有一个重复的值find,是因为它在循环内? 我只是希望m​​sgbox消失,一旦macrosfind所有重复…

谢谢

这将提示一个消息,在活动表的“C”列中find每个副本

 Option Explicit Sub FindDuplicates() Dim cell As Range With Intersect(ActiveSheet.Columns("C"), ActiveSheet.UsedRange) For Each cell In .Cells If WorksheetFunction.CountIf(.Resize(cell.Row - .Rows(1).Row + 1), cell.value) > 1 Then MsgBox "Duplicate '" & cell.value & "' in " & cell.Address Next cell End With End Sub 

基本上,当它发现重复的时候,你不会偏移活动单元格。 你的直到循环保持不停地检查同一个单元格一遍又一遍。 假设你只需要知道是否有重复,你可以通过添加一个'exit do'行来修复它,如下所示:

 Sub findduplicates() Range("C3").Select Do While ActiveCell.Value <> "" vtnaddress = ActiveCell.Address vtn = ActiveCell.Value Range("C3").Select Do Until ActiveCell.Address = vtnaddress If ActiveCell.Value = vtn Then MsgBox "Duplicate VTN found, please check again" Exit Do Else ActiveCell.Offset(1, 0).Select End If Loop ActiveCell.Offset(1, 0).Select Loop End Sub 

这就是说,你可能也希望MsgBox显示位置find重复…

使用标志来确定是否存在任何重复的值。 如果find重复值,那么您将不得不退出第一个Do While循环。

 Sub findduplicates() Dim flagDuplicate As Boolean Range("C3").Select Do While ActiveCell.Value <> "" If flagDuplicate Then Exit Do End If vtnaddress = ActiveCell.Address vtn = ActiveCell.Value Range("C3").Select Do Until ActiveCell.Address = vtnaddress If ActiveCell.Value = vtn Then MsgBox "Duplicate VTN found, please check again" foundDuplicate = True Exit Do Else ActiveCell.Offset(1, 0).Select End If Loop ActiveCell.Offset(1, 0).Select Loop End Sub