用例:我想将数据从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
确保您没有任何受保护的数据,我也遇到了数据透视表的问题,但我认为这可能是权限,感谢您的帮助。
答案 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
此代码可以使用。最后请注意,请确保您没有受保护的数据,或者在运行删除脚本所需的工作表内部的数据透视表。无论出于什么原因导致我的失败,但在没有保护的正确工作表上运行我的脚本工作很棒。