http://club.excelhome.net/thread-888978-2-1.html
以下是楼主的方法1:
Sub 矩形1_Click()i = Range("A65536").End(xlUp).Row
For s = 1 To i
For ss = i To s + 1 Step -1
If Cells(ss, 1) = Cells(s, 1) Then
Cells(ss, 1).Delete shift:=xlUp
End If
Next ss
Next s
End Sub 复制代码
感觉与我常用的数组去重是一样的(我是通过两层循环判断比较,重复的清为空值,但是我的做法中,对于后面遇到的空值会跳过,提高运行效率,楼主的,在最后几个单元格会无意义的跑空……),不过,巧妙的是利用了单元格删除后,后面单元格自动上移一格的特点,在内存数组中相当于是把元素前赶了一个位置,如此,不需要另行清除空值了……
楼主方法二:
Sub 矩形2_Click()i = Range("A65536").End(xlUp).Row
For s = i To 1 Step -1
If Application.WorksheetFunction.CountIf(Range(Cells(1, 1), Cells(s, 1)), Cells(s, 1)) > 1 Then
Cells(s, 1).Delete shift:=xlUp
End If
Next
End Sub 复制代码 函数思维,巧妙利用了单元格删除上移,只需要一个从下往上的单层循环即可,没有跑空……但是每次操作单元格,尤其在循环内部,是效率低的原因吧……
楼主方法三:
Sub 矩形3_Click()i = Range("A65536").End(xlUp).Row
Dim dic As Object, ii&, arr, ra
Set dic = CreateObject("Scripting.Dictionary")
arr = Range("a1:a" & i)
For ii = 1 To UBound(arr)
ra = dic(arr(ii, 1))
Next
Range("a:a").ClearContents
Range("a1").Resize(dic.Count, 1) = Application.Transpose(dic.Keys)
End Sub 复制代码
楼主方法四: Sub 矩形4_Click()
Columns(1).RemoveDuplicates 1
End Sub 复制代码 咋一看,吓一跳,如此简洁,赶紧F1,才稍稍明白了些真相:
“Excel 开发人员参考
Range.RemoveDuplicates 方法
从值区域中删除重复的值。
版本信息
已添加版本: Excel 2007
语法
表达式.RemoveDuplicates(Columns, Header)
表达式 一个代表 Range 对象的变量。
参数
名称 必选/可选 数据类型 说明
Columns 可选 Variant 包含重复信息的列的索引数组。如果没有传递任何内容,则假定所有列都包含重复信息。
Header 可选 XlYesNoGuess 指定第一行是否包含标题信息。xlNo 是默认值;如果希望 Excel 确定标题,则指定 xlGuess。