Упорядочить столбцы с похожими данными в одну строку с помощью VBA

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

Пример того, чего я пытаюсь достичь:

NAME | AGE|   AREA    
John | 32 | Portsmouth
Will | 32 | Portsmouth
Matt | 28 | Southampton
Dave | 32 | Portsmouth
Phil | 28 | Southampton
Tony | 25 | Winchester

Превратился в:

AGE|   AREA      | Name 1 | Name 2 | Name 3 |
32 | Portsmouth  | John   | Dave   | Will   | 
28 | Southampton | Matt   | Phil   |        |
25 | Winchester  | Tony   |        |        |

РЕДАКТИРОВАТЬ: мне удалось собрать воедино то, что мне нужно, однако кажется, что неповторяющиеся данные помещаются в один и тот же столбец, в отличие от моего предпочтительного Name 1 | Name 2 | Name 3 есть мысли об обновлении этого для заполнения отдельных ячеек, а не одного и того же?

Вот обновление:

Sub mergeCategoryValues()
    Dim lngRow As Long

    With ActiveSheet
        Dim columnToMatch As Integer: columnToMatch = 2
        Dim columnToConcatenate As Integer: columnToConcatenate = 1

        lngRow = .Cells(65536, columnToMatch).End(xlUp).Row
        .Cells(columnToMatch).CurrentRegion.Sort key1:=.Cells(columnToMatch), Header:=xlYes

        Do
            If .Cells(lngRow, columnToMatch) = .Cells(lngRow - 1, columnToMatch) Then
                .Cells(lngRow - 1, columnToConcatenate) = .Cells(lngRow - 1, columnToConcatenate) & "; " & .Cells(lngRow, columnToConcatenate)
            .Rows(lngRow).Delete
            End If

            lngRow = lngRow - 1
        Loop Until lngRow = 1
    End With
End Sub

person Giles    schedule 18.03.2014    source источник
comment
Никто не будет писать код за вас, поэтому мне непонятно, о чем вы спрашиваете, говоря point me in the right direction. Что считается right direction в этом случае? Вы можете нанять фрилансера, если не знаете VBA, но если знаете, покажите свою попытку решить проблему, а затем расскажите нам, что не сработало и где именно вы застряли. В нынешнем виде ваш вопрос не относится к теме переполнения стека. Дополнительную информацию см. в справочном центре.   -  person    schedule 18.03.2014
comment
Приношу свои извинения за путаницу, но под правильным направлением я не подразумевал, что кто-то выполнит работу за меня. Просто укажите мне на некоторые места для исследования или некоторые функции для изучения, чтобы я мог написать свой собственный код. Хотя я не утверждаю, что знаю VBA, в конце концов я могу найти способ обойти большинство решений.   -  person Giles    schedule 18.03.2014
comment
Вопросы, в которых нас просят порекомендовать или найти инструмент, библиотеку или любимый сторонний ресурс, не относятся к теме Stack Overflow, поскольку они, как правило, привлекают самоуверенные ответы и спам. Вместо этого опишите проблему и то, что уже было сделано для ее решения.   -  person    schedule 18.03.2014
comment
Спасибо, что сообщили мне, после некоторого копания и накопления я обновил вопрос, чтобы он казался немного более подходящим.   -  person Giles    schedule 18.03.2014


Ответы (1)


Когда вы делаете это:

If .Cells(lngRow, columnToMatch) = .Cells(lngRow - 1, columnToMatch) Then

Вы рассчитываете войти в состояние? Если lngRow установлен ранее (в вашем случае 7), а columnToMatch равен 1, если ячейки (7,1) и (6,1) не имеют одинаковой информации, это ничего не сделает.

person andrescpacheco    schedule 18.03.2014
comment
Извините, я взял часть кода из Интернета и забыл обновить его, чтобы он соответствовал моему вопросу. Теперь я изменил значение columnToMatch на правильный столбец. - person Giles; 18.03.2014
comment
Как бы вы удалили разделитель "; " и вместо этого поместили объединенные данные в отдельные столбцы? - person Giles; 18.03.2014
comment
@Giles, вы можете сделать что-то вроде этого: stackoverflow.com/questions/9194277/ - person andrescpacheco; 18.03.2014