VBA 只删除一个重复值
VBA Remove only one duplicate value
第一次发帖,请耐心等待。:)
我正在尝试找到一种方法来比较 Sheet“TransferUt”单元格 A1 中的值与 sheet“Inne”中的范围 A,我只想清除第一个的内容每次我 运行 宏出现在单元格 A 和 B(Sheet“Inne”)中。
问题是,“Inne”中会有许多重复值和单个值。没关系。
我找到并编辑了以下代码(只有我有问题的那一点),但是当我 运行 它时,它删除了 所有重复的值 “Inne”,A 列,与 Sheet“TransferUt”中的单元格 A1 匹配,我当时只想删除一个。
Dim LastRowInRange As Long, RowCounter As Long
LastRowInRange = Sheets("Inne").Range("A:A").Find("*", , xlFormulas, , xlByRows, xlPrevious).Row
For RowCounter = LastRowInRange To 1 Step -1
If Sheets("Inne").Range("A" & RowCounter) = Sheets("TransferUt").Range("A1") Then
Sheets("Inne").Rows(RowCounter).Cells(2).ClearContents
Sheets("Inne").Rows(RowCounter).Cells(1).ClearContents
End If
Next
我用这段代码让它工作:
Sub Remove_Duplicates()
Dim C As Range
Dim Endr As Range
Dim Fullr As Range
Set Endr = Range("A1").End(xlDown)
Set Fullr = Range("A1", Endr)
For Each C In Fullr:
If WorksheetFunction.CountIf(Fullr, C.Value) > 1 Then
C.ClearContents
End If
Next
End Sub
因此,如您所见:
Endr
是包含值的“A”列的最后一个单元格。
Fullr
是包含值的“A”列的整个范围。
你 运行 在整个 Fullr
和每个单元格中,计算它的值出现在“A”列中的次数,当它出现多次时,该值得到删除。这样,CountIf()
的值就会减少,直到只剩下一个值。
Sub test()
Dim ThisRow As Long
With Application.WorksheetFunction
'first, check if value from TransferUt.A1 exist in Inne column A
If .CountIf(ThisWorkbook.Worksheets("Inne").Range("A:A"), ThisWorkbook.Worksheets("TransferUt").Range("A1")) > 1 Then
'If it exists then clear only the first occurrence
ThisRow = .Match(ThisWorkbook.Worksheets("TransferUt").Range("A1"), ThisWorkbook.Worksheets("Inne").Range("A:A"), 0)
ThisWorkbook.Worksheets("Inne").Range("A" & ThisRow & ":B" & ThisRow).ClearContents 'delete cell contents
End If
End With
End Sub
代码首先会检查您的目标值是否在 Inne
中存在 重复 并进行计数。如果计数为 0 或 1,则表示它不存在或它是单个值(A 列中没有重复值)。如果计数大于1,则清空Inne
中A、B单元格的内容
请注意,清除内容不会删除该行,它只会将两个单元格留空。
第一次发帖,请耐心等待。:)
我正在尝试找到一种方法来比较 Sheet“TransferUt”单元格 A1 中的值与 sheet“Inne”中的范围 A,我只想清除第一个的内容每次我 运行 宏出现在单元格 A 和 B(Sheet“Inne”)中。 问题是,“Inne”中会有许多重复值和单个值。没关系。
我找到并编辑了以下代码(只有我有问题的那一点),但是当我 运行 它时,它删除了 所有重复的值 “Inne”,A 列,与 Sheet“TransferUt”中的单元格 A1 匹配,我当时只想删除一个。
Dim LastRowInRange As Long, RowCounter As Long
LastRowInRange = Sheets("Inne").Range("A:A").Find("*", , xlFormulas, , xlByRows, xlPrevious).Row
For RowCounter = LastRowInRange To 1 Step -1
If Sheets("Inne").Range("A" & RowCounter) = Sheets("TransferUt").Range("A1") Then
Sheets("Inne").Rows(RowCounter).Cells(2).ClearContents
Sheets("Inne").Rows(RowCounter).Cells(1).ClearContents
End If
Next
我用这段代码让它工作:
Sub Remove_Duplicates()
Dim C As Range
Dim Endr As Range
Dim Fullr As Range
Set Endr = Range("A1").End(xlDown)
Set Fullr = Range("A1", Endr)
For Each C In Fullr:
If WorksheetFunction.CountIf(Fullr, C.Value) > 1 Then
C.ClearContents
End If
Next
End Sub
因此,如您所见:
Endr
是包含值的“A”列的最后一个单元格。
Fullr
是包含值的“A”列的整个范围。
你 运行 在整个 Fullr
和每个单元格中,计算它的值出现在“A”列中的次数,当它出现多次时,该值得到删除。这样,CountIf()
的值就会减少,直到只剩下一个值。
Sub test()
Dim ThisRow As Long
With Application.WorksheetFunction
'first, check if value from TransferUt.A1 exist in Inne column A
If .CountIf(ThisWorkbook.Worksheets("Inne").Range("A:A"), ThisWorkbook.Worksheets("TransferUt").Range("A1")) > 1 Then
'If it exists then clear only the first occurrence
ThisRow = .Match(ThisWorkbook.Worksheets("TransferUt").Range("A1"), ThisWorkbook.Worksheets("Inne").Range("A:A"), 0)
ThisWorkbook.Worksheets("Inne").Range("A" & ThisRow & ":B" & ThisRow).ClearContents 'delete cell contents
End If
End With
End Sub
代码首先会检查您的目标值是否在 Inne
中存在 重复 并进行计数。如果计数为 0 或 1,则表示它不存在或它是单个值(A 列中没有重复值)。如果计数大于1,则清空Inne
请注意,清除内容不会删除该行,它只会将两个单元格留空。