Nie liniowe pobieranie danych

Użytkowanie arkusza kalkulacyjnego
aruszaba
Posty: 5
Rejestracja: sob wrz 18, 2010 9:26 am

Nie liniowe pobieranie danych

Post autor: aruszaba »

Witam wszystkich forumowiczów. Prowadzę własną działalność i posiłkuję się OF do zobrazowania biznesu. Zrobiłem sobie arkusze na każdy miesiąc i tam wpisuję min. datę oraz obrót każdego dnia (wpisuję też koszty ale nie o tym). Wpadłem na pomysł aby zrobić arkusz z tymi danymi ale podzielony na tygodnie i sprawdzić w jakie dni był najlepszy obrót. Tabela standard 7x53 - PN-N w 7 kolumnach i 53 wiersze jako nr tygodnia (taki jakby kalendarz z obrotami). Moje pytanie: czy jest jakiś automatyczny sposób na pobieranie danych nie liniowo np. co siedem wyników? Czy np. jakieś makro aby w B2 pobrać dane z A2, a w B3 dane z A8 itd. Czy jedynym sposobem jest wklepywanie tego ręcznie?
LibreOffice/OpenOffice w miarę możliwości najnowsze , Windows 7.
Awatar użytkownika
Jermor
Posty: 2351
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Nie liniowe pobieranie danych

Post autor: Jermor »

Zaproponuję ci rozwiązanie chyba prostsze. Załączam je w dołączonym pliku.
Plik składa się z trzech arkuszy. Pierwszy to "Rejestr dzienny". Zawiera kolumnę data i utarg.
Dla łatwiejszego tworzenia formuły obszarowi z datami od A2:A400 nadałem nazwę "dni", natomiast obszarowi z kwotami B2:B400 nadałem nazwę "Utarg". Równie dobrze można dodać nową kolumnę "koszty".
Ponieważ napisałeś, że gromadzisz dane codziennie zbiorczo, to wystarczy na to 399 wierszy (rok ma 365 lub 366 dni).
Tutaj tylko wpisujesz datę i kwotę.
Arkusz "Miesięcznie" wykorzystuje 12 kolumn (każda na jeden miesiąc). Pod każdym miesiącem formuła macierzowa wylicza wartość utargu w danym miesiącu.
Trzeci arkusz to arkusz "Tygodniowe". Tutaj był problem, co oznacza tygodniowo. Pierwszy tydzień w roku kalendarzowym to taki, w którym wypadają przynajmniej cztery dni roku, ostatni tydzień w roku, to ten, w którym wypadają cztery dni tego roku. To znaczy, że jeśli 1 stycznia wypadnie później niż w czwartek, to on i kolejne dni do niedzieli włącznie są zaliczane do ostatniego tygodnia roku poprzedzającego. Analogicznie z ostatnim tygodniem. Jeśli 31 grudnia wypadnie wcześniej niż w czwartek, to dni od poniedziałku do ostatniego dnia roku zaliczane są do pierwszego tygodnia roku następnego.
Ja zastosowałem następujące rozwiązanie: Tydzień zaczyna się 1. stycznia roku, czyli do twoich rozliczeń zależy od daty, a nie od dnia tygodnia. W arkuszu w kolumnie A automatycznie wygenerowane zostają daty rozpoczynające kolejny tydzień. Pierwszy stycznia wyznaczany jest dla roku wynikającego z pierwszego wpisu w "Rejestrze dziennym" (chodzi o właściwe wyznaczenie kolejnych tygodni, gdy wystąpi rok przestępny). W kolumnie "obrót" wpisana jest formuła macierzowa wyliczająca sumaryczną kwotę, tych zapisów, których data jest większa lub równa początkowi tygodnia i mniejsza od daty rozpoczynającej następny tydzień. To dlatego po ostatnim tygodniu pojawia się dodatkowy wiersz z datą.
W analogiczny sposób możesz uzyskać zestawienie kosztów.
W arkuszu "Rejestr dzienny" nie musisz wpisywać danych w porządku dat.
Ponadto mając bazę rejestrową możesz, wykorzystując filtry, tabele przestawne czy funkcje warunkowe otrzymywać różnego rodzaju zestawienia zbiorcze.
Załączniki
aruszaba.ods
(10.36 KiB) Pobrany 101 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.
Awatar użytkownika
Rafkus
Posty: 527
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Nie liniowe pobieranie danych

Post autor: Rafkus »

Jest to możliwe wykorzystując funkcję ADR.POŚR - zwraca odwołanie określone przez jakiś ciąg tekstowy np, taka formuła: =ADR.POŚR("A2")zwróci wartość z komórki A2. Użycie ciągu tekstowego pozwoli na stworzenie pewnej formuły obliczającej kolejne wybrane adresy.

Aby rozwiązać twój problem, do komórki B2 wklej poniższą formułę:

Kod: Zaznacz cały

=ADR.POŚR("A"&(2+7 * (WIERSZ(A1)-1)))
Lub gdy dane będą w jakimś innym arkuszu (Arkusz1 to nazwa arkusza z którego mają zostać pobrane dane):

Kod: Zaznacz cały

=ADR.POŚR("$Arkusz1.A"&(2+7 * (WIERSZ(A1)-1)))
i przeciągnij ją w dół.
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
aruszaba
Posty: 5
Rejestracja: sob wrz 18, 2010 9:26 am

Re: Nie liniowe pobieranie danych

Post autor: aruszaba »

Dzięki za pomoc. :super:
Ostatnio zmieniony czw sie 25, 2022 4:24 pm przez aruszaba, łącznie zmieniany 1 raz.
LibreOffice/OpenOffice w miarę możliwości najnowsze , Windows 7.
aruszaba
Posty: 5
Rejestracja: sob wrz 18, 2010 9:26 am

Re: Nie liniowe pobieranie danych

Post autor: aruszaba »

Dziękuję za zainteresowanie moim problemem, oby dwa rozwiązania są bardzo pomocne myślę że teraz sobie poradzę z tym. Dziękuję
Jermar
oraz
Rafkus
za okazaną pomoc. Problem rozwiązany. :bravo: :D
LibreOffice/OpenOffice w miarę możliwości najnowsze , Windows 7.
ODPOWIEDZ