[SOLVED] Sortowanie alfabetyczne

Użytkowanie arkusza kalkulacyjnego
pit
Posty: 22
Rejestracja: sob lis 12, 2022 4:13 pm

[SOLVED] Sortowanie alfabetyczne

Post 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 79 razy
Nazwiska w arkuszu to posłowie VI kadencji.

Dziękuję za pomoc.
Ostatnio zmieniony czw lis 17, 2022 8:48 pm przez pit, łącznie zmieniany 1 raz.
LibreOffice 7.3.2.2 (x64) na Windows 11
Jan_J
Posty: 4570
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Sortowanie alfabetyczne

Post autor: Jan_J »

Modyfikacja z propozycją rozwiązania:
pit.ods
(12.1 KiB) Pobrany 78 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.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Awatar użytkownika
Rafkus
Posty: 526
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Sortowanie alfabetyczne

Post 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 2214 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.
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
pit
Posty: 22
Rejestracja: sob lis 12, 2022 4:13 pm

Re: Sortowanie alfabetyczne

Post 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.
Ostatnio zmieniony wt lis 15, 2022 7:37 pm przez pit, łącznie zmieniany 1 raz.
LibreOffice 7.3.2.2 (x64) na Windows 11
Jan_J
Posty: 4570
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Sortowanie alfabetyczne

Post 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ę?
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
pit
Posty: 22
Rejestracja: sob lis 12, 2022 4:13 pm

Re: Sortowanie alfabetyczne

Post 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ć.
LibreOffice 7.3.2.2 (x64) na Windows 11
Awatar użytkownika
Jermor
Posty: 2325
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Sortowanie alfabetyczne

Post 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.
Załączniki
pit_3j.ods
(29.53 KiB) Pobrany 74 razy
AOO 4.1.15, LO 24.2.5 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
pit
Posty: 22
Rejestracja: sob lis 12, 2022 4:13 pm

Re: Sortowanie alfabetyczne

Post 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
LibreOffice 7.3.2.2 (x64) na Windows 11
Awatar użytkownika
Jermor
Posty: 2325
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Sortowanie alfabetyczne

Post 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.
Załączniki
pit_3jmakro.ods
(32.47 KiB) Pobrany 73 razy
AOO 4.1.15, LO 24.2.5 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
pit
Posty: 22
Rejestracja: sob lis 12, 2022 4:13 pm

Re: Sortowanie alfabetyczne

Post 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?
LibreOffice 7.3.2.2 (x64) na Windows 11
Awatar użytkownika
Jermor
Posty: 2325
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: [SOLVED] Sortowanie alfabetyczne

Post 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 2027 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 77 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ą.
AOO 4.1.15, LO 24.2.5 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Awatar użytkownika
Jermor
Posty: 2325
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: [SOLVED] Sortowanie alfabetyczne

Post 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.
Załączniki
pit_3jmakro1a.ods
(35.81 KiB) Pobrany 68 razy
AOO 4.1.15, LO 24.2.5 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
pit
Posty: 22
Rejestracja: sob lis 12, 2022 4:13 pm

Re: [SOLVED] Sortowanie alfabetyczne

Post 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.
Załączniki
pit_2.ods
(33.32 KiB) Pobrany 97 razy
LibreOffice 7.3.2.2 (x64) na Windows 11
ODPOWIEDZ