当前位置: 首页 > news >正文

数组与字典解决方案第二十八讲 从两列数据中提取重复数据并排重处理

《VBA数组与字典方案》教程(10144533)是我推出的第三套教程,目前已经是第二版修订了。这套教程定位于中级,字典是VBA的精华,我要求学员必学。7.1.3.9教程和手册掌握后,可以解决大多数工作中遇到的实际问题。

这套字典教程共两册,一共八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:数组与字典解决方案第二十八讲 从两列数据中提取重复数据并排重处理

【分享成果,随喜正能量】绳锯木断,水滴石穿。也许你现在做的事情很小,只要你能日积月累的坚持下去,才会发现意义非凡。所谓的成功,便是别人失败的时候你还在坚持。

第二十八讲 从两列数据中提取重复数据并排重处理

大家好,今日我们继续VBA数组与字典解决方案数组相关知识的讲解,今日我们讲解的是第28讲:如何从两列的数据中提出重复的数据并且做排重处理。这讲的内容和上一讲一样,主要是数组理论的学习,让大家认清什么是数组,什么是动态数组,进而认识数组和工作表结合的的一些操作。

1 代码应用的场景要求及实现的思路分析

如下面截图的内容:

两列数据中有很多重复的数据,我们要提取出重复的数据,然后排重处理。我们先看看解决这个问题的思路:

1) 把两列数据导入数组

2) 把得到的两个数组分别变成一维的数组

3) 在数组1中查询数组2的重复值,计入数组3中

4) 在数组2中查找数组1中的重复值计入数组3中

5) 对数组3进行排重处理。

2 实现应用场景的代码及分析

看代码:

Sub MyNZsz_28() '第28讲 两列数中数组重复的值提取

Sheets("28").Select

Dim temvarArr1(), temvarArr2(), tem(), sparr(), arr()

varArr1 = Range("A1:A" & Range("A1").End(xlDown).Row) '将A列数据写入数组

varArr2 = Range("B1:B" & Range("B1").End(xlDown).Row) '将B列数据写入数组

ReDim temvarArr1(1 To UBound(varArr1)) '将A列数据写入动态一维数组

For i = 1 To UBound(varArr1)

temvarArr1(i) = varArr1(i, 1)

Next

ReDim temvarArr2(1 To UBound(varArr2)) '将B列数据写入动态一维数组

For i = 1 To UBound(varArr2)

temvarArr2(i) = varArr2(i, 1)

Next

r = -1

For i = 1 To UBound(temvarArr2)

Temp = Filter(temvarArr1, temvarArr2(i), True)

If UBound(Temp) >= 0 Then

r = r + 1

ReDim Preserve arr(r)

arr(r) = temvarArr2(i)

End If

Next

For i = 1 To UBound(temvarArr1)

r = r + 1

ReDim Preserve arr(r)

arr(r) = temvarArr1(i)

End If

Next

[c:e].ClearContents

Range("C1") = "两列数中重复值"

[c2].Resize(UBound(arr) + 1) = WorksheetFunction.Transpose(arr)

ReDim sparr(0)

sparr(0) = arr(0)

For i = 1 To r

Temp = Filter(sparr, arr(i), True)

If UBound(Temp) < 0 Then

t = t + 1

ReDim Preserve sparr(t)

sparr(t) = arr(i)

End If

Next

Range("d1") = "排重"

[d2].Resize(t + 1) = WorksheetFunction.Transpose(sparr)

End Sub

代码截图:

代码讲解:

1) r = -1

For i = 1 To UBound(temvarArr2)

Temp = Filter(temvarArr1, temvarArr2(i), True)

If UBound(Temp) >= 0 Then

r = r + 1

ReDim Preserve arr(r)

arr(r) = temvarArr2(i)

End If

Next

For i = 1 To UBound(temvarArr1)

Temp = Filter(temvarArr2, temvarArr1(i), True)

If UBound(Temp) >= 0 Then

r = r + 1

ReDim Preserve arr(r)

arr(r) = temvarArr1(i)

End If

Next

上述代码的过程实现了在两个数组中分别查找重复的值并计入一个新的数组。

2) ReDim sparr(0)

sparr(0) = arr(0)

For i = 1 To r

Temp = Filter(sparr, arr(i), True)

If UBound(Temp) < 0 Then

t = t + 1

ReDim Preserve sparr(t)

sparr(t) = arr(i)

End If

Next

上述代码的过程执行后把新的数组进行了排重。

特别注意点:

a 关于利用数组排重,我最近的代码,可以作为一个固定的模式来记住。

b 关于查找相同值的问题利用Filter 函数的意义不是很大,因为这个是模糊查找,往往不是我们所需要的,所以在利用的时候要注意分清利用的范围。

c 数组的建立和转换要留意我的代码。

下面看代码的运行结果:

今日内容回向:

1 关于数组的Filter 函数 是否理解了呢?

2 如果在上述的数据中,如A列的数据增加一个1,会在第三列出现吗?会在第四列出现吗?

我多年的VBA实践经验,全部浓缩在以下教程中:

http://www.jsqmd.com/news/950564/

相关文章:

  • 2026 北京闲置钻石、钻戒变现指南,亲测这家体验超好 - 奢侈品回收测评
  • 从零开始电路设计:光控夜灯实战与创客电子入门
  • 烟台外墙保温水包砂技术全解析 本土品牌实测案例复盘 - 奔跑123
  • 【JPCS (ISSN:1742-6596)出版 | 汉口学院主办 | EI会议稳检索 | 优秀论文将推荐至期刊】2026年电气自动化、自主系统与智能制造国际学术会议 (EASIM 2026)
  • 从汽车悬架到手机防抖:阻尼振动微分方程在工程中的那些实用案例
  • MATLAB泰森多边形生成工具包:支持自定义边界裁剪与空间点位判定
  • 从Excel发福利到AI动态激励:一家上市企业用117天完成智能福利整合的完整技术迁移日志(含K8s部署失败回滚实录)
  • 2026 年 6 月证券刷题避坑指南:免费高效工具实测全解 - 讲清楚了
  • 2026 GEO 技术实战:从原理到落地,中小企业 AI 获客全栈指南
  • 服务器上百台,SSH逐台装监控到猴年马月?我用Ansible三分钟全部搞定
  • 2026年江西省PMP培训机构哪家好?官方授权R.E.P.报考指南 - 众智商学院课程中心
  • 终极窗口尺寸控制方案:如何强制调整任意Windows窗口大小
  • 苏州全区域上门收名表|收的顶无损验表,报价落地无临时压价 - 奢侈品回收测评
  • 成都儿童防控眼镜怎么配,兴趣班精细用眼太多眼睛扛不住 - 配眼镜新资讯
  • 3分钟掌握ncmdumpGUI:解锁网易云音乐NCM加密文件的智能解决方案
  • 广东geo优化服务商广东谋根文化DeepSeek 大模型深度评测与实战指南
  • 2026年Q2太原本土搬家公司服务深度测评:首推嘉盛祥搬家 - 幸福生活序曲
  • 2026 成都奢侈品回收排行榜:五家实体店深度实测,合规回收门店实力盘点 - 奢侈品回收评测
  • PDF Arranger:零基础也能上手的PDF页面管理神器,像搭积木一样玩转PDF!
  • 深度解析KMS智能激活技术:Windows与Office高效激活的架构设计
  • 大模型入门必看:收藏这 6 个 AI 方向,开启你的 AI 之旅!
  • 哪个医考机构通过率最高?精选历年通过率稳居高位的辅导机构 - 医考机构品牌测评专家
  • 第三阶段Day01【Linux快照、目录结构、基础命令、命令帮助手册】
  • 2026最新 柔性软瓷砖:守护旧城改造老社区的宜居生活底色 - 奔跑123
  • ai辅助开发:描述你的想法,让快马ai生成一个完整的智能聊天应用项目
  • 明星最常穿的F2国风潮鞋清单~
  • 2026年AI编程工具深度评测与选型指南
  • 低查重AI写教材指南!借助AI工具,轻松搞定教材写作!
  • 如何高效部署微信视频号实时弹幕监控系统:完整技术方案
  • 十大医考机构排名出炉!盘点综合实力稳居行业前列的优质医考机构 - 医考机构品牌测评专家