Добро пожаловать в StackOverflow.Как правило, вы должны опубликовать некоторый код, который вы пробовали.Тем не менее, у меня есть некоторое время (в аэропорту), поэтому я собрал это вместе с некоторыми комментариями, чтобы помочь вам (и кому-либо еще) понять подход.
При этом используется массив , который не являетсявидно на листе.Это похоже на «вспомогательный столбец», если вы должны были включить Column 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