Excel spopularyzował Tabele Przestawne – świetne do ad-hoc, ale martwe i kruche przy dynamicznych danych. Jeśli pracujesz na Google Workspace i chcesz arkusz, który sam się aktualizuje, filtruje i agreguje bez ręcznego klikania – masz 5 funkcji, które zmieniają Sheets w prawdziwe środowisko analityczne.
1. QUERY() – SQL bezpośrednio w arkuszu
Zamiast dziesiątek filtrów i kolumn pomocniczych, QUERY() pozwala napisać zapytanie podobne do SQL i dostać wynik jako dynamiczną tabelę. Przy każdym nowym wierszu w źródle – wynik aktualizuje się automatycznie.
Przykład: wyciąg zamówień ze statusem „Zrealizowany" o wartości powyżej 1000 zł, posortowany malejąco:
=QUERY(Baza!A:F;
"SELECT A, B, SUM(F)
WHERE C = 'Zrealizowany' AND F > 1000
GROUP BY A, B
ORDER BY SUM(F) DESC
LABEL SUM(F) 'Łączny Przychód'")
Przykład 2: suma sprzedaży per miesiąc z tabeli transakcji (kolumna A = data, kolumna F = kwota):
=QUERY(Transakcje!A:F;
"SELECT MONTH(A), SUM(F)
GROUP BY MONTH(A)
ORDER BY MONTH(A)
LABEL MONTH(A) 'Miesiąc', SUM(F) 'Przychód'")
QUERY() zastępuje Tabelę Przestawną tam, gdzie wynik musi być żywy i powiązany z innymi formułami.
2. ARRAYFORMULA() – jedna formuła zamiast 1000 wierszy
Klasyczny problem: wpisujesz formułę w B2, ciągniesz w dół do B1000. Nowy pracownik wstawia wiersz 501 i niechcący przerywa zakres. ARRAYFORMULA() rozwiązuje to raz na zawsze.
=ARRAYFORMULA(A2:A * B2:B) -- mnożenie kolumn
=ARRAYFORMULA(IF(C2:C=""; ""; C2:C * 0.23)) -- VAT tylko dla niepustych
Formuła wpisana raz w B2 automatycznie wypełni B3:Binfinity dla każdego nowego wiersza. Jedno miejsce, zero ryzyka uszkodzenia przez kopiowanie.
3. FILTER() – dynamiczne wyciąganie wierszy z warunkami
FILTER() zwraca tylko te wiersze, które spełniają warunek – i odświeża się automatycznie. Przewaga nad autofilterem: wynik jest formułą, można go zagnieżdżać.
-- Klienci z Polski lub Niemiec z zamówieniem > 500 zł
=FILTER(Baza!A:F;
(Baza!C:C="Polska") + (Baza!C:C="Niemcy");
Baza!F:F > 500)
-- Maile firmowe (końcówka .pl lub .com)
=FILTER(Kontakty!A:B;
REGEXMATCH(Kontakty!B:B; "\.pl$|\.com$"))
Połączenie FILTER() + REGEXMATCH() to potężne narzędzie do czyszczenia baz kontaktów i wyciągania leadów spełniających wiele kryteriów jednocześnie.
4. IMPORTRANGE() – live feed między arkuszami
IMPORTRANGE() pozwala pobrać zakres z innego arkusza Google (nawet z innego konta) w czasie rzeczywistym. Podstawa architektury „Master + Client Sheets": jeden arkusz główny z surowymi danymi, wiele arkuszy raportowych pobierających z niego dane przez IMPORTRANGE().
=IMPORTRANGE("URL_arkusza_master"; "Sprzedaz!A:F")
Praktyczne zastosowanie: arkusz główny z pełnymi danymi sprzedaży (dostęp tylko dla managera) + arkusz handlowca pobierający przez IMPORTRANGE tylko jego własny region. Handlowiec nie widzi cudzych danych, ale ma aktualne swoje. Przy połączeniu z QUERY() można jeszcze filtrować po regionie bezpośrednio w formule.
5. XLOOKUP() – następca VLOOKUP bez jego wad
VLOOKUP() ma trzy klasyczne problemy: szuka tylko w lewo→prawo, indeks kolumny jest sztywny (przesuwa się przy dodaniu nowej kolumny), zwraca błąd zamiast pustego przy braku dopasowania. XLOOKUP() rozwiązuje wszystkie trzy.
-- VLOOKUP (stary sposób – kruchy)
=VLOOKUP(E2; A:C; 3; 0)
-- XLOOKUP (nowoczesny – odporny)
=XLOOKUP(E2; A:A; C:C; "Brak"; 0)
-- ^szukaj ^gdzie ^zwróć ^gdy brak ^dokładne dopasowanie
Kluczowa różnica: czwarty argument "Brak" zastępuje IFERROR(VLOOKUP(...);"Brak"). Szukanie może działać w obu kierunkach. Zakres zwracany to osobna kolumna – dodanie nowej kolumny do tabeli nie przesuwa indeksu.
Pięć funkcji: QUERY, ARRAYFORMULA, FILTER, IMPORTRANGE, XLOOKUP – to kompletny zestaw do budowy dynamicznego systemu raportowania w Google Sheets bez SQL Server, bez ETL, bez programisty. Wystarczy arkusz i zrozumienie jak je ze sobą łączyć.