gpt4 book ai didi

vba - 创建一个没有重复的新列 VBA?

转载 作者:行者123 更新时间:2023-12-04 19:51:24 24 4
gpt4 key购买 nike

我有一列单元格,其值是这样的:

a
a
b
b
c
c
c
c
d
e
f
f

我希望获取非重复值并将它们粘贴到新列中。我的伪代码如下:

ActiveSheet.Range("a1").End(xlDown).Select
aend = Selection.Row
for acol= 1 to aend
ActiveSheet.Range("b1").End(xlDown).Select
bend = Selection.Row
'if Cells(1,acol).Value <> any of the values in the range Cells(2,1).Value
'to Cells(2,bend).Value, then add the value of Cells(1,acol) to the end of
'column b.

我的逻辑是否合理?我不确定如何对注释部分进行编码。如果这不是最有效的方法,有人可以建议更好的方法吗?非常感谢!

最佳答案

根据您使用的 Excel 版本,您可以使用一些内置的 Excel 功能来获得您想要的内容 - 整个解决方案取决于您的 VBA 技能水平。

Excel 2003:

您可以使用范围的 Advancedfilter 方法 ( documentation ) 获取唯一值并将它们复制到目标区域。示例:

With ActiveSheet
.Range("A1", .Range("A1").End(xlDown)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("B1"), Unique:=True
End With

B1 是您希望将唯一值复制到的列的第一个单元格。这种方法的唯一问题是源列(“A1”)的第一行将被复制到目标区域,即使它是重复的。这是因为 AdvancedFilter 方法假定第一行是标题。

因此,添加一个额外的代码行我们有:

With ActiveSheet    
.Range("A1", .Range("A1").End(xlDown)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("B1"), Unique:=True
.Range("B1").Delete Shift:=xlShiftUp
End With

Excel 2007/2010:

您可以使用与上述相同的方法,或使用 RemoveDuplicates 方法 ( documentation )。这类似于 AdvancedFilter 方法,不同之处在于 RemoveDuplicates 就地工作,这意味着您需要复制源列然后执行过滤,例如:

With ActiveSheet
.Range("A1", .Range("A1").End(xlDown)).Copy Destination:=.Range("B1")
.Range("B1", .Range("B1").End(xlDown)).RemoveDuplicates Columns:=1, Header:=xlNo
End With

最后一个参数 Header 控制是否将源数据的第一个单元格复制到目标(如果设置为 true 则该方法类似于 AdvancedFilter 方法)。

如果您追求“更纯粹”的方法,那么您可以使用 VBA Collectiondictionary - 我相信其他人会为此提供解决方案.

关于vba - 创建一个没有重复的新列 VBA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11835771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com