Excel: Scalanie wielu wierszy / kolumn na podstawie jednej powtarzanej komórki

-2

Muszę scalić informacje z wielu wierszy i kolumn na podstawie wspólnej wartości dla określonej komórki.

Myślę, że mogę tutaj użyć makra, ponieważ problem polega na tym, że muszę scalić wiele informacji, gdzie dla niektórych wierszy niektóre kolumny są puste, a inne zawierają informacje.

Wartości w komórkach, których muszę użyć do scalenia wierszy, mogą pojawić się więcej niż jeden raz.

Dodaję obraz, na którym widać strukturę dokumentu i część listy powtarzających się wartości w kolumnie „E-mail”. Sprawdzam to za pomocą funkcji WYSZUKAJ.PIONOWO i jest ich około 3000, a arkusz ma około 5000 wierszy.

Przykład 1

wprowadź opis zdjęcia tutaj

Przykład 2

wprowadź opis zdjęcia tutaj

Juan Francisco
źródło
Nie mogę cię w pełni zrozumieć. W każdym rzędzie jest jedna organizacja pozarządowa. W kolumnie Dmasz e-maila i inny e-mail w kolumnie O. Czasami jest tak samo, a czasem inaczej. Na tej podstawie chcesz coś scalić, ale nie wyjaśniasz, co.
jcbermu
Wiem, że moje wyjaśnienie może być mylące, przepraszam! Chcę scalić wszystkie informacje dostępne dla każdej organizacji pozarządowej, gdy zostanie ona powtórzona. W tym celu użyłbym wiadomości e-mail w kolumnie D, ponieważ jest to najbardziej prawdopodobne pole, które jest wspólne, gdy organizacja pozarządowa jest taka sama (nazwa może być nieco inna i być tą samą organizacją pozarządową). Kolumna O pokazuje powtarzające się e-maile, które znalazłam (3000), więc wyjaśnieniem byłoby, że w pliku jest powtórzonych 3000 organizacji pozarządowych. Ponieważ organizacje pozarządowe mogą mieć różne dane w kolumnach w zależności od wiersza, muszę je połączyć! jest teraz jasne?
Juan Francisco
Szukasz zduplikowanych organizacji pozarządowych na podstawie wiadomości e-mail?
Burgi
Tak, i chcę scalić wszystkie informacje dla każdej organizacji pozarządowej w jednym rzędzie
Juan Francisco,

Odpowiedzi:

0

Z VBA / Makrami:

Public Sub myDuplicates()
    Dim wks As Worksheet
    Set wks = ActiveSheet
    emailcolumn = 4
    totalcolumns = 12
    merges = 0
    theSymbol = " / "
    Application.ScreenUpdating = False
    lastRow = wks.Cells(Rows.Count, "A").End(xlUp).Row
    For i = lastRow To 1 Step -1
        email1 = wks.Cells(i, emailcolumn)
        For j = i - 1 To 2 Step -1
            email2 = wks.Cells(j, emailcolumn)
            If LCase(email1) = LCase(email2) Then
                For k = 1 To totalcolumns
                    If LCase(Cells(i, k)) <> LCase(Cells(j, k)) Then
                        Cells(j, k) = Cells(j, k) & theSymbol & Cells(i, k)
                    End If
                Next k
                wks.Rows(i).Delete
                j = 1
                merges = merges + 1
            End If
        Next j
    Next i
    Application.ScreenUpdating = True
    theMessage = MsgBox("Finished with " & merges & " merges", vbInformation)
End Sub

Otwórz VBA / Macros, włóż nowy moduł w ThisWorkbook i wklej ten kod po prawej stronie.

Gdy dwa e-maile są takie same, scala tylko wszystkie różne pola. I użyj, /aby oddzielić je w komórce.

Zakłada, że ​​twoje pole e-mail jest czwartą kolumną. Można go zmienić za pomocą zmiennej, emailcolumna także założyć, że maksymalna kolumna wynosi 12, a także można go łatwo zmienić w zmiennej totalcolumns.

jcbermu
źródło
Dziękuję za pomoc, ale nie zadziałało .. zabierz tylko 200 rzędów (przypuszczalnie weź 3000).
Juan Francisco
Oblicza liczbę wierszy z kolumny A. Linia lastRow = wks.Cells(Rows.Count, "A").End(xlUp).Row.
jcbermu
Oblicza liczbę wierszy z kolumny A. Linia lastRow = wks.Cells(Rows.Count, "A").End(xlUp).Row. Jeśli w kolumnie A jest pusta komórka, zaczyna się od tego momentu. Jeśli znasz liczbę wierszy (na przykład 3000), zamień tę linię na lastRow=3000i powinna działać.
jcbermu