复制与搜索数据对应的行

Copy rows which corresponds to search data

我的项目在 Sheet1 上有旧信息,我将新数据导入到 Sheet2 上。 A 列(在两张纸上)包含一个 4 位数字。我想要做的是在 Sheet1 上找到与我在 Sheet2 上的新信息具有相同 4 位数字的行(以确保我正在更新正确的信息)并用新条目覆盖旧条目(我也有它突出显示是否有日期更改,但这在这一点上并不重要;日期在 E 列中)。此外,如果 Sheet1 上没有相应的条目,我希望能够在下一个可用行中创建一个新条目。到目前为止,我编写的代码对一行没有问题,但有一些问题让我难以克服:

  1. 当没有匹配项时,Do While 循环将永远 运行。
  2. 我不知道如何循环遍历我想在 Sheet1 上搜索的所有单元格以及我在 Sheet2 上的所有搜索词(我想我必须检查每个单元格的 Sheet1 Col 信息A 对于 Sheet2 上的每个搜索词,但从我在网上看到的所有内容来看,似乎必须有更好的方法,但我太新手了,无法弄清楚)。

代码:

Private Sub DoWork()
    Dim billOr As Range
    Dim billTgt As Range
    Dim tgtCell As Range
    Dim orCell As Range
    Dim compareBill As Integer
    Dim compareDate As Integer
    Dim x As Integer
    Dim i As Integer

    i = 1
    x = 2
    Set billOr = Sheets("Sheet2").Range("A" & i)
    Set billTgt = Sheets("Sheet1").Range("A" & x)
    Set orCell = Sheets("Sheet2").Range("E" & i)
    compareBill = InStr(billOr.Value, billTgt.Value)

    Do While compareBill <> 1
        compareBill = InStr(billOr.Value, billTgt.Value)
        Set billTgt = billTgt.Offset(1, 0)
    Loop

    Set tgtCell = Sheets("Sheet1").Range("E" & x)
    compareDate = InStr(orCell, tgtCell)

    If compareDate = 0 Then
        tgtCell.EntireRow.Value = orCell.EntireRow.Value
        tgtCell.EntireRow.Interior.ColorIndex = 6
    Else
        tgtCell.EntireRow.Value = orCell.EntireRow.Value
    End If
End Sub

任何帮助将不胜感激,即使它只是为我指明了正确的方向。

忽略日期部分:

Private Sub DoWork()

    Dim billOr As Range
    Dim billTgt As Range
    Dim shtDest as Worksheet

    Set billOr = Sheets("Sheet2").Range("A1")
    Set shtDest = Sheets("Sheet1")

    Do While billOr.value <> ""

        Set billTgt = shtDest.columns(1).find(billOr.value, _
                                              lookat:=xlwhole)
        If billTgt Is Nothing Then
            Set billTgt = shtDest.cells(rows.count,1) _
                          .End(xlUp).Offset(1,0)
            Debug.Print "copying new row to " & billTgt.Address()
        End If

        billOr.entirerow.copy billTgt

        Set billOr = billOr.Offset(1,0)
    Loop 

End Sub