首页 > 解决方案 > 比较两个不同长度的列表

问题描述

我想比较两个不同长度的 ID 列表。第一个列表较长并且有值,而第二个列表没有值。

在此处输入图像描述

当 ID 匹配时,它应该将第一个列表中的值粘贴到列表 2 旁边的适当位置。

Sub compareList()

Dim v1, v2, v4, v3()
Dim i As Long
Dim j As Long

v1 = Range("A2", Range("A" & Rows.Count).End(xlUp)).Value
v2 = Range("B2", Range("B" & Rows.Count).End(xlUp)).Value
v4 = Range("D2", Range("D" & Rows.Count).End(xlUp)).Value

ReDim v3(1 To 4)

For i = LBound(v1) To UBound(v1)
    If IsError(Application.Match(v1(i, 1), v4, 0)) Then
        j = j + 1
    Else
        v3(j) = v2(i, 1)
    End If
Next i

Range("E2").Resize(i) = Application.Transpose(v3)

End Sub 

它给了我一个超出索引的错误,或者按照它读取它的顺序粘贴值(不注意匹配)。

标签: excelvbalist-comparison

解决方案


如果您不喜欢Vlookup并且需要一些 VBA 代码,请测试下一个代码:

Sub compareList()
Dim sh As Worksheet, lastR As Long, lastR2 As Long, i As Long, j As Long, arr, arrFin

Set sh = ActiveSheet
 lastR = sh.Range("A" & rows.count).End(xlUp).row
 lastR2 = sh.Range("D" & rows.count).End(xlUp).row
 arr = sh.Range("A2:B" & lastR).Value
 arrFin = sh.Range("D2:E" & lastR2).Value
 
 For i = 1 To UBound(arrFin)
    For j = 1 To UBound(arr)
        If arrFin(i, 1) = arr(j, 1) Then arrFin(i, 2) = arr(j, 2): Exit For
    Next j
 Next i
 sh.Range("D2:E" & lastR2).Value = arrFin
End Sub

推荐阅读