使用application.match

时间:2017-08-24 12:52:36

标签: excel vba excel-vba

我有以下代码:

Dim i As Long
Dim J As Integer
Dim LastRow As Long
Dim a As Worksheet
Dim b As Worksheet
Set a = Workbooks("500 PRO").Worksheets(1)
Set b = ActiveSheet
LastRow = a.Cells(Rows.Count, "A").End(xlUp).Row

For i = 2 To LastRow
    If Not IsError(Application.Match(a.Cells(i, 2).Value, b.Columns(2), 0)) Then
        Set FindRow = b.Columns(2).Find(a.Cells(i, 2))
            J = FindRow.Row

        If IsEmpty(b.Cells(J, 6)) = True Then
            b.Cells(J, 6).Value = a.Cells(i, 10).Value
        End If

        If IsEmpty(b.Cells(J, 7)) = True Then
            b.Cells(J, 7).Value = a.Cells(i, 14).Value
        End If
    End If
Next i

不幸的是,使用应用程序匹配仅查看列中的第一个数字,而不是完整的数字。

我尝试过类似的事情:

If Not IsError(Application.Find(a.Cells(i, 2).Value, b.Columns(2), 0)) Then

但是同样的问题也是如此。

代码正在比较两个工作表中的值a和b。这些是身份证号码。如果两个ID号匹配,则检查第一个工作表上的两个值是否为空,如果是,则从第二个工作表中获取缺失值。

1 个答案:

答案 0 :(得分:0)

我无法确定,因为您未提供要使用的示例数据,但要成功使用Range.Find,请尝试以下操作:

Dim foundCell As Range

With b.Columns(2)
  For i = 2 To LastRow
    If a.Cells(i, 2) <> "" Then
        Set foundCell = .Find(what:=a.Cells(i, 2), _
                                lookat:=xlWhole, _
                                LookIn:=xlValues, _
                                MatchCase:=False)
            If Not foundCell Is Nothing Then
                '...
                'check for blanks and copy
                '...
            End If
    End If
  Next i
End With