Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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 - Fatal编程技术网

VBA检查一列中的值是否存在于另一列中,如果存在,则传输相关数据

VBA检查一列中的值是否存在于另一列中,如果存在,则传输相关数据,vba,Vba,我的代码(如下)在一定程度上完成了这项工作。我的问题是,如何获取列B、C和D中的数据,以匹配到Tab1的传输 此时,代码查看Tab0中A列中的值,然后检查它们是否存在于tab1的A列中,如果没有,则将它们添加到底部 我当前的代码: Sub MovenMatch() Dim varfirst1 As Range, varsecond2 As Range Dim n&, m& Dim first1 As Range, second2 As Range Dim rowCount1&

我的代码(如下)在一定程度上完成了这项工作。我的问题是,如何获取列B、C和D中的数据,以匹配到Tab1的传输

此时,代码查看Tab0中A列中的值,然后检查它们是否存在于tab1的A列中,如果没有,则将它们添加到底部

我当前的代码:

Sub MovenMatch()

Dim varfirst1 As Range, varsecond2 As Range
Dim n&, m&
Dim first1 As Range, second2 As Range
Dim rowCount1&, rowCount2&
Dim mFlag As Boolean

rowCount1 = Sheets("Tab0").Cells(Sheets("Tab0").Rows.Count, "A").End(xlUp).Row
rowCount2 = Sheets("Tab1").Cells(Sheets("Tab1").Rows.Count, "A").End(xlUp).Row

Set varfirst1 = Sheets("Tab0").Range("A2:A" & rowCount1)
Set varsecond2 = Sheets("Tab1").Range("A2:A" & rowCount2)
m = rowCount2 + 1

For Each first1 In varfirst1
    mFlag = False
    For Each second2 In varsecond2
        If CStr(first1) = CStr(second2) Then
            mFlag = True
            Exit For
        End If
    Next second2

    If mFlag = False Then
        Sheets("Tab1").Range("A" & m).Value = first1
“我的假设是,修复程序应该出现在这里,替换
“xyz”

    Sheets("Tab1").Range("B" & m).Value = "xyz"


    m = m + 1
End If

Next first1
End Sub

集合是匹配唯一标识符的理想选择。我的代码将单元格引用与唯一ID一起存储,以简化任务

Sub MovenMatch2()
    Dim cell As Range, dict As Object
    Set dict = CreateObject("Scripting.Dictionary")

    With ThisWorkbook.Worksheets("Tab1")
        For Each cell In .Range("A2", .Range("A" & .Rows.count).End(xlUp))
            Set dict(cell.Value) = cell
        Next
    End With

    With ThisWorkbook.Worksheets("Tab0")
        For Each cell In .Range("A2", .Range("A" & .Rows.count).End(xlUp))
            If dict.Exists(cell.Value) Then
                dict(cell.Value).Resize(1, 4).Value = cell.Resize(1, 4).Value
            Else
                With ThisWorkbook.Worksheets("Tab1")
                    .Range("A" & .Rows.count).End(xlUp).Offset(1).Resize(1, 4).Value = cell.Resize(1, 4).Value
                End With
            End If
        Next
    End With

End Sub