Как отсортировать два набора данных на основе значения одного столбца и переместить несоответствие снизу? - PullRequest
0 голосов
/ 10 июля 2019

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

Так, например, я бы хотел отсортировать следующие данные из столбца B-E по значению в столбце B и столбец G-J по значению в столбце G: Initial Data

Я использовал следующий код для сортировки данных:

With Sheets("Sheet1").Sort
    Range("B2").Sort Key1:=Range("B2"), Order1:=xlAscending
    .Apply
End With

Это оставляет мне следующее: Data after sort

Однако я хочу сравнить совпадения слева направо после сортировки, и поэтому хотел бы, чтобы дополнительные записи, у которых нет совпадений, были бы перемещены вниз. то есть запись с именем Дориан на рисунке 2 появится в нижней части набора данных, так что Сью, Адам и Джейк будут выровнены между двумя наборами данных.

1 Ответ

0 голосов
/ 10 июля 2019

Выполните итерацию по строкам после начальной сортировки, затем выполните сравнение, если значение true, поместит итератор в неиспользуемый столбец.После сортировки всего набора данных по столбцу со значением итератора затем удалите содержимое столбца.

Грубый пример:

dim iter as long
dim lastrow as long
With Sheets("Sheet1")
    with .Sort
         Range("B2").Sort Key1:=Range("B2"), Order1:=xlAscending
         .Apply
    end with
    lastrow = .cells(.rows.count, "A").end(xlup).row
    for iter = 2 to lastrow
        if .cells(iter, "C") = .cells(iter, "H") then
            .cells(iter, "K").value = iter
        end if
    next
    with .sort
        range(.cells(1, 1), .cells(lastrow, "H").sort Key1:=Range("H"), order1:=xlascending
        .apply
    end with
End With

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

...