Menu

PRZESUNIĘCIE (OFFSET) w Excelu: dynamiczne zakresy i sumy

=PRZESUNIĘCIE(A1;3;2) zwraca komórkę 3 wiersze niżej i 2 kolumny dalej niż A1. Z podaną wysokością zwraca cały zakres; tak sumuje się ostatnie N wierszy albo buduje średnią kroczącą.

Każdy arkusz na tej stronie działa na żywo: zmień liczbę albo formułę, a się przeliczy.

=PRZESUNIĘCIE(A1;3;2) (po angielsku OFFSET) zwraca komórkę 3 wiersze niżej i 2 kolumny dalej niż A1, czyli C4. Podaj jej też wysokość i szerokość, a zwróci cały zakres; do tego PRZESUNIĘCIE służy najczęściej: do sum i średnich z zakresu, który się przesuwa albo rośnie. Tabele pokazują formuły po angielsku, ale możesz w nich wpisywać formuły także po polsku, ze średnikami.

Przesunięcie od A1
G2
ABCDEFG
1ProductCategoryPriceRowsColsResult
2AppleFruit$1.2032$0.80
3PearFruit$1.50
4CarrotVegetable$0.80
5BreadBakery$2.40
6MilkDairy$1.10
Kliknij komórkę, aby zobaczyć jej formułę. Zmień liczbę albo formułę, a arkusz przeliczy się na nowo.W polskim Excelu: =PRZESUNIĘCIE(A1;E2;F2)

3 wiersze w dół i 2 w prawo od A1 to C4, cena Carrot, $0.80. Ustaw Cols na 0, aby dostać nazwę Carrot, albo Rows na 5, aby trafić na wiersz Milk. Wiersze i kolumny mogą być ujemne, aby przesunąć się w górę albo w lewo, a wyjście poza górną krawędź lub brzeg arkusza daje #ADR! (po angielsku #REF!).

Składnia funkcji PRZESUNIĘCIE

=OFFSET(reference, rows, cols, [height], [width])
  • reference (odw): komórka startowa (albo zakres).
  • rows, cols (wiersze, kolumny): o ile się przesunąć. 0 oznacza pozostanie w miejscu.
  • height, width (wysokość, szerokość): rozmiar zwracanego zakresu, liczony od komórki, do której się przesunięto. Pominięte przyjmują rozmiar reference.

Sama w komórce PRZESUNIĘCIE zwracająca kilka komórek rozlewa się w Excelu 365; starsze wersje zwykle pokazują #ARG! (#VALUE!). Tabele na tej stronie pokazują angielskie nazwy błędów. W SUMA, ŚREDNIA, ILE.LICZB albo MAX działa jako zakres.

Suma ostatnich N wierszy

Klasyczne zadanie dla PRZESUNIĘCIE: suma, która zawsze obejmuje najnowsze wiersze, bez względu na to, ile ich dopisano. ILE.LICZB ustala, ile jest wartości, PRZESUNIĘCIE przesuwa się w dół do pierwszej z ostatnich N, a wysokość bierze N wierszy.

Suma ostatnich N miesięcy
F2
ABCDEF
1MonthSalesLast NTotal
2Jan4,200314,900
3Feb3,900
4Mar4,800
5Apr5,100
6May4,600
7Jun5,300
8Jul5,000
Kliknij komórkę, aby zobaczyć jej formułę. Zmień liczbę albo formułę, a arkusz przeliczy się na nowo.W polskim Excelu: =SUMA(PRZESUNIĘCIE(B1;ILE.LICZB(B2:B13)-E2+1;0;E2;1))

Wartości jest 7, więc PRZESUNIĘCIE zaczyna 7-3+1, czyli 5 wierszy pod B1, w B6, i bierze 3 wiersze: od May do Jul, 14,900. W polskim Excelu formuła to =SUMA(PRZESUNIĘCIE(B1;ILE.LICZB(B2:B13)-E2+1;0;E2;1)). Wpisz 4900 w B9 (sierpień), a suma przesunie się na Jun, Jul i Aug, bo ILE.LICZB znajdzie teraz 8. Zakres B2:B13 zostawia miejsce na resztę roku. Kolumna nie może mieć pustych komórek w środku, inaczej ILE.LICZB policzy za mało, a okno trafi w złe miejsce.

Średnia krocząca

PRZESUNIĘCIE z ujemnym przesunięciem wierszy, skopiowana w dół kolumny, daje każdemu wierszowi okno z wierszy nad nim: tutaj średnią z bieżącego miesiąca i dwóch poprzednich.

Trzymiesięczna średnia krocząca
C4
ABC
1MonthSales3-month average
2Jan4,200
3Feb3,900
4Mar4,8004,300
5Apr5,1004,600
6May4,6004,833
7Jun5,3005,000
8Jul5,0004,967
Kliknij komórkę, aby zobaczyć jej formułę. Zmień liczbę albo formułę, a arkusz przeliczy się na nowo.W polskim Excelu: =ŚREDNIA(PRZESUNIĘCIE(B4;-2;0;3;1))

C4 liczy średnią z B2:B4 (od Jan do Mar), 4,300. W polskim Excelu formuła to =ŚREDNIA(PRZESUNIĘCIE(B4;-2;0;3;1)). Każdy wiersz niżej przesuwa okno o jeden. Zmień 3 na 6, a -2 na -5, aby dostać średnią sześciomiesięczną (wtedy zacznij formułę w wierszu 7). Akurat ten przypadek nie wymaga PRZESUNIĘCIE: =ŚREDNIA(B2:B4) skopiowane w dół od C4 robi to samo, bo odwołania względne i tak się przesuwają. PRZESUNIĘCIE przydaje się, gdy rozmiar okna pochodzi z komórki.

Dlaczego INDEKS bywa lepszym wyborem

PRZESUNIĘCIE jest nietrwała: Excel przelicza każdą funkcję PRZESUNIĘCIE po każdej edycji w dowolnym miejscu skoroszytu, bo nie wie z góry, na które komórki wskaże. Arkusz z tysiącami takich formuł zaczyna zwalniać. INDEKS też zwraca odwołanie, a zakres zapisany jako start:INDEKS(...) rośnie tak samo, nie będąc nietrwałym:

=SUM(OFFSET(B2, 0, 0, E2, 1))        first E2 rows, volatile
=SUM(B2:INDEX(B2:B13, E2))           same rows, not volatile

W polskim Excelu: =SUMA(PRZESUNIĘCIE(B2;0;0;E2;1)) i =SUMA(B2:INDEKS(B2:B13;E2)). Obie czytają pierwsze E2 wierszy kolumny. PRZESUNIĘCIE trudniej też sprawdzić: Śledź poprzedniki i kolorowe obrysy, które Excel rysuje podczas edycji formuły, pokazują komórkę startową i argumenty, a nie zakres, który PRZESUNIĘCIE ostatecznie zwraca. Używaj PRZESUNIĘCIE w szybkim modelu albo w zakresie wykresu; w dużych skoroszytach wybieraj INDEKS. Strona o INDEKS mówi więcej o zwracaniu zakresów, a ADR.POŚR to druga nietrwała funkcja odwołań.

Ćwiczenie: suma pierwszych N miesięcy

Sprzedaż miesięczna
F2
ABCDEF
1MonthSalesFirst NTotal
2Jan4,2004
3Feb3,900
4Mar4,800
5Apr5,100
6May4,600
7Jun5,300
8Jul5,000
Kliknij komórkę, aby zobaczyć jej formułę. Zmień liczbę albo formułę, a arkusz przeliczy się na nowo.

Twoja kolej: W F2 użyj PRZESUNIĘCIE wewnątrz SUMA, aby zsumować pierwsze N miesięcy, gdzie N jest w E2.

Najczęściej zadawane pytania

Co robi funkcja PRZESUNIĘCIE w Excelu?

Zwraca odwołanie oddalone o podaną liczbę wierszy i kolumn od komórki startowej, opcjonalnie o zmienionym rozmiarze. =PRZESUNIĘCIE(A1;3;2) to komórka 3 wiersze niżej i 2 kolumny w prawo od A1, czyli C4.

Jak zsumować ostatnie N wierszy w Excelu?

Zacznij od nagłówka i przesuń się w dół do pierwszej z ostatnich N wartości: =SUMA(PRZESUNIĘCIE(B1;ILE.LICZB(B2:B100)-N+1;0;N;1)). ILE.LICZB ustala, ile jest wartości, a wysokość N bierze tyle wierszy. Działa to tylko wtedy, gdy kolumna nie ma przerw.

Dlaczego PRZESUNIĘCIE jest funkcją nietrwałą?

Excel przelicza każdą funkcję PRZESUNIĘCIE po każdej zmianie w skoroszycie, bo komórki, na które wskazuje, znane są dopiero po jej wykonaniu. W dużych skoroszytach to spowalnia pracę. Zakres zbudowany z INDEKS, na przykład B2:INDEKS(B2:B100;N), robi to samo bez bycia nietrwałym.

Jakie argumenty ma PRZESUNIĘCIE?

PRZESUNIĘCIE(odw; wiersze; kolumny; [wysokość]; [szerokość]): komórka startowa, ile wierszy w dół (wartość ujemna to w górę), ile kolumn w prawo (ujemna to w lewo) i opcjonalnie rozmiar zwracanego zakresu.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ