Excel定义100多个工作表选项卡的范围,删除100列以上的列中的重复项

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

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

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

为了testing,我将任务分成两个不同的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行,并减less到6. Sheet2可以有70,减less到3. Sheet3可以有20行,减less到12个唯一。 Excel不允许从范围中删除重复项(B:B!)

我怎样才能正确定义我的范围,以便我可以删除循环中的每个工作表的dynamic定义的范围(表=工作簿中的标签)重复?

编辑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 仍然不起作用。 如果我在运行macros之前手动select列P,它将起作用。 但它只适用于我select的一张纸,似乎没有执行循环。 绝对不会自动做每张纸,或提示我为每一个。 编辑:3/4

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

您的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 
 Sub RemoveStuff() Dim ws As Worksheet For Each ws In Worksheets ws.Columns("P:P").RemoveDuplicates,Columns:=1, Header:=xlYes Next End Sub 

此代码将工作。 作为最后一点,请确保您没有受保护的数据,或者在需要运行删除脚本的工作表内透视表。 无论什么原因导致我的失败,但是在没有保护的正确表格上运行我的脚本的工作非常棒。