Excel在100多个工作表标签中定义范围,删除100+表格

时间:2017-02-17 22:08:10

标签: excel vba excel-vba

用例:我想将数据从A列复制到B列(其中A列,B列是任意列)。一旦数据在B列中,我想删除B列中的重复条目。

创建一个循环,将数据从A列移动到B列,然后删除工作簿中每个工作表的重复项。

`Sub Copy()
    For i = 1 To Sheets.Count
        Worksheets(i).Range("A1:A100")
        Destination:=Worksheets(i).Range("B1")
    Next
End Sub
`

为了测试,我将任务分成两个不同的Sub()。 Sub Copy()正在运行并正确复制我的数据。 Sheet1也被命名为" Sheet1"对于我的特定工作簿

`Sub RemoveStuff()
    Dim rng As Range
    For j = 1 To Sheets.Count
        Set rng = Worksheets("Sheet1").Range(Range("B1"),Range("B1").End(xlDown)).Select
        rng.RemoveDuplicates Columns:=(1), Header:=xlGuess
    Next
End Sub
`

我的错误似乎是正确定义范围。每个工作表将具有不同数量的条目以从中删除重复项。 Sheet1可能有50行并减少到6. Sheet2可以有70并减少到3. Sheet3可以有20行并减少到12个唯一身份。 Excel不允许您从范围中删除重复项(B:B!)

如何正确定义我的范围,以便我可以在循环中删除每个工作表的动态定义范围(工作簿中的工作表=制表符)中的重复项?

编辑2-23-17 来自Y0wE3K的新代码

Sub RemoveStuff() Dim ws As Worksheet For Each ws In Worksheets ws.Columns("P:P").RemoveDuplicates,Columns:=1, Header:=xlYes Next End Sub 仍然无效。如果我在运行宏之前手动选择P列,它就可以工作。但它只适用于我选择的一张纸,它似乎不执行循环。绝对不会自动执行每个工作表,也不会提示我每个工作表。 编辑:3/4

确保您没有任何受保护的数据,我也遇到了数据透视表的问题,但我认为这可能是权限,感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您的RemoveStuff子程序可以改写为:

Sub RemoveStuff()
    Dim ws As Worksheet
    For Each ws In Worksheets ' Use Worksheets instead of Sheets, 
                              ' in case there are any Charts
        'You can just select the whole column, rather than selecting
        'specific rows
        ws.Columns("B:B").RemoveDuplicates Columns:=1, Header:=xlGuess
    Next
End Sub

答案 1 :(得分:0)

Sub RemoveStuff()
    Dim ws As Worksheet
    For Each ws In Worksheets
        ws.Columns("P:P").RemoveDuplicates,Columns:=1, Header:=xlYes
    Next
 End Sub

此代码可以使用。最后请注意,请确保您没有受保护的数据,或者在运行删除脚本所需的工作表内部的数据透视表。无论出于什么原因导致我的失败,但在没有保护的正确工作表上运行我的脚本工作很棒。