【发布时间】:2017-03-24 07:21:52
【问题描述】:
用例:我想将数据从 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
确保您没有任何受保护的数据,我也遇到了数据透视表的问题,但我认为这可能是权限,谢谢您的帮助。
【问题讨论】:
-
从
Set rng = .... .Select中删除.Select -
您的
RemoveStuff循环实际上不会改变每个循环的任何内容。你的意思是选择所有的工作表并在那里设置一个范围吗?您还应该小心,并在Range("B1")之前添加工作表。否则,抓取的范围将只是 ActiveSheet 的范围。 -
你确定
Copy工作正常吗?!?!?! -
在下面@YowE3K 的回答中,复制子缺少
.copy -
@VBAPete ... 和行继续符。