Przestawianie tabel bez makr: WYBIERZ.KOLUMNY i WYBIERZ.WIERSZE w dynamicznych tablicach

0
21
Rate this post

Nawigacja:

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:

CechaStatyczny zrzutWidok z WYBIERZ.KOLUMNY / WYBIERZ.WIERSZE
Aktualizacja po imporcieRęczne kopiowanie i układanieAutomatyczna, po podmianie zakresu źródła
Ryzyko pominięcia danychWysokie przy wielu krokach ręcznychNiskie – logika raz zapisana w formule
Duplikowanie logiki raportuTak, w kilku miejscach arkuszaNie, jedna formuła-baza dla wielu widoków
Wymagane makra/VBACzęsto tak, by zautomatyzować krokiNie, 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:F100 lub 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:G100 ma 5 kolumn,
  • w tym zakresie C jest 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.

Dokumenty z analizą giełdową, lupa, długopisy i okulary na biurku
Źródło: Pexels | Autor: Hanna Pad

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:F100 lub 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) (lub LICZBA.WIERSZY w 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:

  1. Data
  2. Klient
  3. Produkt
  4. Kwota
  5. Region
  6. Marża
  7. 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:

  1. W komórce H2 definiujesz widok roboczy:

    =WYBIERZ.KOLUMNY( WYBIERZ.WIERSZE(Sprzedaz; -SEKWENCJA(50)); 1;2;4;5 )
  2. Zakres rozlewania nazwiesz, np. WidokSprzedaz (Formuły > Menedżer nazw).
  3. W dalszych obliczeniach używasz WidokSprzedaz zamiast 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 Sprzedaz zawiera m.in. kolumny Klient, Kwota, Region,
  • w komórce H1 jest liczba N – 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.

Analityk biznesowy analizuje kolorowy wykres słupkowy i dokumenty na biurku
Źródło: Pexels | Autor: RDNE Stock project

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:J3 są nazwy kolumn, które mają się pojawić w widoku (np. wpisywane ręcznie lub wybierane z list rozwijanych),
  • nagłówki tabeli Sprzedaz są 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ść:

  1. FILTRUJ – zostawia tylko podany region,
  2. SORTUJ – układa malejąco po dacie (kolumna 1),
  3. WYBIERZ.WIERSZE – bierze ostatnich 10 rekordów (najświeższe w górze),
  4. 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 H2 jest 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:

  1. najpierw użyć FILTRUJ i ewentualnie SORTUJ,
  2. 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:

  • FiltrRegion dla H2#,
  • SortFiltrRegion dla L2#.

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.WIERSZE bez 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:

  1. zastanów się, które wiersze mają zostać – wpisz samo FILTRUJ lub WYBIERZ.WIERSZE,
  2. dodaj ewentualne sortowanie,
  3. 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