Как найти строки на двух листах с похожими атрибутами и сопоставить их? - PullRequest
0 голосов
/ 03 октября 2019

Хорошо, вот моя проблема:

У меня есть «похожие пары данных» на двух листах в Excel, и я пытаюсь написать сценарий VBA для сопоставления и скопировать их рядом друг с другом.

Для иллюстрации:

Вкл. Sheet1 У меня есть следующее:

 Column A               Column B
 XYX Slovakia           Apples
 ABC Germany            Oranges
 DEF Germany            Apples
 XXY Slovakia           Oranges

(и так далее для многих стран и многих фруктов)

в Sheet2У меня есть следующее:

 Column A               Column B
 ZZZ Germany            Oranges
 ZZZ Slovakia           Oranges
 ZZZ Slovakia           Apples
 ZZZ Germany            Apples

(и так далее для многих стран и многих фруктов)

Теперь, как мне найти строку в Sheet1, где содержится Column A"Slovakia" и Column B содержит "Apples" и скопируйте его рядом со строкой в ​​Sheet2, где Column A содержит "Slovakia", а Column B содержит "Apples"?

И если это возможно, как можноЯ перебираю, так сказать, все пары данных, а также динамически изменяю значения фруктов и стран для соответствия? (Я бы хотел проверить список стран и фруктов)

Вот мой код, который я написал в качестве теста:

Sub Match()
    crit1 = Sheets("Sheet4").Range("G1").Value
    crit2 = Sheets("Sheet4").Range("F1").Value
    Match = Application.WorksheetFunction.Match(crit1 & crit2, Range("A1:B10"), 0)
    MsgBox Match
End Sub

Мой вопрос довольно сложный, надеюсь, ямог бы объяснить с ясностью. Я очень признателен за помощь!

ОБНОВЛЕНИЕ: вот некоторые пояснения, которые я также объяснил в комментариях:

"Таким образом, трехбуквенные суффиксы (ZZZ и т. Д.) Можно игнорировать, эточтобы показать, что ячейки не содержат точного совпадения строк. Поэтому на Sheet2 у меня есть где-то строка, содержащая слова "Словакия" в ячейке Ax и "Apples" в Bx, тогда мне нужнонайти строку в Sheet1, содержащую "Slovakia" где-то в column A, а также "Apples" в column B рядом с ним. Это было бы совпадение. Имя плода всегда является точно совпадающей строкой. Значения стран и фруктов будут динамически чередоваться на основе мастер-списка "

Ответы [ 2 ]

0 голосов
/ 03 октября 2019
Sub matching()
Dim lastrow As Integer, lastrow2 As Integer, i As Integer
Dim cel As Range, cel2 As Range
i = 2
lastrow = Sheets("sheet1").Range("A" & Rows.Count).End(xlUp).Row
lastrow2 = Sheets("sheet2").Range("A" & Rows.Count).End(xlUp).Row
For Each cel In Sheets("Sheet2").Range("A2:A" & lastrow)
    For Each cel2 In Sheets("Sheet1").Range("A2:A" & lastrow2)
        If "*" & Mid(cel.Value, 5) Like "*" & Mid(cel2.Value, 5) And cel.Offset(, 1).Value = cel2.Offset(, 1).Value Then
            cel.Offset(, 2).Value = cel2.Value
            cel.Offset(, 3).Value = cel2.Offset(, 1).Value
        End If
    Next cel2
Next cel
End Sub

Этот подход находит совпадения на листе 1 и листе 2, а затем проверяет, совпадают ли ячейки рядом с совпадениями. Затем, как указано, скопируйте совпадения листа 1 в столбцы рядом с совпадением на листе 2.

Редактировать: Обновлен цикл, основанный на листе 2, куда идут значения.

0 голосов
/ 03 октября 2019

Попробуйте это:

Sub test()
Dim FirstRow1 As Long, LastRow1 As Long
Dim FirstRow2 As Long, LastRow2 As Long
Dim ws1 As Worksheet, ws2 As Worksheet
Dim i, j As Long

Set ws1 = ThisWorkbook.Worksheets("Sheet1")
Set ws2 = ThisWorkbook.Worksheets("Sheet2")


FirstRow1 = 1
LastRow1 = ws1.UsedRange.SpecialCells(xlCellTypeLastCell).Row
FirstRow2 = 1
LastRow2 = ws2.UsedRange.SpecialCells(xlCellTypeLastCell).Row

For i = FirstRow2 To LastRow2
    For j = FirstRow1 To LastRow1
        If Mid(ws2.Cells(i, 1).Value2, 5, 100) = Mid(ws1.Cells(j, 1).Value2, 5, 100) _
                               And ws2.Cells(i, 2).Value2 = ws1.Cells(i, 2).Value2 Then
            'WHATEVER YOU WANT TO DO
        End If
    Next j
Next i

End Sub

Этот код найдет элементы, в которых совпадают страны и совпадают плоды ... но вы не указываете, что хотите сделать ... поэтому ядержать открытым.

Надеюсь, это поможет

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