Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA从2列中删除重复值_Vba_Excel - Fatal编程技术网

VBA从2列中删除重复值

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

我有一个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:="", 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文件时显示它?