VBA比较2列和合并/警察

时间:2017-04-03 17:03:17

标签: excel-vba vba excel

我是VBA的新手,我正在寻找一个简单的VBA代码来比较2行并合并/复制数据,如果表中有不同的话。

我想将表2中的Colum A与表1中的Coolum A进行比较。

如果Colum A中的ID等于表1中的Colum A,则使用表1中的数据更新Colum B和C中的数据。

如果工作表2中没有工作表1中的ID,请将工作室A,B,C添加到工作表2中。

上述是否有意义?或

BR 和

1 个答案:

答案 0 :(得分:0)

我没有通过这个测试所有场景。这样的事情是否适用于你想要做的事情?这确实假设Sheet2中出现0或1次ID。此外,假设第1行中有列标题而不是实际数据。

Public Sub CheckSheet2()


    Dim source_sheet As Worksheet
    Set source_sheet = ActiveWorkbook.Worksheets("Sheet1")
    Dim source_last_row As Long
    source_last_row = source_sheet.Range("A" & source_sheet.Rows.Count).End(xlUp).Row

    Dim target_sheet As Worksheet
    Set target_sheet = ActiveWorkbook.Worksheets("Sheet2")
    Dim target_last_row As Long
    target_last_row = target_sheet.Range("A" & target_sheet.Rows.Count).End(xlUp).Row

    Dim source_row As Long
    For source_row = 2 To source_last_row

        Dim source_str As String
        source_str = source_sheet.Range("A" & source_row).Value

        Dim found_value As Range
        Set found_value = target_sheet.Range("A2:A" & target_last_row).Find(source_str)

        If Not found_value Is Nothing Then
            target_sheet.Range(found_value.Address).Offset(0, 1).Value = source_sheet.Range("B" & source_row).Value
            target_sheet.Range(found_value.Address).Offset(0, 2).Value = source_sheet.Range("C" & source_row).Value
        Else
            target_last_row = target_last_row + 1
            target_sheet.Range("A" & target_last_row).Value = source_sheet.Range("A" & source_row).Value
            target_sheet.Range("B" & target_last_row).Value = source_sheet.Range("B" & source_row).Value
            target_sheet.Range("C" & target_last_row).Value = source_sheet.Range("C" & source_row).Value
        End If

    Next source_row

End Sub

您显然需要将Sheet1和Sheet2的值更改为工作表名称。

在我运行程序之前,我在Sheet1中看到了这样的东西。

enter image description here

在运行程序之前,这是在Sheet2中。注意ID 127和128丢失。

enter image description here

这是Sheet2在运行程序后的样子。

enter image description here