excel VBA比较2列并合并/复制

9lowa7mx  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(281)

我是新的VBA,我正在寻找一个简单的VBA代码来比较2行和合并/复制数据,如果有一个不同的工作表。
我想将工作表2中的A列与工作表1中的A列进行比较。
如果A列中的ID等于工作表1中的A列,则使用工作表1中的数据更新B列和C列中的数据。
如果工作表1中的ID在工作表2中不存在,请将A、B、C列添加到工作表2中。
以上有意义吗?
BR还有。

ffx8fchx

ffx8fchx1#

我没有通过此测试所有方案。类似的东西是否适用于您要尝试做的事情?这确实假设了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中有一个类似这样的东西。

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

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

相关问题