Подредете колони с подобни данни в същия ред с помощта на 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, но ако знаете, покажете опита си за решаване на проблема и след това ни кажете какво не работи и къде точно сте заседнали. В сегашния си вид въпросът ви не е по темата за Stack Overflow. Вижте помощния център за информация.   -  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