VBA从2列中删除重复值
我有一个3列的列表 我想删除任何重复的值而不移位,重复的值可以在第一列和第二列上 我该怎么做 我试过一些东西,但没用VBA从2列中删除重复值,vba,excel,Vba,Excel,我有一个3列的列表 我想删除任何重复的值而不移位,重复的值可以在第一列和第二列上 我该怎么做 我试过一些东西,但没用 Sub RemoveDuplicates() Dim rng As Range Dim x As Long Dim lRow As Long Dim i As Integer Columns("B:C").Select Range("C1").Activate Selection.Replace What:="-", Replacement:="", Look
Sub RemoveDuplicates()
Dim rng As Range
Dim x As Long
Dim lRow As Long
Dim i As Integer
Columns("B:C").Select
Range("C1").Activate
Selection.Replace What:="-", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="0", Replacement:="0", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
i = 1
x = 1
Do While Cells(i, 1).Value <> ""
Cells(i, 4) = "=CONCATENATE(0,RC[-2])"
i = i + 1
Loop
Do While Cells(x, 1).Value <> ""
Cells(x, 5) = "=CONCATENATE(0,RC[-2])"
x = x + 1
Loop
Columns("D:E").Select
Application.CutCopyMode = False
Selection.Copy
Range("B1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Columns("D:E").ClearContents
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
With ThisWorkbook.Sheets(1)
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set rng = ThisWorkbook.Sheets(1).Range("B2:C" & lRow)
End With
For x = rng.Cells.Count To 1 Step -1
If WorksheetFunction.CountIf(rng, rng(x)) > 1 Then
rng(x).ClearContents
End If
Next x
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Sub-RemoveDuplicates()
变暗rng As范围
暗x等长
暗淡的光线和长的一样
作为整数的Dim i
列(“B:C”)。选择
范围(“C1”)。激活
选择。替换内容:=“-”,替换:=”,查看:=xlPart_
SearchOrder:=xlByRows,MatchCase:=False,SearchFormat:=False_
ReplaceFormat:=False
选择。替换内容:=“0”,替换:=“0”,查看:=xlPart_
SearchOrder:=xlByRows,MatchCase:=False,SearchFormat:=False_
ReplaceFormat:=False
i=1
x=1
执行While单元格(i,1)。值“”
单元(i,4)=“=串联(0,RC[-2])”
i=i+1
环
执行While单元格(x,1)。值“”
单元(x,5)=“=串联(0,RC[-2])”
x=x+1
环
列(“D:E”)。选择
Application.CutCopyMode=False
选择,复制
范围(“B1”)。选择
Selection.Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
列(“D:E”)。ClearContents
Application.Calculation=xlCalculationManual
Application.ScreenUpdating=False
使用此工作簿。工作表(1)
lRow=.Cells(.Rows.Count,1).End(xlUp).Row
设置rng=ThisWorkbook.Sheets(1)范围(“B2:C”和lRow)
以
对于x=rng.Cells.Count到1步骤-1
如果工作表function.CountIf(rng,rng(x))>1,则
rng(x).ClearContents
如果结束
下一个x
Application.Calculation=xlCalculationAutomatic
Application.ScreenUpdating=True
端接头
在两列分别为B和C的情况下尝试此操作。它循环遍历所有数据,并使用工作表函数COUNTIF
检查每个值是否出现一次以上,如果计数超过1,则清除单元格内容:
Sub RemoveDuplicates()
Dim rng As Range
Dim x as Long
Dim lRow as Long
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
With Thisworkbook.Sheets("SheetName")
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set rng = .Range("B2:C" & lRow)
End With
For x = rng.Cells.Count To 1 Step -1
If WorksheetFunction.CountIf(rng, rng(x)) > 1 Then
rng(x).ClearContents
End If
Next x
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
首先想到的是使用循环遍历每列的每一行,匹配()activecell中的值,如果匹配,则删除并移动到范围内的下一个单元格。您可以将宏添加到工具栏thnx。它的效果很好。但我有一个问题,我用命令ant制作了一个actives bottun,它可以工作,但是当我尝试制作与宏命令相同的代码时,它不工作,调试程序突出显示了行“with ThisWorkbook.Sheets(“Sheet1”)”。seet的名称是“Sheet1”,因此我不明白有什么问题。这很奇怪,您确定名称中没有任何前导/尾随空格,例如“Sheet1”或“Sheet1”?我不确定还有什么问题-如果工作表是工作簿中的第一个工作表,你可以一直使用
这个工作簿。Sheets(1)
。我上传了整个代码,也许问题是elsewhere@bakman您可以在Sheet1中使用代码名,也可以完全限定它的应用程序。Thisworkbook.Worksheets(“Sheet1”)不起作用,当我在activex按钮中使用代码时,它确实起作用,那么,有没有办法将此按钮添加到excel,以便在我打开excel文件时显示它?