Quantcast
Channel: Malinowy Excel
Viewing all articles
Browse latest Browse all 291

Funkcja PPRZESUNIĘCIE pomaga liczyć podsumy

$
0
0

Ostatnio napisał do mnie Radek z ciekawym pytaniem. Miał o bardzo dużą, dość specyficznie zbudowaną tabelę, w której chciał zastosować podsumowania części danych (coś a la sumy częściowe). Na koniec chciał mieć sumę wszystkiego. Przyznam, żę rozwiązanie do oczywistych nie należy i jest bardzo ciekawe, bo zawiera funkcję PRZESUNIĘCIE…

Formatka wygląda tak:

Przesunięcie formatka

Formatka

W żółtej komórce F2 ma się znaleźć suma wszystkich wartości, a te wartości mają być takie:

  1. tam, gdzie są szare pola, a w kolumnie B jednostką jest „ryczałt”, należy podsumować wszystkie dane pod tym ryczałtem (aż do następnego ryczałtu),
  2. tam,gdzie jednostka jest inna niż „ryczałt”, należy pomnożyć wartości z kolumn C i D.

W kolumnie E są formuły wstawione ręcznie w odpowiednie komórki, które sumują tam, gdzie jest „ryczałt”, a w pozostałe komórki wstawione jest proste mnożenie (plik z rozwiązaniem jest do pobrania pod wpisem). Ponieważ jest to mrówcza praca, to w całym ćwiczeniu chodzi o to, aby zrobić to za pomocą jednej formuły. Do dzieła 🙂

Formuła z funkcją PRZESUNIĘCIE

Nasze zadanie jest więc takie: w żółtych komórkach F4:F21 należy wpisać jedną formułę taką, która w przypadku napotkania jednostki = „ryczałt” podsumuje wartości poniżej, do kolejnego słowa „ryczałt”. W innym przypadku pomnoży wartości z komórek obok (kolumny C i D).

Formuła będzie dość skomplikowana. Wykorzystam w niej aż 6 funkcji: JEŻELI,  SUMA, PRZESUNIĘCIE, JEŻELI.BŁĄD, PODAJ.POZYCJĘ i ILE.NIEPUSTYCH.

Funkcja JEŻELI sprawdzi, czy jednostka = „ryczałt”. Jeśli tak – będzie sumowała komórki poniżej, jeśli nie – wymnoży wartości z komórek obok. Do określenia zakresu komórek „poniżej” posłużą funkcje PRZESUNIĘCIE, JEŻELI.BŁĄD, PODAJ.POZYCJĘ i ILE.NIEPUSTYCH. PRZESUNIĘCIE zwróci nam adres zakresu. Zakres ten będzie ustalony dzięki 3 pozostałym funkcjom.

Zobaczcie formułę:

=JEŻELI(B4="ryczałt";SUMA(PRZESUNIĘCIE(F5;0;0;JEŻELI.BŁĄD(PODAJ.POZYCJĘ("ryczałt";B5:$B$21;0)-1;ILE.NIEPUSTYCH(B5:$B$21));1));C4*D4)));C4*D4)

Najtrudniej jest ustalić tutaj wysokość zakresu sumowania, czyli czwarty argument funkcji PRZESUNIĘCIE. Wysokość ta jest to liczba komórek pod wierszem, w którym aktualnie jesteśmy, do najbliższego wystąpienia kolejnego „ryczałtu”. Najłatwiej jest to określić funkcją PODAJ.POZYCJĘ, która ma sprawdzić, gdzie jest „ryczałt” w zakresie od komórki poniżej wiersza z formułą, do końca zakresu. Funkcja PODAJ.POZYCJĘ zwróci pozycję pierwszego napotkanego „ryczałtu”, czyli dokładnie to, o co nam chodzi. A ponieważ chcemy, aby wysokość zakresu sumowania kończyła się tuż przed napotkaniem słowa „ryczałt”, od wyniku PODAJ.POZYCJĘ odejmujemy 1.

I tak naprawdę to nam prawie rozwiązuje problem. Niestety nie zakłada opcji, że zakres się kiedyś skończy i to nie słowem „ryczałt”. W takiej sytuacji, PODAJ.POZYCJĘ zwróci błąd. Żeby się przed tym zabezpieczyć – wrzucamy wszystko do funkcji JEŻELI.BŁĄD i jako jej drugi argument, czyli co ma się stać w przypadku błędu, wrzucamy funkcję ILE.NIEPUSTYCH, która po prostu policzy wysokość zakresu, jako liczbę niepustych komórek z jednostkami. Dokładnie to w takim przypadku będzie wysokość sumowanego zakresu.

Mega-formułą, ale działa 🙂

Małego komentarza wymaga również dynamiczny zakres B5:$B$21. Jest on po to, aby ustalać zakres sumowania: ma on się zaczynać zawsze pod wierszem, w którym jest formuła. Dynamikę tego zakresu osiągamy zwykłym adresowaniem.  Mówimy Excelowi, że ma zmieniać pierwszą komórkę zakresu (adres względny= brak dolarów), ale ma zostawić w spokoju ostatnią (adres bezwzględny = 2 dolary). Dzięki temu uzyskujemy efekt dynamicznego zakresu.

Dobrze widać to na obrazkach (fioletowy zakres) – zakres się zmniejsza wraz ze schodzeniem formuły w dół:

Przesunięcie: Dynamiczny zakres 1

Dynamiczny zakres 1

Przesunięcie: Dynamiczny zakres 1

Dynamiczny zakres 2

Formuła licząca TOTAL

Na koniec już najłatwiejsze, czyli podsumowanie wszystkiego. To zrobimy już zwykłą funkcją SUMA.JEŻELI. Kryterium sumowania, będzie oczywiście słowo „ryczałt”. Formuła w komórce F2 wygląda więc tak:

=SUMA.JEŻELI(B4:B21;"ryczałt";F4:F21)

Nic tutaj nie trzeba blokować, ponieważ formuła ta jest tylko w tym jednym miejscu.

A oto efekt wszystkiego:

MalinowyExcel Przesunięcie Wynik

Wynik

Mam nadzieję, że podany przykład okaże się przydatny w tej, czy zbliżonej formie. Zachęcam też do udostępnienia tego wpisu znajomym, za co będę bardzo wdzięczna.

 

 


Viewing all articles
Browse latest Browse all 291

Trending Articles


TRX Antek AVT - 2310 ver 2,0


Автовишка HAULOTTE HA 16 SPX


POTANIACZ


Zrób Sam - rocznik 1985 [PDF] [PL]


Maxgear opinie


BMW E61 2.5d błąd 43E2 - klapa gasząca a DPF


Eveline ➤ Matowe pomadki Velvet Matt Lipstick 500, 506, 5007


Auta / Cars (2006) PLDUB.BRRip.480p.XviD.AC3-LTN / DUBBING PL


Peugeot 508 problem z elektroniką


AŚ Jelenia Góra