Как использовать VBA для поиска совпадения с 2 столбцами с еще 2 столбцами? - PullRequest
0 голосов
/ 22 июня 2019

Я пытаюсь сравнить строки в столбцах A и B со столбцами D и E. Более конкретно, строки в столбцах A и B будут скопированы и вставлены в другой лист, если он соответствует какой-либо из строк в столбцахD и E.

Я пытался комбинировать формулы MATCH, INDEX, VLOOKUP, но до сих пор мне удавалось только обнаружить дубликаты и не точно соответствовать строкам.

Вот пример моегоданные:

enter image description here

Строки в столбцах A и B будут скопированы и вставлены в другой лист, если он соответствует какой-либо из строк в столбцах D и E.

Ответы [ 3 ]

0 голосов
/ 22 июня 2019

Добро пожаловать в 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
0 голосов
/ 23 июня 2019

Так что мне было непонятно, хотите ли вы сделать это с помощью кода (в котором ответ PGCodeRider превосходен) или вручную.

Если это руководство, вы можете просто вставить это утверждение вСтолбец C и скопируйте его вниз:

=IF(A2&B2=D2&E2,"MATCH","")

Это добавит слово «MATCH», если объединенные столбцы A и B совпадают с объединенными столбцами D и E (и оставит ячейку пустой, если нематч).Затем вы можете отфильтровать или отсортировать по столбцу C для «MATCH» и скопировать строки.

Если вы хотите, чтобы, если столбец A ИЛИ столбец B соответствовали D и E соответственно, измените формулу на

= ЕСЛИ (ИЛИ (A2 = D2, B2 = E2), "MATCH", "")

Это предполагает, что у вас не будет пустых записей в столбцах (если вам нужно расширитьформула игнорирования пустых ячеек с использованием функции AND).

0 голосов
/ 22 июня 2019

Попробуйте использовать условие «IF» для столбцов A и B

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...