|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 etsnoopy 于 2016-2-10 16:32 编辑
我是菜鸟,正在学习利用数组处理数据
我有两列数据要比较,查找它们的重复项,原来用比较单元格的值的方法可以完成,但用时较长
表格:A列和G列有两列数据待比较, 记录条数不相等. 想将两列中相同的记录输出到E列
现在想用数组完成这个任务,这是我写的代码,
遇到的问题:
1.运行后在E列最后面有公式错误的字样.
2.在if ...then...end if 语句中end if前加入exit for效率加快了一倍,但是漏掉后面一部分没有比较.
请问高手这是什么原因?谢谢指点!!新年快乐!!{:soso__11314250780114501835_4:}
- Sub repeat()
- '利用数组处理数据,提升效率
- '比较A列与G列中的数据,查找重复项
- Dim i, mrow, n, nrow As Long, arr1 As Variant, arr2 As Variant, arr3(), t As Date
- t = Timer '设置计时器
- Columns("C:E").Clear '清除C列到E列的内容
- Columns("g").Copy Columns("C") '复制G列到C列
- nrow = Range("a1").CurrentRegion.Rows.Count '取得A列的最后一行行号
- mrow = Range("C1").CurrentRegion.Rows.Count '取得C列的最后一行行号
- arr1 = Range(Cells(2, 1), Cells(nrow, 1)).Value '将A列的数值赋给数组1
- arr2 = Range(Cells(2, 3), Cells(mrow, 3)).Value '将C列的数值赋给数组2
- ReDim arr3(1 To UBound(arr2), 1 To 1) '动态声明数组3,数组3用于输出找到的值
- For i = 1 To UBound(arr1) '遍历数组1,从第1个元素至最末元素
- For n = 1 To UBound(arr2) '遍历数组2,从第1个元素至最末元素
- If arr1(i, 1) = arr2(n, 1) Then '如果arr1中的第i个元素=arr2中的第n个元素,则
- arr3(n, 1) = arr2(n, 1) '将arr2中的该元素写入arr3第n个元素中
- End If
- Next
- Next
- Range(Cells(2, "e"), Cells(nrow, "e")) = arr3 '将数组3 arr3输出到E列
- Cells(Rows.Count, "I").End(3).Offset(1, 0) = Format(Timer - t, "0.00" & "秒")
- End Sub
复制代码
|
-
-
号码.rar
182.41 KB, 下载次数: 107
比较重复项
|