|
本帖最后由 ·遁去的一· 于 2022-11-23 02:04 编辑
自己学着弄了一个2列数据对比并提取指定列的表格,现在有2个问题没法解决,一是返回的数据有重复可以显示但是没法计数,二是返回的提取值怎么设置超链接(点击后直接跳到该单元格,特别是有重复数据的项,一个单无格内可能有几个地址,怎么分别设置),求教高手。Sub 在1找2()
Dim s1, s2, jg1, jg2, jgwz1, jgwz2 '定义比对数据源的位置列变量
Dim s1arr, s2arr, jg1arr, jg2arr, jgwz1arr, jgwz2arr '定义数据源数组和各个行列的变量
Dim row1, row2 '定义总行数
Dim i&, k&, js&, pr& '定义循环计数
Dim dic1 As Object
Dim t
t = Timer
s1 = [b1]
s2 = [b2]
jg1 = [d1]
jg2 = [d2]
jgwz1 = [f1]
jgwz2 = [f2]
row1 = Range(s1 & Rows.Count).End(xlUp).Row
row2 = Range(s2 & Rows.Count).End(xlUp).Row
'清理数据显示区
Range(jgwz1 & ":" & jgwz1).Clear
Range(jgwz2 & ":" & jgwz2).Clear
'将数据源,结果位置分别赋值
'数据源
s1arr = Range(s1 & "2:" & s1 & row1)
s2arr = Range(s2 & "2:" & s2 & row2)
'结果位置
jgwz1arr = Range(jgwz1 & "2:" & jgwz1 & row1)
jgwz2arr = Range(jgwz2 & "2:" & jgwz2 & row2)
'数据2在数据1中有几个相同结果
Set dic1 = CreateObject("scripting.dictionary")
For i = 1 To UBound(s1arr) '循环数据1生成字典
If s1arr(i, 1) <> " " Then
If Not dic1.exists(s1arr(i, 1)) Then
dic1.Add s1arr(i, 1), Range(jg1 & i + 1).Value & Range(jg1 & i + 1).Address
Else
dic1(s1arr(i, 1)) = dic1(s1arr(i, 1)) & "," & Range(jg1 & i + 1).Value & Range(jg1 & i + 1).Address
End If
End If
Next
'数据2在数据1中比较,提取结果到jgwz2
For i = 1 To UBound(s2arr)
If s2arr(i, 1) <> " " Then
If dic1.exists(s2arr(i, 1)) Then
jgwz2arr(i, 1) = dic1(s2arr(i, 1))
End If
End If
Next
Range(jgwz2 & "1").Value = s2 & "比较" & s1 & "返回" & jg1
Range(jgwz2 & "2").Resize(UBound(jgwz2arr), 1) = jgwz2arr
MsgBox "核对完成,共用时" & Timer - t & "秒" & "共核对" & row2 - 1 & "条记录"
Set dic1 = Nothing
Set jgwz2arr = Nothing
End Sub
要达到的效果是在返回单元格内显示有几个返回值,在对应的单元格内点击地址后可以跳转到链接的地方。
|
-
|