Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Excel 如何使用VBA查找2列与另2列的匹配?_Excel_Vba_Match - Fatal编程技术网

Excel 如何使用VBA查找2列与另2列的匹配?

Excel 如何使用VBA查找2列与另2列的匹配?,excel,vba,match,Excel,Vba,Match,我试图将A列和B列中的行与D列和E列进行比较。更具体地说,如果A列和B列中的行与D列和E列中的任何行匹配,则会将其复制并粘贴到另一张图纸中 我曾尝试组合匹配、索引、VLOOKUP公式,但到目前为止,我只能检测重复项,无法精确匹配行 以下是我的数据示例: 如果A列和B列中的行与D列和E列中的任何行相匹配,则会将A列和B列中的行复制并粘贴到另一张表中。尝试在A列和B列中使用“如果”条件。我将其与一些注释拼凑在一起,以帮助您理解该方法 这使用了图纸上未显示的内容。如果要在列F中打开以连接值,则这类似

我试图将A列和B列中的行与D列和E列进行比较。更具体地说,如果A列和B列中的行与D列和E列中的任何行匹配,则会将其复制并粘贴到另一张图纸中

我曾尝试组合匹配、索引、VLOOKUP公式,但到目前为止,我只能检测重复项,无法精确匹配行

以下是我的数据示例:


如果A列和B列中的行与D列和E列中的任何行相匹配,则会将A列和B列中的行复制并粘贴到另一张表中。

尝试在A列和B列中使用“如果”条件。

我将其与一些注释拼凑在一起,以帮助您理解该方法

这使用了图纸上未显示的内容。如果要在
列F
中打开以连接值,则这类似于“帮助器列”。您可以看到如何修改宏在前几行中进行更新的内容/位置(现在它基于您的屏幕截图)

你可以把我作为一个例子,并有工作的选择

Sub TryingToclear2500Points()

Const theFirstColoumns As String = "A:B"
Const theSecondColumns As String = "D:E"
Const theDestinantionComun As String = "A:B"
Dim ws As Worksheet: Set ws = Sheet1 'Worksheet you want to analyse the columns
Dim psheet As Worksheet: Set psheet = Sheet2 'worksheet to paste data to
Dim checkRNG As Range, i As Long


'establishes destination column
     Dim dCOlumn As Long
     dCOlumn = Range(theDestinantionComun).Cells(1, 1).Column


'this is similiar to a helper column in that it makes an 1 dimensional array 
'of the columns concatenated together
    Set checkRNG = Intersect(ws.UsedRange, ws.Range(theSecondColumns))
    With checkRNG
    
    'builds an array to hold the data
    ReDim Makealist(1 To checkRNG.Rows.Count) As String
    For i = 1 To .Rows.Count
    
        'if using excel 2016 or higher TextJoin might be good for more dynamic
        'Makealist(i) = Application.WorksheetFunction.TextJoin("", False, Range(.Cells(i, 1), .Cells(i, .Columns.Count)))
        
        'this will always work if just two columns
        Makealist(i) = .Cells(i, 1).Value2 & .Cells(i, 2).Value2
    
    Next i
    
    End With
    
'now loop through columns A and b and check for a match in the array MakeAList)
                
    Set checkRNG = Intersect(ws.UsedRange, ws.Range(theFirstColoumns))
    
        With checkRNG
        
        For i = 1 To .Rows.Count
        
        
            'check if match
            If Not IsError(Application.Match(.Cells(i, 1).Value2 & .Cells(i, 2).Value2, Makealist, 0)) Then
                'found a match
                
                'using copy paste
                'Range(.Cells(i, 1), .Cells(i, 2)).Copy _
                    psheet.Cells(Rows.Count, dCOlumn).End(xlUp).Offset(1, 0)
    
                'If you just want values, below is a better method that just sends values
                psheet.Cells(Rows.Count, dCOlumn).End(xlUp).Offset(1, 0).Resize(1, 2).Value = _
                    Range(.Cells(i, 1), .Cells(i, 2)).Value2
                
            End If
        Next i

     End With
End Sub

因此,我不清楚您是想使用代码(PGCodeRider的答案非常好)还是手动执行此操作

如果是手动的,您可以将此语句放在C列并复制下来:

=IF(A2&B2=D2&E2,"MATCH","")
如果A列和B列的组合与D列和E列的组合相同,则会添加“匹配”一词(如果不匹配,则将单元格留空)。然后可以在C列上筛选或排序“匹配”并复制行

如果需要,如果A列或B列分别匹配D和E,则将公式更改为

=如果(或(A2=D2,B2=E2),“匹配”,“”)


这假设列中不会有空白条目(如果是这样,则需要使用AND函数扩展公式以忽略空单元格)

您好,很抱歉我的回复太晚了,我刚刚回家。不管怎样,我试着运行代码,但我得到了一个错误,即代码的这一行上的类型不匹配:Makealist(I)=.Cells(I,1)。Value2&.Cells(I,2)。Value2还有什么办法解决这个问题吗?很抱歉,我对VBA很陌生。假设您直接使用该屏幕截图,这可能是因为您在B列中有错误。找到一种方法来消除这些错误,您应该会很好。当错误出现时,还可以通过识别
i
的值来确定它是哪一行。可能是因为它与
N/A
有关,明白了!似乎在运行宏之前,我必须删除数据中的所有N/A。非常感谢。您好,我现在正在处理的主文件上尝试此操作,但在这一行代码上有一个错误:如果不是IsError(Application.Match(.Cells(I,1.Value2&.Cells(I,2.Value2,Makealist,0)),那么我还会再次遇到类型不匹配错误,并且不太确定这一行代码的作用,如果你能解释和帮助我,我将不胜感激。非常感谢。同样在我正在处理的主文件中,A列和B列以及D列和E列中的数据不相同,这可能是原因吗?如果是这样的话,有没有办法解决这个问题。非常感谢。