Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 复制与搜索数据对应的行_Vba_Excel - Fatal编程技术网

Vba 复制与搜索数据对应的行

Vba 复制与搜索数据对应的行,vba,excel,Vba,Excel,我的项目在Sheet1上有旧信息,我将新数据导入Sheet2。A列(两张纸上)包含一个4位数字。我要做的是找到Sheet1上与Sheet2上的新信息具有相同4位数字的行(以确保我正在更新正确的信息),并用新信息覆盖旧条目(如果有日期更改,我也会将其高亮显示,但这并不重要;日期在E列中)。此外,如果Sheet1上没有相应的条目,我希望能够在下一行中创建新条目。到目前为止,我编写的代码在一行中没有问题,但有一些问题我无法通过: 当没有匹配项时,Do-While循环将永远运行 我不知道如何循环浏览我想

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

  • 当没有匹配项时,Do-While循环将永远运行
  • 我不知道如何循环浏览我想在Sheet1上搜索的所有单元格以及Sheet2上的所有搜索词(我想我必须检查Sheet1上的每个单元格以及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()
    暗比洛尔射程
    变暗billTgt As范围
    变暗tgtCell As范围
    变暗或小区范围
    Dim compareBill作为整数
    Dim比较为整数
    作为整数的Dim x
    作为整数的Dim i
    i=1
    x=2
    设置billOr=图纸(“图纸2”)。范围(“A”和“i”)
    设置billTgt=板材(“板材1”)。范围(“A”和“x”)
    设置或单元格=图纸(“图纸2”)。范围(“E”和“i”)
    compareBill=InStr(billOr.Value,billTgt.Value)
    边做边比较ll 1
    compareBill=InStr(billOr.Value,billTgt.Value)
    设置billTgt=billTgt.Offset(1,0)
    环
    设置tgtCell=板材(“板材1”)。范围(“E”和“x”)
    比较数据=仪表(orCell,tgtCell)
    如果compareDate=0,则
    tgtCell.EntireRow.Value=orCell.EntireRow.Value
    tgtCell.EntireRow.Interior.ColorIndex=6
    其他的
    tgtCell.EntireRow.Value=orCell.EntireRow.Value
    如果结束
    端接头
    

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

    忽略日期部分:

    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
    
    Private Sub-DoWork()
    暗比洛尔射程
    变暗billTgt As范围
    Dim shtDest作为工作表
    设置billOr=板材(“板材2”)。范围(“A1”)
    Set shtDest=板材(“板材1”)
    当billOr.value“”时执行此操作
    设置billTgt=shtDest.columns(1).find(billOr.value_
    注视:=xlother)
    如果billTgt什么都不是那么
    Set billTgt=shtDest.cells(rows.count,1)_
    .结束(xlUp).偏移量(1,0)
    Debug.Print“将新行复制到”&billTgt.Address()
    如果结束
    billOr.entirerow.copy billTgt
    设置billOr=billOr.偏移(1,0)
    环
    端接头
    
    谢谢。这比我之前的工作方式要好,但它似乎没有从Sheet2(Sheet2上的条目在Sheet1上没有响应单元格)中捕获任何新条目,我想将其添加到Sheet1上的下一行,但我想我可以通过此操作实现。谢谢你的快速回复!对我有效-请确保您在ColA on sheet1中没有任何导致“新”数据复制到现有数据最后一行下方的内容。。。查看我的编辑