Jak połączyć wartości z wielu wierszy w jeden wiersz

1

Mam arkusz kalkulacyjny Excel 2007 z 2250 wierszami i 19 kolumnami. W tych wierszach mogę mieć dwa wiersze zduplikowanych informacji o klientach, które należy połączyć, ale tylko wtedy, gdy komórka powyżej jest pusta. Mogę również mieć wiersze danych klientów, które nie wymagają łączenia. Unikalny numer członka klienta można wykorzystać do identyfikacji wierszy, które należy połączyć. Mam problem z opracowaniem odpowiedniego skryptu VBA, aby połączyć unikalne dane klienta w jednym wierszu (na górze) i usunąć wiersz, który pozostał po połączeniu. Czy ktoś chce pomóc? Zaoszczędzi mi to wiele godzin / dni ręcznego łączenia tych wierszy, a my jesteśmy w trakcie audytu wrażliwego na czas.

Próbka naszych danych:

PIERWSZA NAZWA CZŁONKA CZŁONKOWSKA NAZWA CZŁONEK # MVP SYSTEM DATA WEJŚCIA DATA ZAREJESTRUJ PUNKTY MVP ZGŁOSZENIA ZGŁOSZENIA FORMULARZ? PUNKTY PRAWIDŁOWE? PUNKTY BRAKOWANE PUNKTY KOŃCOWE RYSUNKI WPIS SP Talon # WP Talon # BD DEPT PRACODAWCY UWAGI DLR
Gene S 550061 3/2/2013 0 0 0 # Nie dotyczy                            
Gene S 550061 3/2/2013 1539 137 MC MJ SP
Steve G 550087 3/2/2013 30019 1588 PA NR WP
Curtis S 550128 24.04.2013 5 0 5 # Nie dotyczy                            
Curt S 550128 24.04.2013 358 47 MC MJ SP

Edytuj (nie z OP), aby dodać wersję rozdzielaną potokiem / akapitem z podkreśleniami spacji w nagłówkach:

MEMBER_FIRST_NAME | MEMBER_LAST_NAME | MEMBER_ # | MVP_SYSTEM_ENTRY_DATE | ENROLL_DATE | MVP_POINTS | DRAWING_ENTRIES | ENROLL_FORM |? POINTS_CORRECT |? POINTS_MISSED | FINAL_POINTS | DRAWING_ENTRIES | SP_Talon_ # | WP_Talon_ # | BD | DEPT | pracownika | UWAGI | DLR
Gene | S | 550061 | 03 / 02/2013 || 0 | 0 |||| 0 | # Nie dotyczy |||||||
Gen | S | 550061 || 03/02/2013 |||||||| 1539 | 137 || MC | MJ || SP
Steve | G | 550087 || 03/02/2013 || | 30019 | 1588 || PA | NR || WP
Curtis | S | 550128 | 4/24/2013 || 5 | 0 |||| 5 | # Nie dotyczy |||||||
Curt | S | 550128 || 24.04.2013 |||||||| 358 | 47 || MC | MJ || SP

Marcy
źródło
Mogą istnieć zduplikowane dane w wielu kolumnach, ale naprawdę staram się wypełnić puste komórki danymi, które tam są, używając unikalnego identyfikatora jako numeru # członka, aby uzyskać wszystkie informacje, które mam z dwóch różnych systemów. w jednym rzędzie dla tego jednego klienta. Zazwyczaj robiłem to ręcznie, linia po linii, po kodowaniu kolorami, sortowaniu, a następnie wycinaniu i wklejaniu do jednego wiersza i usuwaniu dodatkowych wierszy. Bolesny!
Marcy,

Odpowiedzi:

0

Nie jestem zbyt pewien udzielonych wyjaśnień, ale i tak tu jest !:

Kluczowa kwestia - w poniższym założeniu zakłada się, że w ramach CZŁONKA # MVP DATA WEJŚCIA DO SYSTEMU będzie zawsze wyświetlana powyżej DATY REJESTRACJI

Dla bezpieczeństwa pracy na kopii i dodać numer indeksu dla każdego wiersza (słownie wstawić ColumnA, umieścić 1w A1, =A1+1w A2i skopiować formułę do Row2250. Kopiuj ColumnAi Wklej specjalnie / wartości w górę.

Wybierz D2, Strona główna> Style - formatowanie warunkowe, Nowa reguła, Użyj formuły, aby określić, które komórki mają zostać sformatowane, Sformatuj wartości tam, gdzie ta formuła jest prawdziwa: wstaw =AND(NOT(ISBLANK(D2)),OR(D1=D2,D2=D3)), Formatuj, Wypełnij, wybierz żółty, OK, OK. W Formatowanie warunkowe - Zarządzaj regułami, w Stosuje się do wprowadzenia =$D$2:$D$2250, Zastosuj. DOBRZE.

Wybierz cały arkusz kalkulacyjny (kliknij trójkąt po lewej stronie A i powyżej 1 w Nagłówkach), Dane> Sortuj i filtruj - Filtr, a dla ColumnDFiltruj według koloru wybierz żółty.

Skopiuj wiersz 1 w dół do ostatniego wiersza numerowanego na niebiesko i wklej do A1innego arkusza (powiedzmy arkusz 2).

W arkuszu 2 usuń F1, przesuń komórki w górę, OK. Również N1:T1. (W tym przypadku może być wymagane dodatkowe oczy).

Dodaj nowy ColumnAdo arkusza 2. Umieścić 1w A1, 2w A2, wybierz A1:A2, chwycić dolną prawym rogu zaznaczenia, trzymać wciśnięty lewy przycisk myszy podczas przeciągania w dół o ile wymagane, a dopiero po naciśnięciu i przytrzymaniu Ctrl.

Wybierz Arkusz2, Dane> Sortuj i filtruj - Sortuj, zaznacz Moje dane mają nagłówki, Sortuj według ColumnA(pierwszy z nich 1!), Sortuj według wartości, Sortuj od najmniejszej do największej, OK.

Uwaga najniższy numer wiersza, który zawiera 2w ColumnAsheet2 oraz liczbę najwyższej okupowanej rzędu. Usuń ColumnA.

Wróć do pierwszego arkusza i usuń wszystkie wiersze zawierające żółte podświetlenie.

W Arkuszu 2 wybierz niższy numer wiersza i wszystkie inne zajęte wiersze z wyższą liczbą kopii i wklej z powrotem do ColumnAdolnej części pierwszego arkusza.

Mam nadzieję, że osiągnie to, czego potrzebujesz - a jeśli nie, to „krok we właściwym kierunku”! Aby to sprawdzić, twój ostatni zajęty rząd powinien teraz wynosić 2250 + 1 minus różnica między dwiema liczbami wymienionymi powyżej.

Aby sprawdzić MEMBER FIRST NAME, sugeruję utworzenie tabeli przeglądowej MEMBER # i tamtej, a następnie porównanie MEMBER FIRST NAME na tej podstawie w arkuszu, którego kopię wykonałeś. Curt lub Curtis to prawdopodobnie wyrok sądu.

orzechy
źródło
0

Oto inne możliwe podejście. To zależy od trzech warunków:

  • Musi być dostępny unikalny identyfikator umożliwiający odróżnienie duplikatu od pól, które nie są duplikatami. W tym przypadku pole MEMBER # służy temu celowi. W innych przypadkach identyfikator może być budowany jako kombinacja wartości w kilku polach. Ten identyfikator może być wartością w jednym polu lub zbiorem wartości w kilku polach.
  • Nie więcej niż dwa duplikaty dowolnego MEMBER #, tj. Brak potrójnych lub więcej wielokrotnych „zduplikowanych” rekordów.
  • Wiersze są sortowane według identyfikatora MEMBER #.

Chodzi o to, aby zbudować przekształconą tabelę, najwygodniej na prawo od istniejącej tabeli, która wykorzystuje formuły do ​​konsolidacji - w jednym wierszu - częściowych danych, które są współużytkowane między dwoma zduplikowanymi wierszami, pozostawiając jeden wypełniony wiersz i jeden pusty rząd.

Po wykonaniu tej czynności można zastosować filtr do tabeli wyników, aby wykluczyć puste wiersze, pozostawiając wypełnione wiersze do skopiowania w inne miejsce.

Jak pokazano poniżej, dodałem pole flagi „DUP” w kolumnie A: Jest równe 1, jeśli MEMBER # w kolumnie C jest równy MEMBER # w poprzednim wierszu, a w przeciwnym razie wynosi 0. Dwa zestawy wierszy w przykładowych danych ze zduplikowanymi numerami MEMBER # są podświetlone na żółto.

zestaw danych z dodanym polem flagi „DUP”

Oto jak wygląda tabela wyników formuł. Zgodnie z oczekiwaniami informacje uzupełniające, które zostały udostępnione między dwoma rekordami, zostały zebrane w jednym z rekordów, pozostawiając drugi rekord wypełniony podwójnymi myślnikami („-”). (Dwa zestawy duplikatów wierszy w przykładowych danych są podświetlone na ciemnoniebiesko w tabeli).

Patrząc na pierwsze dwa wiersze tabeli, w których były zduplikowane wersje dla MEMBER # 550061, drugi „Gen” w wierszu 4 kolumny MEMBER_FIRST_NAME został zastąpiony przez „-”; poprzednio pusta ENROLLMENT_DATE w wierszu 3 jest teraz wypełniona 3/2/2013, przeniesiona w górę z wiersza 4; wartości N / A dla drugiego pola DRAWING_ENTRIES (kolumna M w oryginalnej tabeli, kolumna AS w nowej) zostały zastąpione spacjami.

przekształcona tabela ze zduplikowanymi wierszami oznaczonymi i pustymi

Wystarczy zastosować filtr, użyć kolumny DUP jako kolumny kryterium, wybrać tylko wiersze, w których DUP wynosi 0 - i skopiować wynik do nowej lokalizacji.

przefiltrowany zestaw danych

Formuły stosowane do konsolidacji duplikatów są zasadniczo identyczne pod względem struktury, więc warto je zbadać w całości. Oto pierwsza formuła w tabeli z komórki AH3 dla kolumny MEMBER_FIRST_NAME (dołączam na końcu tego postu pełny zestaw formuł dla pierwszego wiersza tabeli wyników).

=IF($A3=1,                               If this is row 2 of a DUP set,
  "--",                                    Set value of the result cell to "--"
                                         Otherwise it's a row 1 (maybe a dup, maybe not)
  IF($A4=0,                                Is the following row its dup?
    IF(IFERROR(B3="",FALSE),"",B3),          No, set result to the value on this row 
    IF(OR(IFERROR(B3="",FALSE),ISERROR(B3)), Yes, but is this row's value blank or error?
      IF(IFERROR(B4="",FALSE),"",B4),          Yes, use the value from the following row
      IF(IFERROR(B3="",FALSE),"",B3))))        No, use the value from this row

Jeden dodatkowy komentarz do kodu: nieco okrężna lokalizacja IFERROR(<cell address>="",FALSE)jest potrzebna do prawidłowego zignorowania wartości błędów N / A w niektórych wierszach.

Kod pierwszego wiersza tabeli wyników

DUP         =IF(D3=D2,1,0)
FNAME       =IF($A3=1,"--",IF($A4=0,IF(IFERROR(B3="",FALSE),"",B3),IF(OR(IFERROR(B3="",FALSE),ISERROR(B3)),IF(IFERROR(B4="",FALSE),"",B4),IF(IFERROR(B3="",FALSE),"",B3))))
LNAME       =IF($A3=1,"--",IF($A4=0,IF(IFERROR(C3="",FALSE),"",C3),IF(OR(IFERROR(C3="",FALSE),ISERROR(C3)),IF(IFERROR(C4="",FALSE),"",C4),IF(IFERROR(C3="",FALSE),"",C3))))
MEMBER#     =IF($A3=1,"--",IF($A4=0,IF(IFERROR(D3="",FALSE),"",D3),IF(OR(IFERROR(D3="",FALSE),ISERROR(D3)),IF(IFERROR(D4="",FALSE),"",D4),IF(IFERROR(D3="",FALSE),"",D3))))
ENTRY DT    =IF($A3=1,"--",IF($A4=0,IF(IFERROR(E3="",FALSE),"",E3),IF(OR(IFERROR(E3="",FALSE),ISERROR(E3)),IF(IFERROR(E4="",FALSE),"",E4),IF(IFERROR(E3="",FALSE),"",E3))))
ENROL_DT    =IF($A3=1,"--",IF($A4=0,IF(IFERROR(F3="",FALSE),"",F3),IF(OR(IFERROR(F3="",FALSE),ISERROR(F3)),IF(IFERROR(F4="",FALSE),"",F4),IF(IFERROR(F3="",FALSE),"",F3))))
MVP_PTS     =IF($A3=1,"--",IF($A4=0,IF(IFERROR(G3="",FALSE),"",G3),IF(OR(IFERROR(G3="",FALSE),ISERROR(G3)),IF(IFERROR(G4="",FALSE),"",G4),IF(IFERROR(G3="",FALSE),"",G3))))
ENTRIES     =IF($A3=1,"--",IF($A4=0,IF(IFERROR(H3="",FALSE),"",H3),IF(OR(IFERROR(H3="",FALSE),ISERROR(H3)),IF(IFERROR(H4="",FALSE),"",H4),IF(IFERROR(H3="",FALSE),"",H3))))
FORM        =IF($A3=1,"--",IF($A4=0,IF(IFERROR(I3="",FALSE),"",I3),IF(OR(IFERROR(I3="",FALSE),ISERROR(I3)),IF(IFERROR(I4="",FALSE),"",I4),IF(IFERROR(I3="",FALSE),"",I3))))
PTS_CORRECT =IF($A3=1,"--",IF($A4=0,IF(IFERROR(J3="",FALSE),"",J3),IF(OR(IFERROR(J3="",FALSE),ISERROR(J3)),IF(IFERROR(J4="",FALSE),"",J4),IF(IFERROR(J3="",FALSE),"",J3))))
PTS_MISSED  =IF($A3=1,"--",IF($A4=0,IF(IFERROR(K3="",FALSE),"",K3),IF(OR(IFERROR(K3="",FALSE),ISERROR(K3)),IF(IFERROR(K4="",FALSE),"",K4),IF(IFERROR(K3="",FALSE),"",K3))))
FINAL_PTS   =IF($A3=1,"--",IF($A4=0,IF(IFERROR(L3="",FALSE),"",L3),IF(OR(IFERROR(L3="",FALSE),ISERROR(L3)),IF(IFERROR(L4="",FALSE),"",L4),IF(IFERROR(L3="",FALSE),"",L3))))
DR_ENTRIES  =IF($A3=1,"--",IF($A4=0,IF(IFERROR(M3="",FALSE),"",M3),IF(OR(IFERROR(M3="",FALSE),ISERROR(M3)),IF(IFERROR(M4="",FALSE),"",M4),IF(IFERROR(M3="",FALSE),"",M3))))
SP_TALON    =IF($A3=1,"--",IF($A4=0,IF(IFERROR(N3="",FALSE),"",N3),IF(OR(IFERROR(N3="",FALSE),ISERROR(N3)),IF(IFERROR(N4="",FALSE),"",N4),IF(IFERROR(N3="",FALSE),"",N3))))
WP_TALON    =IF($A3=1,"--",IF($A4=0,IF(IFERROR(O3="",FALSE),"",O3),IF(OR(IFERROR(O3="",FALSE),ISERROR(O3)),IF(IFERROR(O4="",FALSE),"",O4),IF(IFERROR(O3="",FALSE),"",O3))))
BD          =IF($A3=1,"--",IF($A4=0,IF(IFERROR(P3="",FALSE),"",P3),IF(OR(IFERROR(P3="",FALSE),ISERROR(P3)),IF(IFERROR(P4="",FALSE),"",P4),IF(IFERROR(P3="",FALSE),"",P3))))
DEPT        =IF($A3=1,"--",IF($A4=0,IF(IFERROR(Q3="",FALSE),"",Q3),IF(OR(IFERROR(Q3="",FALSE),ISERROR(Q3)),IF(IFERROR(Q4="",FALSE),"",Q4),IF(IFERROR(Q3="",FALSE),"",Q3))))
EMPL        =IF($A3=1,"--",IF($A4=0,IF(IFERROR(R3="",FALSE),"",R3),IF(OR(IFERROR(R3="",FALSE),ISERROR(R3)),IF(IFERROR(R4="",FALSE),"",R4),IF(IFERROR(R3="",FALSE),"",R3))))
NOTES       =IF($A3=1,"--",IF($A4=0,IF(IFERROR(S3="",FALSE),"",S3),IF(OR(IFERROR(S3="",FALSE),ISERROR(S3)),IF(IFERROR(S4="",FALSE),"",S4),IF(IFERROR(S3="",FALSE),"",S3))))
DLR         =IF($A3=1,"--",IF($A4=0,IF(IFERROR(T3="",FALSE),"",T3),IF(OR(IFERROR(T3="",FALSE),ISERROR(T3)),IF(IFERROR(T4="",FALSE),"",T4),IF(IFERROR(T3="",FALSE),"",T3))))
chuff
źródło
Tak zrozumiane. Na obecnym etapie ilustruje podejście do rozwiązania zamiast gotowego rozwiązania. Jeśli dodany zestaw danych z potokami jest ostateczny, przerwie łączenie formuł w celu dostosowania do tego zestawu.
chuff