Сравнение двух таблиц данных на разных вкладках в Excel с использованием VBA - PullRequest
0 голосов
/ 14 января 2019

Я относительно новичок в макросах и VBA в Excel, поэтому мне нужно несколько советов о том, как решить мою текущую проблему.

Конечной целью моего проекта является макрокоманда сравнения двух наборов данных, организованных в строки и столбцы (скажем, таблица A является исходными данными, а таблица B основана на вводе пользователем). Каждая строка в таблице B должна соответствовать строке в таблице A, но они могут быть не в порядке, или могут быть неправильные записи в таблице B.

Я думаю, что для первой строки в каждой таблице макрос будет сравнивать каждую ячейку слева направо:

If Sheets("sheet1").Cells(2, 1) = Sheets("sheet2").Cells(2, 1) Then
    If Sheets("sheet1").Cells(2, 2) = Seets("sheet2").Cells(2, 2)

ЭСТ, ЭСТ.

Моя проблема возникает, когда ячейка в таблице B не соответствует таблице A.

Во-первых, я бы хотел, чтобы он проверял строку B 1 на следующую строку в A и продолжал идти по всей таблице A, пока не найдет «полное соответствие» со всеми пятью столбцами соответствия строк.

Я пытался сделать это с остальными, если и Для / Следующие позиции

For row= 2 to 10
'if statements go here
     Else If Sheets("sheet1").Cells(2, 1) <> Sheets("sheet2").Cells(2, 1)
Next row

Возможно, я совершенно не понимаю синтаксис здесь, но мне еще предстоит создать ситуацию, когда, если критерии не выполнены, он переходит к следующей строке.

Если полное совпадение не найдено, следует выделить последнюю ячейку в строке 1 таблицы B, которая не может быть сопоставлена.

Затем , независимо от того, найдено или нет совпадение, мы переходим к строке 2 таблицы B и начинаем весь процесс заново.

Итак, у меня есть логика (я думаю), где сравнение if будет внутри цикла (или чего-то еще), который будет циклически проходить по таблице A строка за строкой. Тогда весь этот процесс будет в другом цикле (или что-то), который будет циклически проходить по таблице B.

В конце процесса либо не будет выделенных ячеек, показывающих, что все введенные данные верны, либо будут выделены ячейки, показывающие данные, которые не совпадают.

Я вполне уверен, что циклический переход по таблице B не является проблемой. Скорее, мне трудно заставить макрос перейти к следующей таблице. Строка, если что-то не совпадает.

Пожалуйста, дайте мне знать, если мне нужно уточнить что-нибудь.

Спасибо!

1 Ответ

0 голосов
/ 14 января 2019

Вы можете попробовать:

Option Explicit

Sub test()

    Dim Lastrow1 As Long, Lastrow2 As Long, i As Long, j As Long
    Dim Str1 As String, Str2 As String

    'Find the last row of sheet 1
    Lastrow1 = Sheet1.Cells(Sheet1.Rows.Count, "A").End(xlUp).Row

    'Find the last row of sheet 2
    Lastrow2 = Sheet2.Cells(Sheet2.Rows.Count, "A").End(xlUp).Row

    For i = 2 To Lastrow1
        'Let us assume that table has 3 columns. Merge 3 columns' values and create a string for each line
        Str1 = Sheet1.Cells(i, 1).Value & "_" & Sheet1.Cells(i, 2).Value & "_" & Sheet1.Cells(i, 3).Value

        For j = 2 To Lastrow2
            'Let us assume that table has 3 columns. Merge 3 columns' values and create a string for each line
            Str2 = Sheet2.Cells(j, 1).Value & "_" & Sheet2.Cells(j, 2).Value & "_" & Sheet2.Cells(j, 3).Value

            'If both strings match a message box will appear
            If Str1 = Str2 Then
                MsgBox "Line " & i & " in table A match with line " & j & " in table B!"
                Exit For
            End If

        Next j

    Next i

End Sub

Структура листа 1:

enter image description here

Структура листа 2:

enter image description here

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