excel - 比较两个不同长度的列表
问题描述
我想比较两个不同长度的 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
它给了我一个超出索引的错误,或者按照它读取它的顺序粘贴值(不注意匹配)。
解决方案
如果您不喜欢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
推荐阅读
- sqlite - 运行 sqlite 的 esp32 上的 group by sql 语句上的磁盘 io 错误
- c# - 如何模拟基类的隐藏属性?
- azure-devops - Azure Dev Ops 限制工作项字段,因此评论只读
- javascript - 对象数组,其中一个字段是 React 组件?
- sql - Sql中的子查询
- ssl - SSL 证书和私钥
- flutter - 使用 Flutter 的 CustomPaint,是否可以绘制纯色边缘的透明路径?
- wpf - 将 WPF 打印到 XPS,显示隐藏的控件和视图框外的控件
- javascript - 我的有效载荷中没有数据。如何让它显示在左侧?
- python - 正则表达式搜索和 grep 字符串中第二次出现第一个关键字和第二个关键字之间的所有内容 - Python