Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5501|回复: 10

[已解决]VBA用两种方法多行多列去重

[复制链接]
发表于 2017-10-29 14:42 | 显示全部楼层 |阅读模式
本帖最后由 laoau138 于 2017-11-2 09:53 编辑

VBA用两种方法多行多列去重


最佳答案
2017-11-1 21:32
本帖最后由 sarah_zxx 于 2017-11-1 21:38 编辑
  1. <div class="blockcode"><blockquote>Sub arrff()
  2.     Dim rg As Range, irows As Integer, str As String, brr
  3.     irows = Worksheets("sheet1").Range("a" & Rows.Count).End(xlUp).Row
  4.     For Each rg In Worksheets("sheet1").Range("a1:c" & irows)
  5.         If rg = "" Then GoTo 100
  6.         If InStr(1, str, Trim(rg.Value)) = 0 Then
  7.             str = str & "#" & VBA.Trim(rg.Value)
  8.         End If

  9. 100:
  10.     Next
  11.     Worksheets("sheet1").Columns("E:E").ClearContents
  12.     brr = VBA.Split(Right(str, Len(str) - 1), "#")
  13.     Worksheets("sheet1").Range("e1").Resize(UBound(brr) + 1) = Application.Transpose(brr)
  14.    
  15. End Sub
复制代码


VBA用两种方法多行多列去重.png

VBA用两种方法多行多列去重.rar

12.78 KB, 下载次数: 35

发表于 2017-10-29 20:38 | 显示全部楼层
本帖最后由 fjmxwrs 于 2017-10-29 20:43 编辑

第一个参数,使用绝对引用
  1. Function Replacetwo(Rng1 As Range, n)
  2.     Dim arr, brr, i&, x%, y%, w%
  3.     Dim d As Object
  4.     Set d = CreateObject("scripting.dictionary")
  5.     arr = Rng1.Value
  6.     w = n - 1
  7.     For x = 1 To UBound(arr)
  8.         For y = 1 To UBound(arr, 2)
  9.             If Not d.exists(arr(x, y)) Then
  10.                 i = i + 1
  11.                 d(arr(x, y)) = i
  12.             End If
  13.         Next y
  14.     Next x
  15.     brr = d.keys
  16.     If w >= d.Count Then
  17.         Replacetwo = ""
  18.     Else
  19.         Replacetwo = brr(w)
  20.     End If
  21.     d.RemoveAll
  22.     Erase arr, brr
  23. End Function
复制代码


VBA用两种方法多行多列去重.zip

14.64 KB, 下载次数: 41

评分

参与人数 1 +9 收起 理由
laoau138 + 9 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-10-29 21:29 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2017-10-31 14:21 | 显示全部楼层
还有数组方法没有写
回复

使用道具 举报

发表于 2017-11-1 11:34 | 显示全部楼层
  1. Sub dicff()
  2. Dim rg As Range, irows As Integer, dic As Object
  3.     Set dic = CreateObject("scripting.dictionary")
  4.     irows = Worksheets("sheet1").Range("a" & Rows.Count).End(xlUp).Row
  5.     For Each rg In Worksheets("sheet1").Range("a1:c" & irows)
  6.         If rg = "" Then GoTo 100
  7.         dic(rg.Value) = ""
  8. 100:
  9.     Next
  10.     Worksheets("sheet1").Columns("E:E").ClearContents
  11.     Worksheets("sheet1").Range("e1").Resize(dic.Count) = Application.Transpose(dic.keys)
  12.    
  13. End Sub
复制代码


评分

参与人数 1 +9 收起 理由
laoau138 + 9 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-11-1 14:14 | 显示全部楼层

用数组方法,不要用字典方法,VBA高手
回复

使用道具 举报

发表于 2017-11-1 21:31 | 显示全部楼层
1、字典方法 2、数组方法
回复

使用道具 举报

发表于 2017-11-1 21:32 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sarah_zxx 于 2017-11-1 21:38 编辑
  1. <div class="blockcode"><blockquote>Sub arrff()
  2.     Dim rg As Range, irows As Integer, str As String, brr
  3.     irows = Worksheets("sheet1").Range("a" & Rows.Count).End(xlUp).Row
  4.     For Each rg In Worksheets("sheet1").Range("a1:c" & irows)
  5.         If rg = "" Then GoTo 100
  6.         If InStr(1, str, Trim(rg.Value)) = 0 Then
  7.             str = str & "#" & VBA.Trim(rg.Value)
  8.         End If

  9. 100:
  10.     Next
  11.     Worksheets("sheet1").Columns("E:E").ClearContents
  12.     brr = VBA.Split(Right(str, Len(str) - 1), "#")
  13.     Worksheets("sheet1").Range("e1").Resize(UBound(brr) + 1) = Application.Transpose(brr)
  14.    
  15. End Sub
复制代码


VBA用两种方法多行多列去重.zip

16.36 KB, 下载次数: 61

评分

参与人数 1 +9 收起 理由
laoau138 + 9 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-11-2 09:52 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2017-11-2 09:57 | 显示全部楼层


高手如何做下面几条


VBA只能用数组方法改写   按B列地址拆分工作表  里面有代码


http://www.excelpx.com/thread-434686-1-1.html



VBA用两种方法改写跨表比较 里面有代码

http://www.excelpx.com/thread-434658-1-1.html


用VBA数组第二种方法填充绿色


http://www.excelpx.com/thread-434739-1-1.html



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-28 16:12 , Processed in 0.385142 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表