Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

M Excel 2007 - sortowanie podobnych danych

nanties 01 Dec 2013 03:28 1701 5
  • #1
    nanties
    Level 9  
    Witam,

    Mam dwie kolumny:
    A (imię-nazwisko)
    B (nazwisko)

    chciałbym posortować zawartość kolumny "B" ten sposób, aby nazwiska obok siebie w kolumnie "A" i "B" były tożsame.

    Pozdrawiam
  • #2
    jowyma
    Level 23  
    Chodzi, aby dopasować do siebie kolumny A i B? A co takie dopasowywanie ma zrobić w przypadku, gdy w kolumnie B będą dwa takie same nazwiska pasujące do kolumny A? Ma powielić wpis z kolumny A?
  • #3
    Maciej Gonet
    VBA, Excel specialist
    Dzień dobry,
    Problem na pierwszy rzut oka prosty, ale po głębszej analizie, okazuje się być niejasno sformułowany.
    Pierwsza wątpliwość - czy kolumny A i B zawierają tyle samo danych i dane te można jednoznacznie połączyć?
    Druga wątpliwość - jaki jest format danych w kolumnie A? Czy zawsze jest jedno imię i jednoczłonowe nazwisko i zawsze w tej kolejności? Czy imię i nazwisko są oddzielone spacją (jak bywa zazwyczaj), czy tak jak sugeruje opis - oddzielone myślnikiem (w takim przypadku czy to jest jedyny myślnik w zapisie)?
    Trzecia wątpliwość - czy dane w kolumnie B istotnie mają być posortowane w kolejności określonej przez kolumnę A? Czy chodzi tylko o sprawdzenie czy nazwisko z kolumny A znajduje się wśród nazwisk w kolumnie B? Gdyby dane w kolumnie B miały być posortowane, to po pierwsze lista nazwisk z kolumny A nie mogłaby zawierać duplikatów, po drugie gdyby lista z kolumny B była krótsza niż ta z listy A, po posortowaniu pozycje z obu list nie pasowałyby do siebie, bo lista posortowana nie miałaby pustych pól w miejscach braku odpowiednika z kolumny A.
    Proponuję rozwiązanie, które wydaje mi się najbardziej skuteczne, jeżeli dobrze odgadłem jak te listy mogą wyglądać.
    Przyjąłem założenia:
    1) w kolumnie A jest jedno imię (pierwsze słowo) i jedno nazwisko (drugie słowo) oddzielone separatorem. Separator jest tylko jeden,
    2) w kolumnie C tworzymy pomocniczą kolumnę nazwisk wyodrębnionych z kolumny A,
    3) w kolumnie D sprawdzamy czy nazwisko z kolumny C znajduje się wśród nazwisk z kolumny B. Jeżeli tak, wyświetlamy to nazwisko, jeżeli nie piszemy "brak" lub coś w tym rodzaju. To rozwiązanie ignoruje sytuację, w której w kolumnie A są np. dwie osoby o tym samym nazwisku, a w kolumnie B to nazwisko występuje tylko jeden raz.
    4) kolumny B i C można ukryć pozostawiając tylko A i D.
    Propozycja rozwiązania w załączniku.
  • #4
    jowyma
    Level 23  
    Zakładając, że nazwy arkuszy nie będą zmieniane, w kolumnie A jest wzorzec, a w kolumnie B zawsze najpierw nazwisko, a potem po spacji imię / imiona, oraz że niepasujące nazwiska z pierwszej lub drugiej kolumny nie pojawiają się w wynikach pokazywanych w Arkuszu 2 to by było tak...
  • #5
    adamas_nt
    Moderator of Programming
    Bardziej rozsądne wydaje się rozwiązanie kol Maciej Gonet. Zupełnie nie widzę tu potrzeby stosowania makra ;)

    Wychodząc z założenia: "Co mnie obchodzą nazwiska, których nie ma w A", zmodyfikowałem nieco arkusz. Kolumna pomocnicza C, dwa poziomy sortowania (najpierw B, następnie A), kolor czcionki B:C biały, formatowanie warunkowe.
  • #6
    jowyma
    Level 23  
    A tu wyłapuje nazwiska bez duplikatów (imiona mogą być różne, porównuje tylko nazwiska).
    Jeżeli nazwiska z kolumny A bez pary mają się pokazywać też na dole listy, to należy przesunąć blok "sortowanie" przed blok "znajdowanie w kolumnie A nazwisk bez odpowiedników w B".
    Program nie sortuje też niedopasowanych nazwisk z kolumny B.

    Aby uruchomić program należy mieć widoczną zakładkę Deweloper, kliknąć przycisk makro i wybrać "sortowanie".