|
本帖最后由 czl103 于 2017-8-7 17:04 编辑
详见附件,表1中有些合同编号是表2中没有的,表2中也有一些合同编号是表1中没有的,使用VLookup函数可以得到附件中的结果,问题是我们公司有几十万条的数据,使用函数就行不通了,一开始计算excel就不动了。
烦请大虾们帮忙设计一段VBA代码解决这个问题,不胜感激!
Sub 核对()
arr = Sheets("表2").Range("a2:a" & Sheets("表2").Range("a" & Rows.Count).End(xlUp).Row)
brr = Sheets("表1").Range("a2:a" & Sheets("表1").Range("a" & Rows.Count).End(xlUp).Row)
Set dic2 = CreateObject("scripting.dictionary")
Set dic1 = CreateObject("scripting.dictionary")
For i = 1 To UBound(arr)
dic2(arr(i, 1)) = ""
Next
For i = 1 To UBound(brr)
dic1(brr(i, 1)) = ""
Next
For i = 1 To UBound(arr)
If dic1.exists(arr(i, 1)) Then arr(i, 1) = "表1存在" Else arr(i, 1) = "表1不存在"
Next
For i = 1 To UBound(brr)
If dic2.exists(brr(i, 1)) Then brr(i, 1) = "表2存在" Else brr(i, 1) = "表2不存在"
Next
Sheets("表2").Range("C2:C" & Sheets("表2").Range("a" & Rows.Count).End(xlUp).Row) = arr
Sheets("表1").Range("C2:C" & Sheets("表1").Range("a" & Rows.Count).End(xlUp).Row) = brr
End Sub
本帖最后由 wenzili 于 2017-4-13 08:51 编辑
吸取327718098的函数用法改进,速度稍快些
Public Sub master2()
Dim vaSht1data As Variant
Dim vaSht2data As Variant
Dim vaOutdata() As Variant
Dim i As Long, n As Long
vaSht1data = Intersect(Sheet1.Columns(1), Sheet1.UsedRange)
vaSht2data = Intersect(Sheet2.Columns(1), Sheet2.UsedRange)
ReDim vaOutdata(1 To UBound(vaSht1data, 1), 1 To 1)
For i = 2 To UBound(vaSht1data, 1)
If Application.WorksheetFunction.CountIf(Sheet2.Range("a:a"), vaSht1data(i, 1)) > 0 Then
vaOutdata(i - 1, 1) = "YES"
Else
vaOutdata(i - 1, 1) = "NO"
End If
Next i
Sheet1.Range("c2").Resize(UBound(vaOutdata, 1), 1) = vaOutdata
ReDim vaOutdata(1 To UBound(vaSht2data, 1), 1 To 1)
For i = 2 To UBound(vaSht2data, 1)
If Application.WorksheetFunction.CountIf(Sheet1.Range("a:a"), vaSht2data(i, 1)) > 0 Then
vaOutdata(i - 1, 1) = "YES"
Else
vaOutdata(i - 1, 1) = "NO"
End If
Next i
Sheet2.Range("c2").Resize(UBound(vaOutdata, 1), 1) = vaOutdata
End Sub
|
|