Strona 1 z 1

[SOLVED] Sortowanie alfabetyczne

: pn lis 14, 2022 1:39 pm
autor: pit
Przy pomocy funkcji "LEWY' umieszczam w komórce pierwszą literę nazwiska, ale działa to trochę nie tak jakbym chciał.
Idealnie było by mieć taką kolumnę jak "J" (stale widoczną) gdzie po kliknięciu na literę przewija arkusz do pierwszej pozycji, coś jak linki na stronie FAQ.

pit.ods
(29.09 KiB) Pobrany 85 razy
Nazwiska w arkuszu to posłowie VI kadencji.

Dziękuję za pomoc.

Re: Sortowanie alfabetyczne

: pn lis 14, 2022 3:59 pm
autor: Jan_J
Modyfikacja z propozycją rozwiązania:
pit.ods
(12.1 KiB) Pobrany 87 razy
Jak to działa:
Fomuła pomocnicza w kolumnie K

Kod: Zaznacz cały

=IFERROR(MATCH(J5;A$5:A$51;1);0)+5
oblicza numer wiersza w którym po raz pierwszy w wykazie pojawiłaby się wartość J5 (jest to litera rozpoczynająca nazwisko). + 5 dlatego, że wykaz nazwisk zaczyna się w piątym wierszu, a elementy w ciągu numerowane są od 1. IFERROR podaje pierwszy argument jako wynik w przypadku braku błędu, zaś drugi argument w przypadku błędu w wartości pierwszego argumentu. W naszej sytuacji błąd świadczy o jednym: nie ma nazwiska ani na daną literę, ani na żadną poprzedzającą. Właściwą wartością „ratunkową” jest w tym przypadku 1.

W Apache OpenOffice trzeba to napisać inaczej:

Kod: Zaznacz cały

=IF(ISERROR(MATCH(J5;A$5:A$51;1);0;MATCH(J5;A$5:A$51;1))+5
ponieważ nie ma tam funkcji IFERROR.

Formuła adresowa w kolumnie L:

Kod: Zaznacz cały

=HYPERLINK("#$Arkusz1.A" & K5; J5)
buduje hiperłącze wkazujące na pierwszy argument, o treści zadanej przez drugi. W tym przypadku "#$Arkusz1.A" & K5 jest tekstem opisującym adres komórki z kolumny A, o numerze wiersza pochodzącym z wyszukiwania. Aktywny tekst to po prostu litera pobrana z kolumny J.

Użyłem angielskich nazw funkcji. Tak mam ustawione w systemie. Jeśli chcesz po polsku:
MATCH → PODAJ.POZYCJĘ
IF → JEŻELI
HYPERLINK → HIPERŁĄCZE
IFERROR → JEŻELI.BŁĄD
ISERROR → CZY.BŁĄD
Nazwy funkcji w załączniku dostosują się do Twoich ustawnień językowych.

Re: Sortowanie alfabetyczne

: pn lis 14, 2022 4:27 pm
autor: Rafkus
Myślałem podobnie jak przedmówca, tylko całą formułę JEŻELI.BŁĄD() wstawiłem do HIPERLINKA:
hiper.png
hiper.png (39.96 KiB) Przejrzano 2685 razy
W ten sposób otrzymałem jedno, zmienialne hiperłącze. Przy pomocy Poprawności danych (z menu Dane) w komórce J4 mam listę pierwszych liter z listy nazwisk.

Re: Sortowanie alfabetyczne

: pn lis 14, 2022 9:59 pm
autor: pit
Rafkus pisze: pn lis 14, 2022 4:27 pm Przy pomocy Poprawności danych (z menu Dane) w komórce J4 mam listę pierwszych liter z listy nazwisk

Oczywista oczywistość, po co sprawdzać coś co jest wiadome?
Nie wiem czy Wam zasugerowałem te linki czy nie ma innej opcji ale Ctrl+ "kliknij" jest nie do zaakceptowania,
Napisałem "coś jak linki na stronie FAQ" ale to był tylko przykład na to jak strona się przewija do identyfikatora.
Chodziło mi raczej o coś jak "button", klikasz i masz pierwszą pozycję z danego zbioru w pierwszym (tutaj 5 rzędzie) a to się nie dzieje.
Nie wiem jak to jest w rozwiązaniu zaproponowanym przez Rafkus'a ale tam jak widzę przynajmniej opcja "Przejdź do nazwiska" jest stałe widoczna.
Może zbyt dużo oczekuję ale tak sobie myślę, że skoro zawartość arkusza ledwie mieści się na ekranie a ta opcja miałaby być poza widocznym obszarem i nie być stale dostępna, to chyba nie ma to sensu.

Re: Sortowanie alfabetyczne

: wt lis 15, 2022 4:33 pm
autor: Jan_J
pit pisze: pn lis 14, 2022 9:59 pm Oczywista oczywistość, po co sprawdzać coś co jest wiadome?
To był szkic a nie gotowe rozwiązanie. W dokumencie ekranowym miła byłaby kontrolka / kontrolki o stałej lokalizacji, jak fixed w CSS. W arkuszu da się zablokować określoną liczbę górnych wierszy; można użyć.
Natomiast przycisk wymaga podpięcia funkcji, która będzie uruchamiana po naciśnięciu. To jest inna technologia.

Z innych rozwiązań: może wygodniejsze byłoby nałożenie filtra na tabelę?

Re: Sortowanie alfabetyczne

: wt lis 15, 2022 8:09 pm
autor: pit
Wyeliminowałem potrzebę użycia klawisza "Ctrl" więc wracamy do gry.
Przez ostatnie dwa dni spędziłem kilka godzin na poszukiwaniu sposobu unieruchomienia ostatniej kolumny albo przytwierdzenie tylko wybranych.
Wygląda na to, że tak zaawansowane narzędzie nie posiada tak prostej funkcjonalności, ta gruba kreska musi byś zawsze od wschodu do zachodu.
Jedynym rozwiązaniem wydaje się w tej sytuacji przeniesienie tego alfabetu na górę, ale tam komórki są różnej szerokości.
Gdyby cały obszar komórki (teraz trzeba celować z literę) był klikalny, byłoby to jakieś rozwiązanie.
Jan_J pisze: wt lis 15, 2022 4:33 pm W arkuszu da się zablokować określoną liczbę górnych wierszy; można użyć.
Natomiast przycisk wymaga podpięcia funkcji, która będzie uruchamiana po naciśnięciu. To jest inna technologia.

Z innych rozwiązań: może wygodniejsze byłoby nałożenie filtra na tabelę?
Blokować górnych wierszy nie chcę, za długi mamy alfabet i nie chcę również tego nadmiernie komplikować.

Re: Sortowanie alfabetyczne

: wt lis 15, 2022 11:19 pm
autor: Jermor
Może rzeczywiście jak proponuje @Jan_J wykorzystaj filtrowanie.
Filtrowanie zaawansowane pozwala wybrać literę i zażądać odświeżenia zakresu. Efektem będzie lista nazwisk na tę wybraną literę.
Pewną niedogodnością jest to, że żądanie odświeżenia zakresu należy wywołać wtedy, gdy aktywna komórka znajduje się w obszarze filtrowanym, najlepiej w nagłówku, bo wtedy, nawet gdy żadne dane nie są widoczne, to jesteś w obszarze filtrowanym.
Takie rozwiązanie podsyłam zwrotnie. Literę wybierasz z rozwijanej listy. Pierwsza pozycja na tej liście to kropka oznacza, że chcesz zobaczyć pełną listę.
Trochę rozbudowałem alfabet, bo jednak w Polsce są nazwiska na Ć, Ś a mogą być też na Ó (chociaż nikogo takiego nie znam). Ponadto dodałem Q i X, bo przecież niedawno mieliśmy w sejmie Nigeryjczyka (jak mi się wydaje) a obcokrajowcy mogą mieć dziwaczne z naszego punktu widzenia nazwiska.
Do polecenia odświeżania zakresu możesz przypisać skrót klawiaturowy (u siebie przypisałem SHIFT+F12). Odśwież zakres znajduje się w "Dane -> Odśwież zakres"
Ten sposób działa, wtedy gdy używany jest filtr standardowy albo zaawansowany, tu ze względu na konieczność tworzenia dynamicznego kryterium zastosowany jest filtr zaawansowany.

Re: Sortowanie alfabetyczne

: śr lis 16, 2022 2:43 pm
autor: pit
Dzięki za zainteresowanie ale wszystkim chcącym pomóc chcę powiedzieć, że priorytety są dwa:
  1. jedno kliknięcie
  2. stale na wierzchu

Re: Sortowanie alfabetyczne

: czw lis 17, 2022 4:26 pm
autor: Jermor
Podsyłam ci wersję, która być może będzie ci odpowiadała. Jedno kliknięcie i masz wynik.
Jednak aby to osiągnąć, plik zawiera makro (a nawet trzy) Wykorzystałem i odpowiednio zmodyfikowałem makra z OpenOffice.org Macros Explained
OOME Fourth Edition" Andrew Pitonyak-a. Makro jest podpięte pod "Zdarzenia arkusza -> Zawartość została zmieniona"
Po rozwinięciu komórki J2 wybierasz literę lub gwiazdkę albo po prostu wpisujesz literę, lub gwiazdkę do tej komórki i naciskasz ENTER.
Aby wszystko funkcjonowało musisz w opcjach LibreOffice zezwolić na uruchamianie makr.

Re: Sortowanie alfabetyczne

: czw lis 17, 2022 8:35 pm
autor: pit
Nie chciałem tego aż tak komplikować, ale skoro inaczej się nie da.
Wielkie dzięki za zainteresowanie i poświęcony czas.
Jermor pisze: czw lis 17, 2022 4:26 pm Jedno kliknięcie i masz wynik.
Dwa kliknięcia. :P
Jermor pisze: czw lis 17, 2022 4:26 pm Makro jest podpięte pod "Zdarzenia arkusza -> Zawartość została zmieniona"
Co trzeba zrobić by działało w innym pliku?

Re: [SOLVED] Sortowanie alfabetyczne

: pt lis 18, 2022 9:13 pm
autor: Jermor
Zmodyfikowałem plik. Wykorzystałem części postu dotyczącego listenera i dodałem obsługę nasłuchu.
Teraz wybór litery początkowej odbywa się jednym kliknięciem. Góra ekranu wygląda tak:
obraz_2022-11-18_192429092.png
obraz_2022-11-18_192429092.png (11.84 KiB) Przejrzano 2498 razy
Po kliknięciu wybranego elementu, czyli uaktywnieniu obszaru z literkami, można, zamiast klikania myszką naciskać klawisz z potrzebną literą albo korzystając z klawiszy ze strzałkami przechodzić do następnej/poprzedniej litery.
Aby to rozwiązanie działało od załadowania pliku musi zostać automatycznie uruchomione makro "Wlacz_nasluch".Nie udało mi się rozwiązać tego problemu. Makro uruchamia się na zdarzenie arkusza "Uaktywnij dokument" więc żeby cały proces przebiegał jednym kliknięciem należy kliknąc zakładkę Arkusz2 i ponownie Arkusz1, bo dopiero wtedy następuje aktywacja i włączenie nasłuchu. Można byłoby napisać makro, które na zakończenie pracy, zapisze dokument z aktywnym arkuszem Arkusz2 wówczas przejście do Arkusz1 spowoduje zdarzenie uaktywnienia.
Jeśli ktoś jeszcze śledzi ten wątek, to być może odpowie (podpowie) jak rozwiązać ten problem.
Dla zainteresowanych: to są 34 przylegające do siebie formanty "Przycisk opcji" z połączeniem ich w grupę. Każdy z nich (z wyjątkiem opisanych gwiazdką) w odpowiedzi na zaznaczenie generuje ciąg znakowy: wybrana litera, kropka i gwiazdka (te z gwiazdką generują kropka gwiazdka — pierwszy — i kropka plus — ostatni) umieszczając wynik w komórce A1. Listener sprawdza zmianę w tej komórce i wywołuje filtrowanie.
pit_3jmakro1.ods
(35.87 KiB) Pobrany 84 razy

Co do pytania
pit pisze: czw lis 17, 2022 8:35 pm Co trzeba zrobić by działało w innym pliku?
trzeba skopiować makra z biblioteki Standard w pliku i utworzyć taką sama bibliotekę w pliku docelowym. Trzeba pamiętać, że makro odwołuje sie do pewnego konkretnego obszaru arkusza (tutaj pierwszego w skoroszycie), obszaru filtrowania (można go określić/zmienić w stałej) i komórki (także można ją zmienić). W tym nowym arkuszu należy podpiąć makro do zdarzenia arkusza.
Inny sposób to wgranie tych innych arkuszy do pliku z makrami ("Arkusz -> Wstaw arkusz z pliku..."), a potem ewentualnie zmienienie nazwy pliku na własną.

Re: [SOLVED] Sortowanie alfabetyczne

: pt lis 18, 2022 9:43 pm
autor: Jermor
Jednak robiłem jakiś błąd, bo po podstawieniu wywołania makra pod zdarzenie "Otwórz dokument" w "Narzędzia -> Dostosuj -> Zdarzenia" wszystko zaczęło działać.
No to ten poprawiony plik załaczam.

Re: [SOLVED] Sortowanie alfabetyczne

: sob lis 19, 2022 1:00 pm
autor: pit
Jak napisałem wyżej "nie chcę również tego nadmiernie komplikować" by nie stosować rozwiązań których nie rozumiem, poza tym to mi nie działa.
Mam to na chwilę obecną tak zrobione i jestem zadowolony.