《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).SelectDim 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)NextReDim temvarArr2(1 To UBound(varArr2)) 将B列数据写入动态一维数组For i 1 To UBound(varArr2)temvarArr2(i) varArr2(i, 1)Nextr -1For i 1 To UBound(temvarArr2)Temp Filter(temvarArr1, temvarArr2(i), True)If UBound(Temp) 0 Thenr r 1ReDim Preserve arr(r)arr(r) temvarArr2(i)End IfNextFor i 1 To UBound(temvarArr1)r r 1ReDim Preserve arr(r)arr(r) temvarArr1(i)End IfNext[c:e].ClearContentsRange(C1) 两列数中重复值[c2].Resize(UBound(arr) 1) WorksheetFunction.Transpose(arr)ReDim sparr(0)sparr(0) arr(0)For i 1 To rTemp Filter(sparr, arr(i), True)If UBound(Temp) 0 Thent t 1ReDim Preserve sparr(t)sparr(t) arr(i)End IfNextRange(d1) 排重[d2].Resize(t 1) WorksheetFunction.Transpose(sparr)End Sub代码截图代码讲解1 r -1For i 1 To UBound(temvarArr2)Temp Filter(temvarArr1, temvarArr2(i), True)If UBound(Temp) 0 Thenr r 1ReDim Preserve arr(r)arr(r) temvarArr2(i)End IfNextFor i 1 To UBound(temvarArr1)Temp Filter(temvarArr2, temvarArr1(i), True)If UBound(Temp) 0 Thenr r 1ReDim Preserve arr(r)arr(r) temvarArr1(i)End IfNext上述代码的过程实现了在两个数组中分别查找重复的值并计入一个新的数组。2 ReDim sparr(0)sparr(0) arr(0)For i 1 To rTemp Filter(sparr, arr(i), True)If UBound(Temp) 0 Thent t 1ReDim Preserve sparr(t)sparr(t) arr(i)End IfNext上述代码的过程执行后把新的数组进行了排重。特别注意点a 关于利用数组排重我最近的代码可以作为一个固定的模式来记住。b 关于查找相同值的问题利用Filter 函数的意义不是很大因为这个是模糊查找往往不是我们所需要的所以在利用的时候要注意分清利用的范围。c 数组的建立和转换要留意我的代码。下面看代码的运行结果今日内容回向1 关于数组的Filter 函数 是否理解了呢2 如果在上述的数据中如A列的数据增加一个1会在第三列出现吗会在第四列出现吗我多年的VBA实践经验全部浓缩在以下教程中