Excel精英培训网

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

提取2列不重复值

[复制链接]
发表于 2019-12-24 08:14 | 显示全部楼层 |阅读模式
2学分
求高手写段VBA,需求将Sheet2 A5,H5 2列以下不重复值提取到Sheet1 B2,I2以下。

提取2列不重复值.rar

14.54 KB, 下载次数: 12

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2019-12-24 10:29 | 显示全部楼层
两种方法,数组法和字典法,我给你写个流行的字典法:

Range("b:b").ClearContents      '清除B列和I列
Range("i:i").ClearContents

Dim zd
Set zd = CreateObject("scripting.dictionary")       '创建字典
hs = 2     '写入行数,初始为第2行
For i = 6 To Worksheets("sheet2").[a1000000].End(3).Row    '循环a列所有行
    s = Worksheets("sheet2").Cells(i, 1)
    If Not zd.exists(s) Then                                                   '字典不存在,表示不重复
       Cells(hs, 2) = s                                                           '写入a列
       zd(s) = i                                                                    ‘写入字典,以备后续判断’
       hs = hs + 1                                                               'a列行数+1
    End If
Next i

zd.RemoveAll         '清除字典,以备H列的判断
hs = 2
For i = 6 To Worksheets("sheet2").[h1000000].End(3).Row
    s = Worksheets("sheet2").Cells(i, 8)
    If Not zd.exists(s) Then
       Cells(hs, "i") = s
       zd(s) = i
       hs = hs + 1
    End If
Next i


评分

参与人数 1学分 +2 收起 理由
浮游无木 + 2 非常感谢,还有个问题想请教下,在数据较多.

查看全部评分

回复

使用道具 举报

发表于 2019-12-24 12:57 | 显示全部楼层
回复

使用道具 举报

发表于 2019-12-24 16:38 | 显示全部楼层
1、数组法偶尔比字典法快一点,但大多数情况下都比字典慢,这也是字典比较流行的原因;     在不重复值很少的情况下,数组可能会略快一点,差异也不是很大。我测试过,不重复数超过200,字典更快;
2、如果数据量很大,可以试下sql查询。理论上这是最快的,这不是公认的结论,但我个人认为是这样的;
     你可以上传一个数据量很大的文件我来试验下。你要注意上传文件的最大尺寸,尽可能上传最大限制尺寸的文件;



回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-26 22:59 , Processed in 0.599191 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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