excel去重复


http://club.excelhome.net/thread-888978-2-1.html


以下是楼主的方法1:

  1. Sub 矩形1_Click()
  2.     i = Range("A65536").End(xlUp).Row
  3.     For s = 1 To i
  4.         For ss = i To s + 1 Step -1
  5.             If Cells(ss, 1) = Cells(s, 1) Then
  6.             Cells(ss, 1).Delete shift:=xlUp
  7.             End If
  8.         Next ss
  9.     Next s
  10. End Sub
复制代码

感觉与我常用的数组去重是一样的(我是通过两层循环判断比较,重复的清为空值,但是我的做法中,对于后面遇到的空值会跳过,提高运行效率,楼主的,在最后几个单元格会无意义的跑空……),不过,巧妙的是利用了单元格删除后,后面单元格自动上移一格的特点,在内存数组中相当于是把元素前赶了一个位置,如此,不需要另行清除空值了……




楼主方法二:

  1. Sub 矩形2_Click()
  2.     i = Range("A65536").End(xlUp).Row
  3.     For s = i To 1 Step -1
  4.         If Application.WorksheetFunction.CountIf(Range(Cells(1, 1), Cells(s, 1)), Cells(s, 1)) > 1 Then
  5.             Cells(s, 1).Delete shift:=xlUp
  6.         End If
  7.     Next
  8. End Sub
复制代码
函数思维,巧妙利用了单元格删除上移,只需要一个从下往上的单层循环即可,没有跑空……但是每次操作单元格,尤其在循环内部,是效率低的原因吧……


楼主方法三:

  1. Sub 矩形3_Click()
  2.     i = Range("A65536").End(xlUp).Row
  3.     Dim dic As Object, ii&, arr, ra
  4.     Set dic = CreateObject("Scripting.Dictionary")
  5.     arr = Range("a1:a" & i)
  6.     For ii = 1 To UBound(arr)
  7.         ra = dic(arr(ii, 1))
  8.     Next
  9.     Range("a:a").ClearContents
  10.     Range("a1").Resize(dic.Count, 1) = Application.Transpose(dic.Keys)
  11. End Sub
复制代码



楼主方法四:
  1. Sub 矩形4_Click()
  2. Columns(1).RemoveDuplicates 1
  3. End Sub
复制代码
咋一看,吓一跳,如此简洁,赶紧F1,才稍稍明白了些真相:
“Excel 开发人员参考
Range.RemoveDuplicates 方法
从值区域中删除重复的值。
版本信息
已添加版本:  Excel 2007

语法

表达式.RemoveDuplicates(Columns, Header)

表达式   一个代表 Range 对象的变量。

参数

名称 必选/可选 数据类型 说明
Columns 可选 Variant 包含重复信息的列的索引数组。如果没有传递任何内容,则假定所有列都包含重复信息。
Header 可选 XlYesNoGuess 指定第一行是否包含标题信息。xlNo 是默认值;如果希望 Excel 确定标题,则指定 xlGuess。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值