检查一列数据的重复项 vba_提取重复值,但字典不是重点。

本例的问题描述:

1:源数据与提取的结果在同一个工作表里面;

2:提取K、M、O、Q列里面不重复的数据(注意,数据列里面有空白的行);

3:把提取出来的结果放在A2单元格的下方,不能有空白行;

源数据及目标结果如下:

7cd3fbf5bf1c76328f429ce224321884.png

解决的思路详解:

1:由于K、M、O、Q四列不连续,且中间还有数据(在截图的时候,中间的数据删除了,实际运用的时候,是有数据的)还有空白的单元格出现。所以arr = sht.Range("a1").CurrentRegion这种方法就不适用了;

2:获取一列的最后一个非空单元行,再用Range“K1:K100”)类似这样的方式来获取列的区域了;

3:由于四列的不连续,所以循环需要一点小的技巧,详见后续的代码;

4:提取不重复的值,相信看过之前的文章都知道,要用到字典了;

代码运行的结果如下:

94749eedda77d23b96f25de3815c4cea.gif

代码如下:

b65448baba29b16e27472a06dec94dcd.png

Sub test()

Dim arr, col, i, j, dic

Set dic = CreateObject("scripting.dictionary")

col = Split("K m o q")

For i = 0 To UBound(col)

arr = Range(col(i) & "1").Resize(Cells(Rows.Count, col(i)).End(xlUp).Row)

For j = 3 To UBound(arr, 1)

If Len(arr(j, 1)) Then dic(arr(j, 1)) = j

Next j, i

[a2].Resize(dic.Count).ClearContents

[a2].Resize(dic.Count) = Application.Transpose(dic.keys)

End Sub

代码解析

1:2行 定义变量;

2:3行 后期绑定字典;

3:4行 把四列不连续的只放入col数组;

4:5~6行 遍历col数组,获取最后一列的非空单元格之后,与第一列的区域,赋值给arr数组;

5:7行 遍历arr数组;

6:8行 用len判断单元格的类容是否为非空,把不是空的单元格放入字典d;

7:10行 清除指定区域的内容;

8:11行 把结果赋值给指定的区域;

本例思考:

1:本例思维两点,是把不连续的列数据,用循环来提取。

小结:

解决本问题,需要用的知识点:

1:字典的经典运用;

2:split函数

延伸阅读:

Excel VBA 数组公式Split 和Join

Excel VBA 字典的常用方式

Excel VBA 字典入门key和item

Excel VBA 按照要求提取数据,数据及字典法

点击关注可以更方便的查看Excel VBA的案例文章

私信 视频 可以获取54集VBA入门视频

私信 VBA或 vba 可以获取文章中含VBA代码的Excle文件

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值