[SOLVED] Sortowanie alfabetyczne
[SOLVED] Sortowanie alfabetyczne
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.
Nazwiska w arkuszu to posłowie VI kadencji.
Dziękuję za pomoc.
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.
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
Re: Sortowanie alfabetyczne
Modyfikacja z propozycją rozwiązania:
Fomuła pomocnicza w kolumnie K
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:ponieważ nie ma tam funkcji IFERROR.
Formuła adresowa w kolumnie L: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.
Jak to działa:Fomuła pomocnicza w kolumnie K
Kod: Zaznacz cały
=IFERROR(MATCH(J5;A$5:A$51;1);0)+5
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
Formuła adresowa w kolumnie L:
Kod: Zaznacz cały
=HYPERLINK("#$Arkusz1.A" & K5; J5)
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)
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Sortowanie alfabetyczne
Myślałem podobnie jak przedmówca, tylko całą formułę JEŻELI.BŁĄD() wstawiłem do HIPERLINKA:
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
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Re: Sortowanie alfabetyczne
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
Re: Sortowanie alfabetyczne
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)
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Sortowanie alfabetyczne
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.
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.
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
Re: Sortowanie alfabetyczne
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.
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 79 razy
AOO 4.1.15, LO 24.8.2 (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.
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.
Re: Sortowanie alfabetyczne
Dzięki za zainteresowanie ale wszystkim chcącym pomóc chcę powiedzieć, że priorytety są dwa:
- jedno kliknięcie
- stale na wierzchu
LibreOffice 7.3.2.2 (x64) na Windows 11
Re: Sortowanie alfabetyczne
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.
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 79 razy
AOO 4.1.15, LO 24.8.2 (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.
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.
Re: Sortowanie alfabetyczne
Nie chciałem tego aż tak komplikować, ale skoro inaczej się nie da.
Wielkie dzięki za zainteresowanie i poświęcony czas.
Wielkie dzięki za zainteresowanie i poświęcony czas.
Dwa kliknięcia.
Co trzeba zrobić by działało w innym pliku?
LibreOffice 7.3.2.2 (x64) na Windows 11
Re: [SOLVED] Sortowanie alfabetyczne
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: 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.
Co do pytania
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ą.
Teraz wybór litery początkowej odbywa się jednym kliknięciem. Góra ekranu wygląda tak: 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.
Co do pytania
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.8.2 (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.
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.
Re: [SOLVED] Sortowanie alfabetyczne
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.
No to ten poprawiony plik załaczam.
- Załączniki
-
- pit_3jmakro1a.ods
- (35.81 KiB) Pobrany 77 razy
AOO 4.1.15, LO 24.8.2 (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.
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.
Re: [SOLVED] Sortowanie alfabetyczne
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.
Mam to na chwilę obecną tak zrobione i jestem zadowolony.
- Załączniki
-
- pit_2.ods
- (33.32 KiB) Pobrany 105 razy
LibreOffice 7.3.2.2 (x64) na Windows 11