我正在尝试为不匹配的对应值编写一个高效且更快的 VBA 代码,这将:
- 对照 A1:A9000 检查 C 列的每个值
- 如果找到:复制 B 列和 C 列的值并将它们粘贴到找到的单元格值(在 B 列和 C 列中),并删除旧的不匹配条目。
运行 for 循环最终会进行 9000*9000 计算,制作速度非常慢。我是初学者,不知道更快的方法。我知道 .Find 比使用 for 循环快很多。
以下是样本不匹配的数据:
A栏 | B栏 | C栏 |
---|---|---|
XYZ1 | 对 XYZ1 的评论 | XYZ1 |
XYZ3 | 对 XYZ2 的评论 | XYZ2 |
XYZ5 | ||
XYZ6 | 对 XYZ4 的评论 | XYZ4 |
XYZ8 | 对 XYZ5 的评论 | XYZ5 |
XYZ9 |
请注意,B 列和 C 列中的值将始终相互匹配并正确对应。不匹配在A AND B & C之间。
这是期望的结果:
A栏 | B栏 | C栏 |
---|---|---|
XYZ1 | 对 XYZ1 的评论 | XYZ1 |
XYZ3 | ||
XYZ5 | 对 XYZ5 的评论 | XYZ5 |
XYZ6 | ||
XYZ8 | ||
XYZ9 |
请注意,A 列不能更改或更改。
这是我到目前为止所拥有的,但处理代码需要的时间太长了:
Sub Realign()
For i = 2 To 9000
Set Found = Sheets("Sheet1").Range("A:A").Find(What:=Worksheets("Sheet1").Cells(i, 3).Value, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Found Is Nothing Then
Worksheets("Sheet1").Cells(i, 2).Value = ""
Worksheets("Sheet1").Cells(i, 3).Value = ""
Else
Found.Offset(0, 1).Value = Worksheets("Sheet1").Cells(i, 2).Value
Found.Offset(0, 2).Value = Worksheets("Sheet1").Cells(i, 3).Value
End If
Next
Call Delete1
End Sub
Sub Delete1()
For i = 2 To 9000
If Not Worksheets("Sheet1").Cells(i, 3).Value = Worksheets("Sheet1").Cells(i, 1).Value Then
Worksheets("Sheet1").Cells(i, 2).Value = ""
Worksheets("Sheet1").Cells(i, 3).Value = ""
End If
Next
End Sub