Использование Excel VBA для поиска точного совпадения нескольких столбцов, а затем объединение / слияние строк - PullRequest
1 голос
/ 30 января 2020

Мне сказали повторно опубликовать это с большим количеством данных и кода, поэтому здесь мы go. Надеюсь, на этот раз это удовлетворительно.

Я пытаюсь взять базу данных Excel и объединить / объединить соответствующие столбцы в одну строку с помощью VBA. Исходные данные будут выглядеть примерно так (в действительности существует гораздо больше точек данных, и я бы совпал по большему количеству столбцов и объединил бы больше строк):

Исходные данные

enter image description here

И превратить его в такой, который выглядит следующим образом:

Объединенные данные

enter image description here

Что мне нужно сделать, так это точно сопоставить столбцы A: E (State, Last, First, Age, Class) и, если они есть, объединить / объединить столбцы F: I (20 ', 19', 18 ', 17' ) в один ряд. Кроме того, я хотел бы удалить информацию из столбцов, которые она объединяет / объединяет (F: I) в одной из строк. Например, с слиянием / объединением Роберта Джонсона; Если вы посмотрите на приведенную выше таблицу, в одной строке содержится вся информация от F: I, но в обеих строках все еще есть вся информация от A: E.

Ближайший, к которому я смог ее получить, работа заключается в использовании кода (который я нашел в другом месте и не создал):

[COLOR=#008000]'Dim 2 search cells[/COLOR]
Dim BlankCell As Range
Dim IdCell As Range

[COLOR=#008000]
'Find Last row and column[/COLOR]

Dim lRow As Long
lRow = Range("A1").End(xlDown).Row
Dim lColumn As Long
lColumn = Range("A1").End(xlToRight).Column

[COLOR=#008000]'Set the area to consider[/COLOR]

Dim Rng As Range
Set Rng = Range(Cells(1, 1), Cells(lRow, lColumn))

[COLOR=#008000] 'Select​ each blank cell in area[/COLOR]

Rng.Select
Selection.SpecialCells(xlCellTypeBlanks).Select

 [COLOR=#008000]'And replace it with appropriate value[/COLOR]
    For Each BlankCell In Selection
             For Each IdCell In Range(Cells(1, 1), Cells(lRow, 1))
                      If (IdCell.Value = Cells(BlankCell.Row, 1).Value And Cells(IdCell.Row, BlankCell.Column) <> "") Then
                        BlankCell = Cells(IdCell.Row, BlankCell.Column).Value
                      End If
             Next IdCell
    Next BlankCell

[COLOR=#008000] 'Then​ erase duplicate lines[/COLOR]
    Rng.Select
    ActiveSheet.Range(Cells(1, 1), Cells(lRow, lColumn)).RemoveDuplicates     Columns:=Array(1, 2, 3, 4, 5, 6), _
    Header:=xlYes

Хотя он не совпадает правильно, потому что вывод выглядит так:

Не совсем верно

enter image description here

Похоже, что он совпадает только в первом столбце, а не в первом 5. Он также не объединяет / удаляет право на данные.

Ценю любую помощь!

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