Po co przestawiać tabele bez makr: problem i cel
Cotygodniowe raporty i importy, które za każdym razem „rozjeżdżasz” ręcznie
Przy raportach powtarzalnych zawsze pojawia się ten sam schemat: import danych, poprawianie kolejności kolumn, filtrowanie wierszy, kopiowanie do innego arkusza. Działa, dopóki robi się to raz w miesiącu. Przy pracy tygodniowej lub dziennej ręczne układanie tabel po prostu zaczyna zabierać zbyt dużo czasu.
Dane z systemu CRM, ERP czy programu magazynowego zwykle mają stałą strukturę, ale rzadko w takim układzie, w jakim chcesz je pokazać zarządowi albo księgowości. Ręczne sortowanie i filtrowanie każdej dostawy danych kończy się błędami: wklejenie w złą kolumnę, zgubiony nagłówek, przesunięte formuły.
Funkcje WYBIERZ.KOLUMNY i WYBIERZ.WIERSZE pozwalają traktować źródłową tabelę jak magazyn danych. Ustawiasz raz logikę „które wiersze, które kolumny, w jakiej kolejności”, a potem jedyne, co robisz, to podmieniasz zakres źródłowy lub odświeżasz tabelę. Bez kopiuj–wklej i bez ryzyka, że coś pominiesz.
Dlaczego VBA bywa nadmiarem przy prostych przekształceniach
Makra i VBA świetnie nadają się do skomplikowanej automatyzacji, ale dla wielu osób jest to bariera: znajomość języka, bezpieczeństwo makr, polityka IT, blokady w firmie. Przy prostym „przełożeniu” kolumn i wybraniu części wierszy pisanie i utrzymywanie kodu VBA jest po prostu zbędne.
Formuły oparte na dynamicznych tablicach są zrozumiałe dla każdego, kto zna podstawy Excela. Można je podejrzeć, skopiować, zmienić jednym edytowalnym tekstem w pasku formuły. Nie wymagają odblokowywania makr ani dodatkowych uprawnień, więc plik jest bezpieczniejszy i łatwiej go wysłać klientowi czy współpracownikowi.
Jeżeli jedynym celem jest przestawianie tabel, budowa filtrujących widoków raportowych i szybkie odświeżanie danych, zestaw: formuły + dynamiczne tablice pokrywa większość typowych potrzeb, bez dotykania VBA.
Dynamiczny widok vs statyczny zrzut danych
Statyczny zestaw to skopiowane dane w innym układzie. Każda zmiana w źródle wymaga ponownego przygotowania zestawu. Przy jednym raporcie jeszcze ujdzie, ale przy kilku arkuszach, różnych filtrach i kilku odbiorcach zaczyna się chaos.
Dynamiczny widok zbudowany z WYBIERZ.KOLUMNY i WYBIERZ.WIERSZE jest powiązany z oryginalną tabelą. Zmienisz źródło – zmieni się widok. Dodasz wiersze – widok sam się rozszerzy. Zmienisz kolejność kolumn w widoku – robisz to w jednej formule, bez przebudowy całego raportu.
Różnicę dobrze widać na prostym porównaniu:
| Cecha | Statyczny zrzut | Widok z WYBIERZ.KOLUMNY / WYBIERZ.WIERSZE |
|---|---|---|
| Aktualizacja po imporcie | Ręczne kopiowanie i układanie | Automatyczna, po podmianie zakresu źródła |
| Ryzyko pominięcia danych | Wysokie przy wielu krokach ręcznych | Niskie – logika raz zapisana w formule |
| Duplikowanie logiki raportu | Tak, w kilku miejscach arkusza | Nie, jedna formuła-baza dla wielu widoków |
| Wymagane makra/VBA | Często tak, by zautomatyzować kroki | Nie, formuły działają „z pudełka” |
Cel jest prosty: raz zdefiniować raport tak, aby każdy kolejny import danych automatycznie układał się we właściwą strukturę i kolejność, bez makr i bez ręcznej rzeźby.
Dynamiczne tablice w Excelu – szybkie przypomnienie podstaw
Rozlewanie (spilling) i jak rozpoznać formułę tablicową
Dynamiczne tablice pojawiły się w nowszych wersjach Excela (Microsoft 365, Excel 2021 i nowsze). Kluczowy mechanizm to rozlewanie wyniku formuły na wiele komórek. Wpisujesz jedną formułę w jedną komórkę, a wynik może zająć prostokątny zakres niżej i na prawo.
Rozlewanie rozpoznasz po tym, że:
- formuła jest wpisana tylko w komórce „źródłowej” (pozostałe są wyszarzone i pokazują wynik),
- wokół zakresu wyniku widać cienką niebieską ramkę po zaznaczeniu komórki z formułą,
- nie da się edytować pojedynczych komórek w środku rozlanej tablicy – zmieniasz tylko formułę źródłową.
Funkcje WYBIERZ.KOLUMNY i WYBIERZ.WIERSZE są właśnie funkcjami tablicowymi: zwykle zwracają zakres większy niż jedna komórka i naturalnie korzystają z mechanizmu rozlewania.
Zakresy dynamiczne: Tabela Excela i nazwy z funkcjami
Dynamiczne tablice najlepiej współpracują z tabelami Excela (Ctrl+T). Tabela automatycznie rozszerza się o nowe wiersze, a odwołania strukturalne, np. Sprzedaz[Kwota], obejmują zawsze aktualny zestaw danych. Dzięki temu formuła z WYBIERZ.KOLUMNY nie wymaga ręcznej zmiany zakresu przy każdym imporcie.
Alternatywą są nazwy oparte na funkcjach, np. PRZESUNIĘCIE, INDEKS czy LET. Przykładowo nazwa ZakresDanych może być zdefiniowana jako:
=PRZESUNIĘCIE(Arkusz1!$A$1;0;0;LICZBA.WIERSZY(Arkusz1!$A:$A);5)
Taki zakres jest dynamiczny: rośnie wraz z liczbą wierszy. Połączenie: WYBIERZ.KOLUMNY(ZakresDanych;...) daje elastyczny widok, który nie wymaga ruszania formuł przy zmianie ilości danych.
Nowe tablice dynamiczne vs stare formuły CSE
Przed wprowadzeniem tablic dynamicznych formuły tablicowe wymagały zatwierdzania kombinacją Ctrl+Shift+Enter. Miały sztywny rozmiar i trudniej było je utrzymywać. Każdą komórkę trzeba było wypełnić formułą osobno (lub skopiować zakres).
W podejściu dynamicznym formuła jest jedna, bez CSE, a Excel sam dopasowuje rozmiar tablicy wynikowej. Zmiana ilości danych oznacza, że wynik po prostu rozlewa się dalej lub kurczy.
Nowe funkcje, takie jak WYBIERZ.KOLUMNY, WYBIERZ.WIERSZE, FILTRUJ, SORTUJ, UNIKATOWE są zaprojektowane z myślą o tym modelu. Dzięki temu łączą się ze sobą bez dodatkowych sztuczek typu PRZESUNIĘCIE w każdej formule.
Składnia i logika funkcji WYBIERZ.KOLUMNY
Postać funkcji i argumenty
Funkcja WYBIERZ.KOLUMNY służy do wybierania konkretnych kolumn z zakresu lub tablicy. Składnia:
=WYBIERZ.KOLUMNY(tablica; indeks_kolumny1; [indeks_kolumny2]; ...)
Gdzie:
- tablica – zakres źródłowy, np.
A1:F100lub nazwa tabeli, np.Sprzedaz, - indeks_kolumny – numer kolumny w tej tablicy, liczony od 1 (pierwsza kolumna ma indeks 1).
Funkcja nie zmienia wierszy – zawsze zwraca tyle wierszy, ile ma tablica wejściowa. Przekształca tylko układ kolumn: wybór, kolejność, ewentualnie powtarzanie kolumn.
Jak Excel liczy kolumny w funkcji WYBIERZ.KOLUMNY
Indeksy kolumn odnoszą się zawsze do wewnętrznego układu kolumn w przekazanej tablicy, nie do faktycznych liter kolumn w arkuszu. Przykład:
- zakres
C2:G100ma 5 kolumn, - w tym zakresie
Cjest kolumną nr 1,D– nr 2,G– nr 5.
Formuła:
=WYBIERZ.KOLUMNY(C2:G100;1;5)
zwróci kolumny C i G, bo w obrębie tablicy C2:G100 to odpowiednio kolumna pierwsza i piąta. Dzięki temu możesz operować na fragmencie dużej tabeli bez przejmowania się jej położeniem w arkuszu.
Wybór jednej kolumny, wielu kolumn i zmiana kolejności
Podanie jednego indeksu zwraca jedną kolumnę jako tablicę jednokolumnową:
=WYBIERZ.KOLUMNY(Sprzedaz;3)
Podanie kilku indeksów tworzy widok wielokolumnowy, w zadanej kolejności:
=WYBIERZ.KOLUMNY(Sprzedaz;2;1;4)
Jeżeli Sprzedaz ma kolumny w kolejności: 1 – Data, 2 – Klient, 3 – Produkt, 4 – Kwota, to powyższa formuła da widok: Klient, Data, Kwota. To najprostsza metoda przestawiania kolejności kolumn bez dotykania danych źródłowych.
Można też powtórzyć kolumnę, podając jej indeks dwa razy, np. do porównań czy obliczeń pomocniczych obok siebie:
=WYBIERZ.KOLUMNY(Sprzedaz;1;4;4)
Tutaj druga i trzecia kolumna w widoku będą takie same (Kwota), ale można na jednej z nich budować dalsze formuły, pozostawiając oryginał obok.
Prosty przykład: przestawienie kolumn raportu
Załóżmy, że tabela Sprzedaz ma kolumny:
- Data
- Klient
- Produkt
- Kwota
- Region
Standardowy eksport ma kolejność: Data, Klient, Produkt, Kwota, Region. Raport menedżerski ma wyglądać jako: Region, Data, Klient, Kwota.
W osobnym arkuszu wpisujesz w jednej komórce:
=WYBIERZ.KOLUMNY(Sprzedaz;5;1;2;4)
Tak zdefiniowany widok zawsze pokaże wszystkie wiersze tabeli, ale w kolejności kolumn wygodnej do raportowania, bez żadnego sortowania czy ręcznej zmiany struktury oryginału.

Składnia i logika funkcji WYBIERZ.WIERSZE
Postać funkcji i indeksy wierszy
Funkcja WYBIERZ.WIERSZE wybiera konkretne wiersze z tablicy. Składnia:
=WYBIERZ.WIERSZE(tablica; indeks_wiersza1; [indeks_wiersza2]; ...)
Gdzie:
- tablica – zakres źródłowy, np.
A2:F100lub tabela, np.Sprzedaz, - indeks_wiersza – numer wiersza w tej tablicy, liczony od 1 (pierwszy wiersz danych ma indeks 1).
Podobnie jak w przypadku kolumn, liczba wierszy odnosi się do położenia wewnątrz tablicy, a nie do numerów wierszy w arkuszu. W tabeli zaczynającej się w wierszu 2, wiersz arkusza 2 to w tablicy wiersz 1.
Dodatnie i ujemne indeksy wierszy
Kluczowa przewaga WYBIERZ.WIERSZE to możliwość użycia indeksów ujemnych. Dodatni indeks liczy od góry tablicy, ujemny – od dołu. Przykłady:
1– pierwszy wiersz tablicy,2– drugi wiersz,-1– ostatni wiersz tablicy,-2– przedostatni wiersz.
Dzięki temu da się łatwo pobrać np. ostatni wpis sprzedaży bez znajomości całkowitej liczby wierszy. Formuła:
=WYBIERZ.WIERSZE(Sprzedaz;-1)
zawsze zwróci ostatni wiersz tabeli Sprzedaz, nawet gdy tabela się rozrasta.
Wybór pojedynczych i wielu wierszy, także „nie po kolei”
Pojedynczy indeks:
=WYBIERZ.WIERSZE(Sprzedaz;1)
zwróci pierwszy wiersz tablicy (np. najstarszą sprzedaż). Kilka indeksów podanych po przecinku wybierze kilka wierszy w zadanej kolejności:
=WYBIERZ.WIERSZE(Sprzedaz;1;2;3)
Pobieranie zakresów wierszy jednym zapisem
Przy rzeczywistych danych rzadko chodzi o pojedynczy wiersz. Częściej potrzebny jest cały zakres: pierwsze 10 rekordów, ostatnie 5, środkowe 3 itd. WYBIERZ.WIERSZE potrafi to zrobić jednym parametrem tablicowym zamiast długiej listy indeksów.
Przykład – pierwsze 10 wierszy tabeli Sprzedaz:
=WYBIERZ.WIERSZE(Sprzedaz; SEKWENCJA(10))
Funkcja SEKWENCJA tworzy tu listę kolejnych liczb od 1 do 10, czyli indeksów wierszy. Nie trzeba pisać ;1;2;3;4;….
Ostatnie 5 rekordów sprzedaży:
=WYBIERZ.WIERSZE(Sprzedaz; -SEKWENCJA(5))
SEKWENCJA(5) tworzy {1;2;3;4;5}, minus przed nią zamienia to na {-1;-2;-3;-4;-5}. To pięć ostatnich wierszy tabeli, licząc od końca.
Odwracanie kolejności wierszy
Czasem trzeba odwrócić kolejność całej tabeli, np. gdy eksport jest sortowany rosnąco po dacie, a raport ma pokazywać najnowsze dane na górze.
Odwrócenie kolejności z pomocą WYBIERZ.WIERSZE:
=WYBIERZ.WIERSZE(Sprzedaz; -SEKWENCJA(ROWS(Sprzedaz)))
Krok po kroku:
ROWS(Sprzedaz)(lubLICZBA.WIERSZYw polskiej wersji) liczy ile wierszy ma tabela,SEKWENCJA(ROWS(Sprzedaz))tworzy {1;2;3;…;n},- minus zamienia to na {-1;-2;…;-n}, czyli od ostatniego do pierwszego.
Wynik rozlewa się w dół w odwrotnej kolejności, bez sortowania danych źródłowych.
Łączenie wyboru kolumn i wierszy krok po kroku
Przy przestawianiu tabel w praktyce wygodne jest rozdzielenie dwóch decyzji:
- które wiersze mają zostać pokazane,
- w jakiej kolejności i zestawie mają być kolumny.
Najprostszy schemat:
=WYBIERZ.KOLUMNY( WYBIERZ.WIERSZE(Sprzedaz; ... ); ... )
Najpierw zawężasz wiersze, później przestawiasz kolumny. Dzięki temu formuła jest czytelna: w jednym miejscu widać logikę wierszy, w drugim – układ kolumn.
Podstawowe scenariusze: szybkie „przeukładanie” tabeli bez VBA
Przykład 1: „Odchudzony” widok tabeli dla innego działu
Dział sprzedaży ma tabelę z wieloma kolumnami: w tym marża, koszty, rabaty. Dział finansów potrzebuje tylko: Data, Region, Kwota.
Załóżmy, że tabela Sprzedaz ma kolumny w kolejności:
- Data
- Klient
- Produkt
- Kwota
- Region
- Marża
- Rabat
Widok dla finansów:
=WYBIERZ.KOLUMNY(Sprzedaz; 1; 5; 4)
Wynik rozlewa się w innym arkuszu jako trzykolumnowa tabela. Każdy nowy wiersz w Sprzedaz automatycznie pojawia się także w tym uproszczonym raporcie.
Przykład 2: „Kartoteka klienta” z ostatnimi transakcjami
Częsty scenariusz: trzeba szybko podejrzeć kilka ostatnich transakcji wybranego klienta w osobnym obszarze arkusza.
1. Najpierw filtrowanie po kliencie:
=FILTRUJ(Sprzedaz; Sprzedaz[Klient]=F2)
gdzie w komórce F2 jest wybrany klient.
2. Następnie wybór ostatnich 5 wierszy:
=WYBIERZ.WIERSZE( FILTRUJ(Sprzedaz; Sprzedaz[Klient]=F2); -SEKWENCJA(5) )
3. Na końcu przestawienie kolumn, np. Data, Produkt, Kwota:
=WYBIERZ.KOLUMNY( WYBIERZ.WIERSZE( FILTRUJ(Sprzedaz; Sprzedaz[Klient]=F2); -SEKWENCJA(5) ); 1;3;4 )
Całość polega na jednej formule. Zmiana klienta w F2 odświeża widok bez żadnych makr.
Przykład 3: „Podgląd nagłówków” w innej kolejności
Przy projektowaniu raportu czasem potrzebny jest sam układ nagłówków w innej kolejności niż tabela. Można to zrobić bez kopiowania tekstów.
Jeżeli nagłówki są w pierwszym wierszu tabeli Sprzedaz, podgląd w układzie: Region, Klient, Data:
=WYBIERZ.KOLUMNY( WYBIERZ.WIERSZE(Sprzedaz;0); 5;2;1 )
Specjalny indeks wiersza 0 w WYBIERZ.WIERSZE zwraca sam wiersz nagłówków. Potem WYBIERZ.KOLUMNY przestawia ich kolejność.
Łączenie WYBIERZ.KOLUMNY i WYBIERZ.WIERSZE w jednym widoku
Najpierw wiersze, potem kolumny czy odwrotnie?
Oba podejścia są poprawne, ale działają trochę inaczej:
- WIERSZE → KOLUMNY – naturalne przy „przycinaniu” danych po wierszach (top N, ostatnie wpisy) i dopiero potem przestawianiu kolumn,
- KOLUMNY → WIERSZE – wygodne, gdy najpierw trzeba zredukować szeroką tabelę (usunąć zbędne kolumny), a potem operować na niewielkim zestawie kolumn, np. odwracać kolejność wierszy.
Przykład – odwrócona kolejność wierszy i zmiana układu kolumn:
=WYBIERZ.KOLUMNY( WYBIERZ.WIERSZE(Sprzedaz; -SEKWENCJA(ROWS(Sprzedaz))); 5;1;4 )
Ten zapis jest czytelny: w części z WYBIERZ.WIERSZE widać odwrócenie, w części z WYBIERZ.KOLUMNY – układ: Region, Data, Kwota.
„Widok roboczy” jako źródło dla innych formuł
Zamiast za każdym razem pisać długą zagnieżdżoną formułę, można zbudować pośredni widok i odwoływać się do niego jak do nowej tabeli.
Przykład:
- W komórce
H2definiujesz widok roboczy:
=WYBIERZ.KOLUMNY( WYBIERZ.WIERSZE(Sprzedaz; -SEKWENCJA(50)); 1;2;4;5 ) - Zakres rozlewania nazwiesz, np.
WidokSprzedaz(Formuły > Menedżer nazw). - W dalszych obliczeniach używasz
WidokSprzedazzamiast oryginalnej tabeli.
Każda zmiana logiki wyboru wierszy/kolumn wymaga wtedy korekty tylko jednej formuły w jednym miejscu.
Dwustopniowe przestawianie: proste etapy zamiast „potwora”
Przy złożonych wymaganiach (filtrowanie, sortowanie, wybór kilku zakresów wierszy) czytelniejsze bywa zrobienie dwóch rozlań obok siebie niż jednego zagnieżdżenia na pół ekranu.
Przykład:
- w
H2– wybór i uporządkowanie wierszy:
=SORTUJ( FILTRUJ(Sprzedaz; Sprzedaz[Region]=G2 ); 1; -1 ) - w
L2– wybór i przestawienie kolumn z gotowej już tablicy:
=WYBIERZ.KOLUMNY(H2#; 1;4;2 )
Znak # oznacza cały zakres rozlewania zaczepiony w H2. Dzięki temu druga formuła jest krótka, a logika etapów jest „na wierzchu”.
Przestawianie tabel w praktyce: mini-cases z codziennej pracy
Case: raport „Top N klientów” z niestandardowym układem
Założenia:
- tabela
Sprzedazzawiera m.in. kolumny Klient, Kwota, Region, - w komórce
H1jest liczbaN– ile rekordów pokazać, - raport ma pokazywać: Klient, Region, Kwota – tylko dla największych sprzedaży.
1. Posortowanie tabeli malejąco po Kwota:
=SORTUJ(Sprzedaz; 4; -1)
(jeśli Kwota to czwarta kolumna).
2. Wybranie pierwszych N wierszy i docelowy układ kolumn:
=WYBIERZ.KOLUMNY( WYBIERZ.WIERSZE( SORTUJ(Sprzedaz;4;-1); SEKWENCJA(H1) ); 2;5;4 )
W raporcie widać tylko N rekordów, w kolejności od największej sprzedaży, bez ruszania oryginalnej tabeli.
Case: prosty „dashboard” z ostatniego tygodnia
Po imporcie danych dziennych dobrze jest szybko zbudować mały panel: ostatnie 7 dni, kolumny Data, Kwota, Region, w kolejności od najnowszej daty.
Jeśli tabela Sprzedaz jest już posortowana rosnąco po dacie:
=WYBIERZ.KOLUMNY( WYBIERZ.WIERSZE(Sprzedaz; -SEKWENCJA(7)); 1;4;5 )
Jeśli nie jest posortowana, najpierw sortowanie, później ten sam wzór:
=WYBIERZ.KOLUMNY( WYBIERZ.WIERSZE( SORTUJ(Sprzedaz;1;1); -SEKWENCJA(7)); 1;4;5 )
Widzisz zawsze ostatnie 7 dni, niezależnie od tego, ile danych już się nazbierało.
Case: przygotowanie danych do WYKRESU bez przemeblowywania tabeli
Często wykres potrzebuje innego układu niż tabela wejściowa. Zamiast przenosić kolumny, można je „ułożyć” formułą i wskazać ten widok jako źródło wykresu.
Załóżmy:
- oś X ma pokazywać datę,
- seria 1 – sprzedaż w Regionie A,
- seria 2 – sprzedaż w Regionie B.
Przykładowy widok:
=WYBIERZ.KOLUMNY(Sprzedaz; 1;4;4)
W jednej z kopii kolumny Kwota możesz ograniczyć dane tylko do Regionu A (np. JEŻELI(Sprzedaz[Region]="A";Sprzedaz[Kwota];0) zdefiniowane w osobnej kolumnie tabeli). W drugiej – tylko do Regionu B. Wykres wskazuje już tylko tę układankę, nie ruszając głównej tabeli.

Zaawansowane kombinacje: sortowanie, filtrowanie i warunki
Dynamiczny wybór kolumn na bazie nazw (INDEKS + DOPASUJ)
WYBIERZ.KOLUMNY używa indeksów liczbowych, ale czasem wygodniej wskazać kolumny po nazwie. Można to obejść, łącząc go z INDEKS i DOPASUJ.
Załóżmy, że:
- w komórkach
J1:J3są nazwy kolumn, które mają się pojawić w widoku (np. wpisywane ręcznie lub wybierane z list rozwijanych), - nagłówki tabeli
Sprzedazsą w pierwszym wierszu tej tabeli.
1. Indeksy kolumn odpowiadających nazwom:
=DOPASUJ(J1; Sprzedaz[#Nagłówki]; 0)
2. Tablica indeksów dla trzech nazw:
=DOPASUJ(J1:J3; Sprzedaz[#Nagłówki]; 0)
3. Użycie tej tablicy w WYBIERZ.KOLUMNY:
=WYBIERZ.KOLUMNY(Sprzedaz; DOPASUJ(J1:J3; Sprzedaz[#Nagłówki]; 0))
Zmiana nazw w J1:J3 od razu przeukłada kolumny bez ruszania samej formuły.
Filtrowanie przed wyborem wierszy i kolumn
Przy większych zestawach danych dobrą praktyką jest najpierw ograniczyć liczbę wierszy filtrem, a dopiero później sortować, wybierać wiersze i przestawiać kolumny. Zmniejsza to obciążenie obliczeniowe.
Przykład – ostatnie 10 transakcji tylko z wybranego regionu:
Filtrowanie + sortowanie + przestawianie w jednej formule
Przykładowy zapis:
=WYBIERZ.KOLUMNY( WYBIERZ.WIERSZE( SORTUJ( FILTRUJ(Sprzedaz; Sprzedaz[Region]=G2); 1; -1 ); -SEKWENCJA(10) ); 1;2;4 )
Kolejność:
FILTRUJ– zostawia tylko podany region,SORTUJ– układa malejąco po dacie (kolumna 1),WYBIERZ.WIERSZE– bierze ostatnich 10 rekordów (najświeższe w górze),WYBIERZ.KOLUMNY– zostawia tylko Datę, Klienta, Kwotę.
Jedna formuła, ale logika idzie krokami od „najcięższej” operacji (filtrowanie) do najlżejszej (przestawianie).
Warunkowy wybór „top N” w każdej grupie
Typowy raport: dla każdego regionu tylko kilku najlepszych klientów, z kolumnami w określonej kolejności.
1. Klasyfikacja w tabeli (pomocnicza kolumna [PozycjaWRegionie]):
=INDEKS( RANGI(Sprzedaz[Region]; Sprzedaz[Kwota]) )
lub bardziej precyzyjnie – klasyczne podejście z SUMA.WARUNKÓW / LICZ.JEŻELI (w zależności od istniejącej struktury). Chodzi o to, aby w każdej grupie regionu pojawiła się pozycja 1, 2, 3 itd.
2. Widok tylko z top 3 w każdym regionie:
=FILTRUJ(Sprzedaz; Sprzedaz[PozycjaWRegionie]<=3)
3. Przestawienie kolumn do układu Region, Klient, Kwota:
=WYBIERZ.KOLUMNY( FILTRUJ(Sprzedaz; Sprzedaz[PozycjaWRegionie]<=3); 5;2;4 )
Przestawianie jest tu ostatnim etapem – po wszystkim, co „kombinuje” na wierszach.
Warunek w kolumnach: różne układy dla różnych odbiorców
Układ kolumn można sterować parametrem, np. kodem działu wpisanym w komórkę.
Założenia:
- w
H2jest tekst:"FIN"lub"SPRZ", - „FIN” ma widzieć: Data, Klient, Kwota, Marża,
- „SPRZ” ma widzieć: Klient, Region, Produkt, Kwota.
Formuła:
=JEŻELI(H2="FIN";
WYBIERZ.KOLUMNY(Sprzedaz; 1;2;4;5);
WYBIERZ.KOLUMNY(Sprzedaz; 2;5;3;4)
)
Zmieniasz tylko kod działu, a widok składa się sam, bez dwóch arkuszy z kopiami danych.
Warunek w wierszach: dynamiczne „okno czasu”
Zamiast wybierać „ostatnie 7 wierszy”, czasem lepiej wybrać „ostatnie 30 dni” względem dzisiejszej daty.
Założenia:
- kolumna Data to pierwsza kolumna w
Sprzedaz, - widziany ma być pełen miesiąc wstecz od dnia bieżącego.
Formuła:
=WYBIERZ.KOLUMNY( FILTRUJ(Sprzedaz; Sprzedaz[Data]>=DZIŚ()-30); 1;2;4;5 )
Połączenie warunku daty z wyborem kolumn tworzy prosty „okresowy” wycinek tabeli. Bez osobnego filtra na Data.
Wydajność i czytelność: jak nie utopić się w zagnieżdżeniach
Najpierw zwęż dane, potem je „układaj”
Im mniejsza tablica trafia do WYBIERZ.KOLUMNY i WYBIERZ.WIERSZE, tym lżej dla pliku. Przy dużych tabelach warto więc:
- najpierw użyć
FILTRUJi ewentualnieSORTUJ, - dopiero potem wybierać wiersze i kolumny.
Zła kolejność:
=FILTRUJ( WYBIERZ.KOLUMNY(Sprzedaz;1;4;5); (WYBIERZ.KOLUMNY(Sprzedaz;5)="A") )
Lepsza:
=WYBIERZ.KOLUMNY( FILTRUJ(Sprzedaz; Sprzedaz[Region]="A"); 1;4;5 )
Filtrowanie powinno pracować na pełnej tabeli, nie na „kawałkach” budowanych w locie.
Rozbijanie na etapy w pomocniczych zakresach
Zamiast jednej formuły na pięć linii, lepiej trzy krótkie formuły w trzech sąsiadujących blokach. Przykład z praktyki:
- w
H2– filtr:
=FILTRUJ(Sprzedaz; Sprzedaz[Region]=G2) - w
L2– sort:
=SORTUJ(H2#; 1; -1) - w
P2– wybór wierszy i kolumn:
=WYBIERZ.KOLUMNY( WYBIERZ.WIERSZE(L2#; SEKWENCJA(10)); 1;2;4 )
Logika jest czytelna „gołym okiem”. Przy diagnozowaniu błędów sprawdzasz etap po etapie.
Opisowe nazwy zakresów zamiast „magicznych” literek
Zamiast H2#, L2# można zdefiniować nazwy:
FiltrRegiondlaH2#,SortFiltrRegiondlaL2#.
Końcowa formuła:
=WYBIERZ.KOLUMNY( WYBIERZ.WIERSZE(SortFiltrRegion; SEKWENCJA(10)); 1;2;4 )
Nawet po kilku miesiącach łatwiej zrozumieć, na czym pracuje formuła, niż przy samych adresach komórek.
Unikanie wielokrotnego liczenia tego samego
Częsty błąd: ta sama funkcja FILTRUJ lub SORTUJ jest wklejona kilka razy do zagnieżdżonych wyrażeń. Excel liczy wszystko osobno.
Zamiast:
=WYBIERZ.KOLUMNY( FILTRUJ(Sprzedaz;Sprzedaz[Region]=G2); 1;4 ) + WYBIERZ.KOLUMNY( FILTRUJ(Sprzedaz;Sprzedaz[Region]=G2); 4;4 )
lepiej:
=LET(
f; FILTRUJ(Sprzedaz;Sprzedaz[Region]=G2);
WYBIERZ.KOLUMNY(f;1;4) + WYBIERZ.KOLUMNY(f;4;4)
)
LET pozwala obliczyć filtr raz, nadać mu nazwę i użyć wielokrotnie w tej samej formule.
LET + WYBIERZ.WIERSZE + WYBIERZ.KOLUMNY jako „mini-zapytanie”
Prosty schemat do wielokrotnego użycia:
=LET(
dane; Sprzedaz;
filtr; FILTRUJ(dane; dane[Region]=G2);
posort; SORTUJ(filtr; 1; -1);
topN; WYBIERZ.WIERSZE(posort; SEKWENCJA(H1));
WYBIERZ.KOLUMNY(topN; 1;2;4)
)
Każdy „krok” ma etykietę i da się go w razie potrzeby rozwinąć do osobnego zakresu. Przy dłuższych formułach LET robi ogromną różnicę w czytelności.
Ustabilizowane nagłówki w złożonych widokach
Jeśli widok używa wielu funkcji, dobrze jest wymusić stabilne nagłówki, niezależne od ewentualnych zmian w bazowej tabeli.
Układ:
- w wierszu nad formułą wpisane „na sztywno” nagłówki docelowe (np. Data, Klient, Kwota),
- pod spodem rozlany wynik formuły z
WYBIERZ.KOLUMNY/WYBIERZ.WIERSZEbez pobierania nagłówka z tabeli.
Dzięki temu zmiana nazwy kolumny w źródle (np. „Kwota sprzedaży” zamiast „Kwota”) nie psuje raportu, bo nagłówki raportowe są niezależne od układu źródła.
Kontrola rozmiaru wyników: ILE.WIERSZY i ILE.KOLUMN
Przy kaskadzie dynamicznych tablic czasem trzeba pilnować, żeby kolejne operacje nie próbowały „wyjść” poza rozmiar wcześniejszych.
Jeśli chcesz wziąć „maksymalnie 20 wierszy, ale nie więcej niż ma tablica”, możesz napisać:
=WYBIERZ.WIERSZE( Tablica; SEKWENCJA( MIN(20; ILE.WIERSZY(Tablica)) ) )
Tam, gdzie Tablica to np. FILTRUJ(Sprzedaz; ...) przypisane przez LET. Unikasz błędów przy małej liczbie rekordów (np. gdy jest tylko 5 dopasowań).
Prosty schemat projektowania formuły „przestawiającej”
W praktyce dobrze się sprawdza stała kolejność projektowania:
- zastanów się, które wiersze mają zostać – wpisz samo
FILTRUJlubWYBIERZ.WIERSZE, - dodaj ewentualne sortowanie,
- na końcu nałóż
WYBIERZ.KOLUMNY, żeby „wyczyścić” i ułożyć kolumny.
Po każdym kroku sprawdzasz wynik. Dopiero gdy to działa, dokładasz kolejny poziom. Dzięki temu nawet duża formuła zachowuje logiczną strukturę i da się ją utrzymać w czasie.
Co warto zapamiętać
- Ręczne przestawianie kolumn i filtrowanie wierszy przy cyklicznych raportach szybko prowadzi do strat czasu i błędów (złe wklejenia, zgubione nagłówki, popsute formuły).
- Funkcje WYBIERZ.KOLUMNY i WYBIERZ.WIERSZE pozwalają traktować źródłową tabelę jak stały magazyn danych i budować z niej różne widoki bez kopiuj–wklej.
- Przy prostym układaniu tabel VBA jest przerostem formy nad treścią – dynamiczne formuły są czytelniejsze, nie wymagają makr i łatwiej przechodzą przez polityki bezpieczeństwa w firmie.
- Dynamiczny widok oparty na WYBIERZ.KOLUMNY / WYBIERZ.WIERSZE aktualizuje się sam po zmianie źródła (nowe wiersze, inny zakres), podczas gdy statyczny zrzut trzeba za każdym razem odtwarzać ręcznie.
- Raz zdefiniowana logika raportu (wybór kolumn, kolejność, filtr wierszy) może obsłużyć kolejne importy danych bez modyfikacji formuł, co redukuje ryzyko pominięcia danych i dublowania pracy.
- Dynamiczne tablice (spilling) upraszczają konstrukcję raportów: jedna formuła generuje cały zakres wyników, a Excel sam dopasowuje jego rozmiar bez Ctrl+Shift+Enter.
- Największą elastyczność daje połączenie: tabel Excela lub dynamicznych nazw zakresów z funkcjami WYBIERZ.KOLUMNY / WYBIERZ.WIERSZE oraz innymi funkcjami tablicowymi (FILTRUJ, SORTUJ, UNIKATOWE).
Źródła
- Dokumentacja funkcji CHOOSECOLS (WYBIERZ.KOLUMNY) w Excel. Microsoft – Oficjalny opis składni, argumentów i przykładów użycia CHOOSECOLS
- Dokumentacja funkcji CHOOSEROWS (WYBIERZ.WIERSZE) w Excel. Microsoft – Oficjalny opis składni, argumentów i przykładów użycia CHOOSEROWS






