【发布时间】:2019-08-30 02:37:39
【问题描述】:
在我的代码中有一个搜索顺序,如下所示:
它获取 ws.sheet range A 中的每个值(大约 2000 个范围)并在另一个名为 wp.sheet range A 的工作表中查找它(大约 90 个范围)。如果 ws.sheet 范围中的特定值 x,例如 A3 在 wp.sheet 范围 A 中未找到,则工作表 ws.sheet 中的下一个搜索顺序是要搜索的下一个范围 B3(与值 x 相同的行)中的值 y表 wp.sheet 在整个范围 B 中,依此类推。
这就是我的“for”循环所做的事情,我的代码的问题在于,它将 ws.sheet 范围 A1-2000 中的每个值与 wp.sheet 范围 A1-90 中的值进行比较需要很长时间。有没有更快或更有效的替代方法?
Dim wb As Workbook, wq As Object
Dim ws, wi As Worksheet, datDatum
Dim w As Long, I As Long, t As Long
Dim DefaultMsgBox()
Dim r, i As Integer
For r = 2 To 2000
Check = True:
For i = 1 To 90
If ws.Range("A" & r).Value = wp.Sheets("ABC").Range("A" & i).Value Then
wp.Sheets("ABC").Rows(i).Columns("E:AB").Copy
ws.Range("G" & r).PasteSpecial
GoTo NextR
End If
Next i
For i = 1 To 90
If ws.Range("B" & r).Value = wp.Sheets("ABC").Range("B" & i).Value Then
wp.Sheets("ABC").Rows(i).Columns("E:AB").Copy
ws.Range("G" & r).PasteSpecial
GoTo NextR
End If
Next i
For i = 1 To 90
If ws.Range("C" & r).Value = wp.Sheets("ABC").Range("C" & i).Value And ws.Range("D" & r).Value = wp.Sheets("ABC").Range("D" & i).Value Then
wp.Sheets("ABC").Rows(i).Columns("E:AB").Copy
ws.Range("G" & r).PasteSpecial
GoTo NextR
End If
Next i
NextR:
If Not Check = ws.Range("A" & r).Value = wp.Sheets("ABC").Range("A" & i).Value Or Not Check = ws.Range("B" & r).Value = wp.Sheets("ABC").Range("A" & i).Value Or Not Check = ws.Range("C" & r).Value = wp.Sheets("ABC").Range("C" & i).Value And ws.Range("D" & r).Value = wp.Sheets("ABC").Range("D" & i).Value Then
MsgBox "......"
End If
Next r
End sub
【问题讨论】:
-
是否需要在 A 列中 B 列之前搜索该值?列 C 和 D 应该一起检查,还是通过组合条件进行试验?
.Copy是否应该做任何事情,还是与以后的粘贴一起使用? -
非常感谢您的评论。我也添加了粘贴命令。我已经排除了它,因为它没有必要。搜索的顺序是固定的,是有目的的
-
为什么是“下一个 ru”?应该是“下一个我”
-
没错,我已经更正了