Comiesięczny losowy grafik wyjść

Użytkowanie arkusza kalkulacyjnego
puter
Posty: 21
Rejestracja: pn mar 27, 2023 7:32 pm

Comiesięczny losowy grafik wyjść

Post autor: puter »

Cześć, przychodzę z takim pytanie i prośbą o pomoc.

Czy w calc da radę stworzyć arkusz który w wyznaczonych polach będzie losowo wypełniał się podanymi danymi (w tym przypadku konkretnymi numerami pokoi)??

Cel jest taki żeby zautomatyzować i przyśpieszyć tworzenie grafiku zajęć sportowych dla poszczególnych pokoi. Grafik ma być tworzony na miesiąc i w każdym tygodniu pokój może wyjść tylko raz na zajęcia. Ponad to w kolejnych tygodniach wyjścia dla każdego pokoju muszą nastąpić w innych dniach i godzinach. W każdym z dni tygodnia jest kilka pól w które nie może być wpisany żaden pokój. Opis może być skomplikowany ale załączam plik w którym do tej pory rozpisywałem to na piechotę co zajmowało sporo czasu. Calc to potężne narzędzie a z Waszą pomocą może uda się to jakoś uprościć i przyśpieszyć.

Z góry dzięki za pomoc.
Załączniki
Grafik.ods
(30.47 KiB) Pobrany 3 razy
LibreOffice 6.2.8.2 na Windows 11
Awatar użytkownika
Jermor
Posty: 2454
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Comiesięczny losowy grafik wyjść

Post autor: Jermor »

Sądzę, że udało mi się (przynajmniej częściowo) rozwiązać twój problem. Ze względu na wykorzystanie nowych funkcji programu Calc skorzystać należy z wersji nie starszej niż 24.8 (LibreOffice).
Logika tego rozwiązania jest następująca:
Tworzę ciąg tekstowy złożony z wszystkich występujących numerów pokoi. Ponieważ jeden z numerów jest przedstawiony jako 7-znakowy ciąg (126-132) zastępuję go trzy znakowym kodem „xxx”. Ponadto, aby zapewnić jednoznaczność zakodowanych numerów, każdy z nich jest poprzedzony znakiem „#”. W ten sposób powstaje ciąg tekstowy o długości 88 znaków (22 pokoje x 4).
Losowania odbywają się na tym ciągu dla wszystkich dni w tygodniu i grup w tych dniach.
Do losowania numerów wykorzystałem funkcję LOS.ZAKR.NIEUL() [ang. RANDBETWEEN.NV()]. Ta funkcja generuje losową liczbę całkowitą z podanego zakresu i nie zmienia się ona w arkuszu, jeśli wykonywane są w nim działania na komórkach niepowiązanych.
Pierwsze losowanie w każdym tygodniu zaczyna się na wszystkich elementach ciągu głównego. Górny zakres liczby losowej wynika z długości ciągu (DŁ(ciąg)/4), więc w pierwszym wierszu losowana jest liczba z zakresu 1 do 22.
W kolejnych wierszach ciąg jest skracany poprzez usunięcie z niego uprzednio wylosowanych elementów. Dzięki temu żaden numer pokoju nie może się powtórzyć w tym samym tygodniu.
Z ciągu są także usuwane te numery pokojów, które zostały wylosowane na takiej samej pozycji w tygodniach poprzedzających.
Tutaj pojawia się problem tygodnia. Norma ISO 8601:2004 mówi, że tydzień zaczyna się od poniedziałku i kończy w niedzielę. Pierwszy dzień miesiąca może jednak wypaść w dowolnym dniu tygodnia, a to oznacza, że miesiąc może nakładać się na 4, 5 lub nawet sześć tak rozumianych tygodni. Dlatego w swoim rozwiązaniu utworzyłem generator losujący numery dla sześciu kolejnych tygodni. Znajdują się one w arkuszu „Układ”.
Arkusz „Miesiąc” (zmieniłem oryginalną nazwę), zawiera grafik, który pobiera właściwe numery z tabeli w arkuszu „Układ”. Podczas pobierania usuwane są znaki „#” oraz zamieniany jest kod „xxx” na 126-132
Pod grafikiem znajdują się dodatkowe liczby pomocnicze (można je ukryć), które wyznaczają numer tygodnia, z którego będą pobierane dane w danej kolumnie grafiku,
W obszarze grafiku zdefiniowane są dwa formatowania warunkowe. Pierwsze, w zależności od miesiąca i układu dni, koloruje te pozycje grafiku, które nie są wykorzystane.
Drugie wyświetla czerwone tło w sytuacji, kiedy pole grafiku zawiera błąd. Tak się może zdarzyć, gdyż przy działaniu na liczbach losowo generowanych może się okazać, że nie można wylosować numeru pokoju.
Aby wylosować ponownie numery, należy skorzystać ze skrótu klawiaturowego CTRL+SHIFT+F9 i ewentualnie powtarzać to do aż do uzyskania pożądanego rezultatu.
Robiłem różne podejścia do tematu, dlatego załącznikiem jest wersja 5.
Załączniki
puter Grafik w5.ods
(29.88 KiB) Nie pobierany
AOO 4.1.15, LO 25.8 (x64) na Windows 11 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.
ODPOWIEDZ