Excel 如何使用VBA查找2列与另2列的匹配?
我试图将A列和B列中的行与D列和E列进行比较。更具体地说,如果A列和B列中的行与D列和E列中的任何行匹配,则会将其复制并粘贴到另一张图纸中 我曾尝试组合匹配、索引、VLOOKUP公式,但到目前为止,我只能检测重复项,无法精确匹配行 以下是我的数据示例: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列中的行复制并粘贴到另一张表中。尝试在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列中的数据不相同,这可能是原因吗?如果是这样的话,有没有办法解决这个问题。非常感谢。