我有第一个工作表,其中包含以下一组值
Column A **Sender Name** SAAD MAJID S R AL SAAD IBRAHIM BIN SABTU ATAU ZULKIFLEE BIN ABDUL RAHMAN PUSPA LAL JONES RENJA BAHADUR NEPAL RENJA BAHADUR RANGER RENJA BAHADUR HAMAL PARSHU RAM KARKI
第二个工作表具有以下值
Column A **Sir Names** Jones Ranger Brown Hamal Karki
如果第二张表中提到的姓氏显示为全名的一部分,我想在VBA中使用VLookup来查找和删除第一张工作表中的数据行。
基本上它会留下以下记录。
SAAD MAJID S R AL SAAD IBRAHIM BIN SABTU ATAU ZULKIFLEE BIN ABDUL RAHMAN RENJA BAHADUR NEPAL
我在VBA中编写了以下代码,但是我收到了一个错误。
Dim NameArray() As String
Dim result
Sub vlookupcode()
'Find last row with data in Column A
lastrow = Range("A" & Rows.Count).End(xlUp).row
'Start at bottom and delete rows with errors
For myNA = lastrow To 1 Step -1
'If IsError(Cells(myNA, 1)) Then
tmp = Cells(myNA, 1).Value
'MsgBox tmp
NameArray() = Split(tmp, " ")
For i = LBound(NameArray) To UBound(NameArray)
'MsgBox i & " " & NameArray(i)
result = Application.VLookup(NameArray(i), Sheet2.Range("A2:A6"), 1, False)
If IsError(result) Then
MsgBox "Error"
Cells(myNA, 1).EntireRow.Delete
End If
Next
Next
End Sub
请你帮我解决一下。
答案 0 :(得分:1)
部分匹配的最有效查找可能是通过工作表自己的带有通配符的MATCH function。
Sub del_surname()
Dim rw As Long, ws1 As Worksheet
Set ws1 = Worksheets("Sheet1")
With Worksheets("Sheet2")
For rw = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
If Not IsError(Application.Match(Chr(42) & .Cells(rw, 1) & Chr(42), ws1.Columns(1), 0)) Then
ws1.Rows(Application.Match(Chr(42) & .Cells(rw, 1) & Chr(42), ws1.Columns(1), 0)).EntireRow.Delete
End If
Next rw
End With
End Sub
匹配函数将检索通配符查找找到其目标的行号。如果姓氏始终是字符串中的最后一个单词,则Chr(42) & .Cells(rw, 1) & Chr(42)
可以更改为Chr(42) & .Cells(rw, 1)
。
如果可能存在多个潜在匹配,则需要重复循环或使用Range.Find method和Range.FindNext method的替代方法。