Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Excel: Sortowanie od prawej strony komórki

09 Sie 2010 11:49 4307 18
  • Poziom 8  
    Witam! Mam taki nietypowy problem, mam sporą listę użytkowników, którą muszę posortować. Po wklejeniu do Excel 2007 wygląda to np. tak:

    DaneJanKowalskiAWarszawaLPG1
    DaneJanKowalskiBWarszawaLPG1
    DaneJanKowalskiCWarszawaLPG2
    DaneJanKowalskiDWarszawaLPG2
    DaneJanKowalskiEWarszawaLPG3
    DaneJanKowalskiFWarszawaLPG3
    DaneJanKowalskiGWarszawaLPG4
    DaneJanKowalskiHWarszawaLPG4

    Potrzebuje posortować w ten sposób:

    DaneJanKowalskiAWarszawaLPG1
    DaneJanKowalskiCWarszawaLPG2
    DaneJanKowalskiEWarszawaLPG3
    DaneJanKowalskiGWarszawaLPG4
    DaneJanKowalskiBWarszawaLPG1
    DaneJanKowalskiDWarszawaLPG2
    DaneJanKowalskiFWarszawaLPG3
    DaneJanKowalskiHWarszawaLPG4

    Jest możliwość takiego sortowania? Jak jest kilka użytkowników to robię to ręcznie, ale czasem plik zawiera po kilkaset pozycji to zajmuje mi to sporo czasu...
  • Pomocny post
    Moderator Programowanie
    Jeżeli jakiś fragment jest stały, tzn występuje w każdym wierszu Np miejscowość oraz ilość cyfr na końcu zawsze będzie od 1-4, to rozwiązanie jest stosunkowo łatwe.
    W innym przypadku należy rozważyć utworzenie listy pomocniczej nazwisk lub miejscowości. Jeśli ich występowanie nie jest zupełnie przypadkowe, to też byłaby możliwość posortowania wykorzystując kolumny pomocnicze lub VBA. Jeśli są przypadkowe, to w pierwszej kolejności należałoby utworzyć listę unikatowych itd... Zawsze znajdzie się jakieś rozwiązanie.
    Tlen02 napisał:
    ale czasem plik zawiera po kilkaset pozycji
    I gdzieś zabraknie liter alfabetu. Napisz więcej szczegółów lub załącz (wskazane) przykładowy plik...
  • Poziom 28  
    Moim zdaniem to tutaj występuje przenoszenie co drugiej z posortowanych komórek a nie samo sortowanie.
  • Poziom 8  
    Do excela wprowadzam takie dane:
    Pogrubione - zmienne dane, bez pogrubienia - stałe dane:
    JanKowalski1995SkodaFavoritLPG1
    JanKowalski1996SkodaFavoritLPG1
    JanKowalski1998SkodaFavoritLPG2
    JanKowalski1991SkodaFavoritLPG2

    Sortowanie ma się odbywać tylko na podstawie ostatniej zmiennej czyli w tym przykładzie 1 i 2.

    Mam otrzymać coś takiego (nie jest ważna kolejność rocznika, ważna jest aby wszystkie ostatnie cyfry szły po kolei (1,2,1,2 a nie 1,1,2,2):
    JanKowalski1995SkodaFavoritLPG1
    JanKowalski1991SkodaFavoritLPG2
    JanKowalski1996SkodaFavoritLPG1
    JanKowalski1998SkodaFavoritLPG2

    Przykładowy plik z większą ilością danych zamieszczam w załączniku.
  • Moderator Programowanie
    Proszę o podpowiedź:
    Dlaczego w przykładowym pliku:
    -dane z wiersza 12 znalazły się w 28?
    -dane z wiersza 13 znalazły się w 24?
  • Poziom 8  
    Tak je akurat skopiowałem, kolejność jest dowolna. Nie jest istotna ta kolejność o którą pytasz, byle tylko efekt końcowy był taki jak w przykładzie (końcówki 1,2,3,4,1,2,3,4,...).
  • Poziom 28  
    W dalszym ciągu nie rozumiem zasady pomysłu naszego kolegi. A w tej chwili nawet sortowaniem tego nie nazwę. Sortowanie według np. Wiki
    Cytat:
    Polega na uporządkowaniu zbioru danych względem pewnych cech charakterystycznych każdego elementu tego zbioru.

    Podaj proszę według której cechy ma to być uporządkowane? Patrząc na dane w pliku nasuwa mi się pomysł podzielenia wprowadzonych danych na grupy zgodnie z ostatnim/i znakiem/ami i kopiowaniu w pętli kolejno po jednej pozycji z każdej grupy.
    Oczywiście do podziału posortowałbym sobie te dane np. rosnąco po ostatnim/ch znaku/ach co nie jest problemem wyłuszczając je sobie do kolumny pomocniczej formułką np. PRAWY().
  • Poziom 8  
    Być może faktycznie to już nie jest sortowanie, może być to jakikolwiek sposób, np. "w pętli kolejno po jednej pozycji z każdej grupy" byłoby chyba dobrym rozwiązaniem, tylko jak to zrobić? Funkcja "PRAWY()" nic nie pomogła...


    Edit: Wpadłem na taki sposób, wklejam wszystko poziomo (transpozycja) i czy da się teraz zrobić tak, żeby szło to poziomami? Np.
    Wklejam tak:
    1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4
    Chcę otrzymać tak:
    1 1 1 1
    2 2 2 2
    3 3 3 3
    4 4 4 4
    I już by mnie to zadowoliło w 100%.
  • Pomocny post
    Poziom 28  
    Z formułą PRAWY() chodziło mi o to, że nie zawsze (?) dane muszą być wprowadzane w takiej kolejności jak podałeś w pliku. Zastosowanie tej formuły w dodatkowej kolumnie np. F, ustalenie ilości znaków na np. 1 pozwoli i posortowanie arkusza wg tej kolumny pozwoli Ci na uzyskanie danych w takiej kolejności, że będzie je łatwiej podzielić. Z transpozycją to ciekawe rozwiązanie. Możesz z niej skorzystać.
  • Poziom 8  
    Łatwiej i szybciej będzie mi z transpozycją. Jeszcze ponawiam pytanie czy można z tak:
    1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4
    otrzymać tak:
    1 1 1 1
    2 2 2 2
    3 3 3 3
    4 4 4 4
    jakimś sposobem?
  • Pomocny post
    Moderator Programowanie
    Tlen02 napisał:
    Wpadłem na taki sposób, wklejam wszystko poziomo (transpozycja) i czy da się teraz zrobić tak, żeby szło to poziomami? Np.
    Wklejam tak:
    1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4
    Chcę otrzymać tak:
    1 1 1 1
    2 2 2 2
    3 3 3 3
    4 4 4 4
    I już by mnie to zadowoliło w 100%.

    Poziomo czy pionowo zdaje się, że to dalej będzie przekładaniec... W załączniku moje próby i pod przyciskiem niezastąpione w takich sytuacjach makro.
  • Poziom 28  
    Można. Najłatwiej w VBA. Aktywujesz pierwszą komórkę wiersza (zakładam, że w przykładzie jest to pierwsza kolumna). Stosujesz pętlę
    Code:

    Do While {ostatni znak = np.1 }
    ...
    kolumna = kolumna + 1
    Loop

    zaznaczasz zakres od pierwszej kolumny do kolumny o numerze określonym przez "kolumna" z powyższego kodu. Kopiujesz i wklejasz w odpowiednim wierszu.
    Powyższe operacje powtarzasz dla każdej końcówki i wklejanie realizujesz dodając za każdym razem do numeru wiersza 1.
  • Poziom 8  
    adamas_nt testowałem właśnie ten twój plik i nie działa to jak należy. Teraz miałem bazę gdzie było [1,2,3,4,5,6,7,8,9,10,11,12,13,14] x 9. Sortowanie wyszło na zasadzie 1,4,7,11,1,4,7,11,1,4,8,12...

    Tak prościej: Gdy jest tylko 5 końcówek [1,2,3,4,5] działa wszystko dobrze. Natomiast jak już załadowałem 14 końcówek [1,2,3,4,5,6,7,8,9,10,11,12,13,14] to nie działa, jak ma działać. Coś trzeba pewnie zmienić (z 5 na 14), tylko co? Bo ja się nie znam zbyt zaawansowanie na Excelu... Jakbyś mi to wytłumaczył co mam zmieniać to byłoby super.

    walek33 na VBA się nie znam w ogóle...
  • Pomocny post
    Poziom 40  
    Wprowadziłem kolumnę pomocniczą wg której należy posortować tekst.

    W komórce z ramką należy podać ilość zmiennych

    Oczywiście po posortowaniu kolumnę tą należy ukryć gdyż już nie spełnia swojego zadania.

    Wszystko można np. nagrać pod makro

    Od razu mówię o ograniczeniu: Ograniczeniem jest liczba "zmiennych" do 9

    Chodzi o funkcję = prawy(A2;1)

    Można zrobić za pomocą szukaj.tekst i fragment.tekstu by pobierało ostatnie dwie cyfry. Jednak nie wiem jak przebiegałoby wstępne sortowanie gdyż przy zwykłym sortowaniu ...LPG10 jest ustawiane zaraz po ...LPG1 a nie po LPG9.
    A wtedy ten "ustawiacz liczby porządkowej" zawodzi.

    Aczkolwiek jak naprawdę autorowi na tym zależy to można dodać jeszcze jeden warunek gdy jest liczba dwucyfrowa który będzie wyliczał i dla nich kolejność.
  • Poziom 8  
    Dzięki wszystkim za pomoc. Dzisiaj testowałem w pracy ten arkusz od marek003 i okazał się bardzo pomocny. Dla marek003 szczególne thx ;)

    Jeszcze mam takie pytanie, czy dało by się przerobić ten arkusz, aby odróżniał do 100 a nie do 10 sortował? Chyba, że to jest dużo pracy to sobie poradzę już manualnie z większymi danymi.
  • Pomocny post
    Poziom 40  
    Tlen02 napisał:
    Jeszcze mam takie pytanie, czy dało by się przerobić ten arkusz, aby odróżniał do 100 a nie do 10 sortował?


    Myślę że i to się da zrobić ale

    Jak masz wcześniej posortowane dane (przed tym dziwnym sortowaniem)? gdzie znajduje się 10? po 1 czy po 9

    czy tak :

    Code:
    1
    
    1
    2
    2
    ...
    9
    9
    10
    10
    11
    11


    Czy tak:
    Code:
    1
    
    1
    10
    10
    11
    11
    2
    2
    ...
    9
    9

    Przyznam że z pierwszą wersją byłoby łatwiej.

    Poniżej przykład w dwóch opcjach przy pierwszej wersji danych wejściowych. (do 999 ale wystarczy jako ostatni parametr we wszystkich funkcjach fragment.tekstu zamiast 3 wstawić 4 i będzie do 9999 itd)

    Pierwsza opcja
    Te same zasady co wtedy (wskazać z ręki maksymalną liczbę) i dodatkowy warunek: w pierwszej komórce (nad pierwszą daną) musi być na końcu tekstu tekst "LPG0" Można to ominąć kolejnym "jeżeli" ale nie chciałem jeszcze bardziej rozbudowywać funkcji)

    Druga opcja
    Nie trzeba zmieniać tekstu w pierwszej komórce.
    Nie trzeba wskazywać maksymalnej liczby (excel sam znajdzie ją funkcją max() ) Jednak by to mógł zrobić potrzebna jest dodatkowa kolumna pomoc która "wyłuskuje" liczby z tekstu. Przy okazji funkcja ustalająca kolejność jest wizualnie łatwiejsza do zrozumienia.
  • Poziom 8  
    Witam ponownie. Testowałem dzisiaj ten ostatni załącznik i nie wiedzieć czemu jest ARG#, ale..doszedłem do tego, że najprościej i najwydajniej byłoby coś takiego, co będzie sortować co 10 kolumn. Bez żadnego 1,2,3 na końcu, tylko po prostu "bezmyślnie" co 10. Wartość 10 jest jako przykład, bo rozumiem, że wartość będzie dowolną zmienną wybraną przeze mnie. Czy da się coś takiego zrobić?

    Przykład: (sortowanie co 5 pól)
    Dane:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

    Chce otrzymać takie:
    0
    5
    10
    15
    20
    1
    6
    11
    16
    itd.
  • Poziom 40  
    Tlen02 napisał:
    Witam ponownie. Testowałem dzisiaj ten ostatni załącznik i nie wiedzieć czemu jest ARG#


    Testowałeś załącznik ... ale według której opcji testowałeś ten załącznik i czy zrozumiałeś zasady/WARUNEK (zastosowałeś się do głównych zasad co do danej opcji)
    U mnie wszystko działa bezbłędnie. Może dołącz załącznik ze swoimi danymi.




    Druga rzecz ... tego co chcesz teraz zrobić nie do końca rozumiem: ok skok co 5 (rozumiem że skok określasz "z ręki", ale 20 "linii" (cztery powtórzenia) to stała czy excel ma wiedzieć sam że jest 20 "linii" (4 powtórzenia) czy może należy to wskazać "z ręki".
  • Poziom 8  
    Co do załącznika dopiszę później szczegółowo.

    Co do drugiej rzeczy: Tak, skok określam manualnie. Te 20 "linii" również jest wartością zmienną.