Ukryte supermoce ExcelaExcel’s hidden superpowers
Składnia / skrótySyntax / shortcuts
Dynamiczne tablice — jedna formuła zwraca całą tabelę i „rozlewa się” na sąsiednie komórki:
Dynamic arrays — one formula returns a whole table and “spills” onto neighbouring cells:
=FILTRUJ(A2:C9;A2:A9="Północ") — FILTER: przefiltrowana tabela, która żyje=FILTER(A2:C9,A2:A9="North") — a filtered table that stays alive =SORTUJ(UNIKATOWE(A2:A9)) — SORT+UNIQUE: lista bez powtórek, alfabetycznie=SORT(UNIQUE(A2:A9)) — a de-duplicated list, alphabetical =SEKWENCJA(4;3;100;5) — SEQUENCE: siatka 4×3 od 100 co 5; z DATA() nazwy miesięcy=SEQUENCE(4,3,100,5) — a 4×3 grid from 100 step 5; with DATE() month names =ILE.WIERSZY(E2#) — operator # to odwołanie do całego rozlanego wyniku=ROWS(E2#) — the # operator refers to the entire spilled resultLET — pary nazwa-wartość, wynik na końcu. Czytelniej i szybciej (Excel liczy nazwany fragment raz):
LET — name-value pairs, the result at the end. Clearer and faster (Excel computes a named fragment once):
=LET(s;SUMA(B2:B5);r;JEŻELI(s>=60000;0,12;JEŻELI(s>=40000;0,07;0));s*(1-r))LAMBDA — własna funkcja bez VBA. Definicję rejestrujesz w Menedżerze nazw (Ctrl+F3) pod nazwą, np. NettoZBrutto:
LAMBDA — your own function without VBA. Register the definition in the Name Manager (Ctrl+F3) under a name, e.g. NetFromGross:
=LAMBDA(brutto;stawka;brutto/(1+stawka)) → potem: =NettoZBrutto(A4;$B$1)=LAMBDA(gross,rate,gross/(1+rate)) → then: =NetFromGross(A4,$B$1) =SCAN(0;B2:B8;LAMBDA(a;b;a+b)) — suma narastająca jedną formułą=SCAN(0,B2:B8,LAMBDA(a,b,a+b)) — a running total in one formulaGRUPUJ.WEDŁUG (GROUPBY) — tabela przestawna w jednej formule; przelicza się sama (2D: PRZESTAWIAJ.WEDŁUG / PIVOTBY):
GROUPBY — a pivot table in a single formula; recalculates itself (2D: PIVOTBY):
=GRUPUJ.WEDŁUG(A1:A9;B1:B9;SUMA;3;1) — grupy, wartości, agregat, nagłówki, suma końcowa=GROUPBY(A1:A9,B1:B9,SUM,3,1) — groups, values, aggregate, headers, grand totalChirurgia tekstu i reszta arsenału:
Text surgery and the rest of the arsenal:
=TEKST.PO(A2;"-";-1) — TEXTAFTER z -1 = „od końca”; TEKST.PRZED = TEXTBEFORE=TEXTAFTER(A2,"-",-1) — with -1 = "from the end"; TEXTBEFORE takes the part before =ZŁĄCZ.TEKSTY(", ";PRAWDA;A2:A10) — TEXTJOIN skleja separatorem i pomija puste=TEXTJOIN(", ",TRUE,A2:A10) — glues with a delimiter and skips empties =WYCINEK(SORTUJ(A2:C100;3;-1);10) — TAKE: dziesięć najlepszych wierszy; POMIŃ = DROP=TAKE(SORT(A2:C100,3,-1),10) — the ten best rows; DROP strips rowsPułapkiPitfalls
- #ROZLANIE! → coś stoi w obszarze rozlaniu (wpis, scalenie, Tabela). Wyczyść miejsce. Formuł tablicowych nie wstawia się do wnętrza Tabeli (Ctrl+T).
- #SPILL! → something sits in the spill area (an entry, a merge, a Table). Clear the space. Array formulas do not belong inside a Table (Ctrl+T).
- #NAZWA? u odbiorcy → to funkcje Microsoft 365. Zanim wyślesz plik, zapytaj o wersję albo zamroź wyniki jako wartości.
- #NAME? at the recipient's → these are Microsoft 365 functions. Ask about their version before sending, or freeze results as values.
- Całe kolumny jako argumenty (
=FILTRUJ(A:C;A:A="Północ")) → milion wierszy mielony przy każdej zmianie. Zakres albo Tabela jako źródło. - Whole columns as arguments (
=FILTER(A:C,A:A="North")) → a million rows ground on every change. Use a range or a Table as the source. - Edycja w środku rozlanego wyniku → zmieniasz tylko komórkę-kotwicę z formułą; reszta jest „wynajęta”.
- Editing inside a spilled result → you only change the anchor cell with the formula; the rest is “rented”.
- GRUPUJ.WEDŁUG zamiast przestawnej „bo nowocześniej” → to narzędzie pod obliczenia i dashboardy, nie pod klikalną eksplorację dla odbiorcy.
- GROUPBY instead of a pivot “because it's newer” → it is a calculation and dashboard tool, not a click-driven exploration tool for the audience.
- Nazwa własnej funkcji LAMBDA → bez spacji i nie może wyglądać jak adres komórki: NettoZBrutto przejdzie, Netto Z Brutto nie.
- A custom LAMBDA name → no spaces and it cannot look like a cell address: NetFromGross passes, Net From Gross does not.
- LOSOWA.TABLICA (RANDARRAY) przelicza się ciągle → dane testowe zamrażaj kopiuj-wklej jako wartości.
- RANDARRAY recalculates constantly → freeze test data with copy-paste as values.
Checklista — sprawdź, czy umieszChecklist — test yourself
- Wyciągnę FILTRUJ (FILTER) wiersze jednego regionu — bez kolumn pomocniczych.
- Pull one region's rows with FILTER — no helper columns.
- Wypiszę SORTUJ(UNIKATOWE()) listę bez powtórek, która sama się aktualizuje.
- List unique values with SORT(UNIQUE()) — self-updating.
- Wygeneruję SEKWENCJĄ (SEQUENCE) numerację i osie czasu bez przeciągania.
- Generate numbering and time axes with SEQUENCE — no dragging.
- Przepiszę brzydką formułę na LET z nazwanymi obliczeniami pośrednimi.
- Rewrite an ugly formula as LET with named intermediate calculations.
- Zarejestruję własną funkcję LAMBDA w Menedżerze nazw (Ctrl+F3) i użyję jej jak SUMA.
- Register a custom LAMBDA in the Name Manager (Ctrl+F3) and call it like SUM.
- Policzę SCAN-em sumę narastającą bez ściągania formuły w dół.
- Compute a running total with SCAN — no dragging a formula down.
- Podsumuję tabelę GRUPUJ.WEDŁUG (GROUPBY) z sumą końcową — i wiem, kiedy zamiast tego wstawić przestawną.
- Summarise a table with GROUPBY including a grand total — and know when to insert a pivot instead.
- Rozbiję kod KL-WAW-0042 funkcjami TEKST.PRZED / TEKST.PO (TEXTBEFORE / TEXTAFTER).
- Split the code KL-WAW-0042 with TEXTBEFORE / TEXTAFTER.
- Wiem, co znaczy #ROZLANIE! (#SPILL!) i nie panikuję, tylko czyszczę obszar.
- I know what #SPILL! means — I clear the area instead of panicking.