W tym poście omówimy sumę ze zmieniającej się ilości kolumn w danych. Będzie to rozwiązanie problemu z Power Query w Excelu.
Zadanie to wykonamy na podstawie przykładowych danych z rys. nr 1.
Mamy tutaj wynik zapytania Power Query, który tworzy podsumowanie z danych z pierwszej tabeli. Mamy na razie przedstawione tylko 3 miesiące, ale pod spodem dojdą kolejne dane z dodatkowymi miesiącami (rys. nr 2).
W podsumowaniu z Power Query chcemy mieć kolumnę "Suma". Można dodawać kolumny do zapytania Power Query, tylko trzeba mieć na uwadze, że ilość kolumn w Power Query może się zmienić. Tutaj standardowo chcielibyśmy otrzymać sumę. Użyjemy skrótu klawiszowego Alt + =. Excel wstawi nam automatycznie funkcję SUMA, jak widać na rys. nr 3.
Możemy sobie uprościć zapis tej funkcji i wstawić w niej ręcznie odpowiedni zakres zamiast nazw tekstowych. Zapis będzie wtedy wyglądał następująco:
=SUMA(I2:K2)
Otrzymamy zsumowane dane w kolumnie L przedstawione na rys. nr 4.
Nasza suma przedstawia wynik z aktualnej sytuacji. Problem polega na tym, że jeśli wstawimy w dane kolejną kolumnę (Kwiecień) i dopiszemy jakieś wartości, to nie zostaną one uwzględnione w kolumnie Suma (rys. nr 5). Nasza Suma się nie rozszerzy, jej zakres się nie zmieni.
Wróćmy do stanu sprzed dodania dodatkowej kolumny za pomocą skrótu klawiszowego Ctrl+Z. Jeśli natomiast wstawimy kolumnę między np. Lutym a Marcem i wpiszemy jakieś wartości liczbowe, to zostaną one uwzględnione w sumie (rys. nr 6). Zakres Sumy się rozszerzy.
Problem pojawia się, gdy nasze dane zostaną rozszerzone o kolumnę obok zakresu uwzględnionego w formule funkcji SUMA. W takiej sytuacji funkcja się nie rozszerza automatycznie, nie dopasowuje do nowego zakresu. Najprostszym rozwiązaniem jest użycie funkcji Excela. Jest możliwe rozwiązanie tego problemu w Power Query, ale jest bardziej skomplikowane i wymaga użycia kilku funkcji. Rozwiązanie to pokażemy w kolejnym poście.
Naszym zadaniem jest dynamiczne ustalenie zakresu funkcji SUMA. Możemy użyć funkcji PRZESUNIĘCIE. Pierwszym argumentem funkcji jest odwołanie, czyli komórki z zakresu I2:L2 (obejmujemy zakresem kolumnę Suma). Musimy ograniczyć to przesunięcie do ilości kolumn minus jedna kolumna. Czyli nie przesuwamy o konkretną ilość wierszy (argument wiersze), czy kolumn (argument kolumny), ale musimy zmienić argument szerokość (czwarty argument). Trzeci argument, czyli szerokość wstawiamy wartość 1. Musimy policzyć liczbę kolumn. Możemy to zrobić za pomocą funkcji LICZBA.KOLUMN. Argumentem funkcji jest tablica, czyli zakres obejmujący nasze 4 kolumny minus jedna kolumna (I2:L2‑1). Zapis formuły powinien wyglądać następująco:
Powyższą formułę zatwierdzamy. Sprawdzimy teraz, czy działa prawidłowo. Zaznaczamy kolumnę L i za pomocą skrótu klawiszowego Ctrl + Shift + Add wstawiamy nową kolumnę przed tą zaznaczoną. Następnie ręcznie wpisujemy dowolną wartość w tej kolumnie. Wynik w kolumnie Suma automatycznie ulegnie zmianie co widać na rys. nr 7.
Teraz musimy usunąć dodaną kolumnę ręcznie za pomocą skrótu klawiszowego Ctrl+Shift+Subtract. Teraz sprawdzimy, czy jeśli dodamy dużą ilość danych, zakres kolumn i sumy rozszerzy i przeliczy się prawidłowo. Dodatkowe dane z rysunku nr 2 zaznaczamy i przesuwamy w górę, czyli doklejamy do naszych danych źródłowych. Następnie odświeżamy dane z zapytania, czyli klikamy prawym przyciskiem myszy w dowolnym punkcie tabeli i z podręcznego menu wybieramy polecenie Odśwież (rys. nr 8).
Otrzymamy odświeżone (zaktualizowane) dane przedstawione na rys. nr 9.
Jak widać na rysunku powyżej nasze dane się przeliczyły, zakres Sumy odpowiednio się rozszerzył i otrzymaliśmy prawidłowe wyniki.
W tym poście omówimy podsumowanie sprzedaży według dni tygodnia.
Zadanie to wykonamy na podstawie przykładowych danych z rys. nr 1.
Mamy niezbędne dla nas dane, czyli datę i wartość sprzedaży. Na tej podstawie chcemy uzyskać podsumowanie, ile transakcji odbyło się w każdym dniu tygodnia i jaka to była wartość sprzedaży. Na konkretny dzień tygodnia możemy patrzeć po jego nazwie lub po numerze (rys. nr 2).
Możemy tutaj użyć funkcji DZIEŃ.TYG, która na podstawie daty podaje dzień tygodnia. Pierwszym argumentem funkcji jest liczba_kolejna, czyli data, z której chcemy wyciągnąć dzień tygodnia. Drugi argument funkcji to [zwracany_typ], gdzie musimy zwrócić uwagę, jak są numerowane dni tygodnia. Standardowa numeracja jest tutaj określana liczbą 2, co widać na rys. nr 3.
Zapis funkcji powinien wyglądać następująco:
=DZIEŃ.TYG(A2;2)
Powyższą formułę zatwierdzamy i kopiujemy na komórki poniżej. Otrzymamy numery dni tygodnia dla poszczególnych dat przedstawione na rys. nr 4.
Jeśli będziemy mieli numerację dni tygodnia, to możemy wykorzystać dane z kolumny G. Możemy również wykorzystać funkcję TEKST i odpowiednio sformatować datę. Pierwszym argumentem funkcji TEKST jest wartość, czyli nasza data. Drugi argument to format_tekst, czyli oznaczenie formatu "dddd", które powoduje wyświetlanie pełnej nazwy tekstowej dnia tygodnia. Zapis formuły powinien wyglądać następująco:
=TEKST(A2;"dddd")
Powyższą formułę zatwierdzamy i kopiujemy na komórki poniżej. Podsumowując, jeśli datę z kolumny A, sformatujemy jako "dddd", to otrzymamy pełną nazwę dnia tygodnia (rys. nr 5).
Jak widać w danych powyżej wartości z kolumn C i D ze sobą korespondują, tzn. jeśli mamy np. wartość 3 w kolumnie C, to w kolumnie D mamy dzień o nazwie Środa itd.
Jeśli możemy sobie pozwolić na zbudowanie w danych dodatkowych kolumn (pomocniczych), to możemy użyć funkcji SUMA.WARUNKÓW lub SUMA.JEŻELI. My jednak założymy, że nie mamy możliwości zbudowania takich kolumn pomocniczych, dlatego takie obliczenia musimy wykonać wewnątrz jednej formuły. A funkcja SUMA.WARUNKÓW nie pozwala na obliczenia w jej wnętrzu.
W pierwszej kolejności musimy sprawdzić dzień tygodnia, ale dla całej kolumny A. Użyjemy do tego funkcji DZIEŃ.TYG. Zaznaczamy komórkę A2 i za pomocą skrótu klawiszowego Ctrl+Shift+Strzałka w dół zaznaczamy całą kolumnę. Podany zakres blokujemy bezwzględnie za pomocą klawisza F4. W argumencie zwracany_typ wybieramy wartość 2 (dla numeracji poniedziałek — 1, niedziela – 7). Zapis formuły powinien wyglądać następująco:
=DZIEŃ.TYG($A$2:$A$1998;2)
Ze względu na to, że pracujemy na Excelu tablicowym, po zatwierdzeniu formuły, wyniki rozleją się na odpowiednią ilość komórek (rys. nr 6).
Interesuje nas, kiedy wartości z kolumny H są równe wartością z kolumny G. Zapis formuły powinien wyglądać następująco:
=DZIEŃ.TYG($A$2:$A$1998;2)=G2
Po zatwierdzeniu formuły otrzymamy wartości logiczne PRAWDA i FAŁSZ przedstawione na rys. nr 7.
Nie ma znaczenia, jeśli nie posiadasz Excela tablicowego, to tylko ułatwia pokazywania rozlewających się formuł. Teraz musimy zamienić nasze wartości logiczne na wartości 1 i 0. Możemy to zrobić za pomocą podwójnej negacji, czyli wstawiamy dwa znaki minus przed funkcję. Zapis powinien wyglądać następująco:
=–(DZIEŃ.TYG($A$2:$A$1998;2)=G2)
Po zatwierdzeniu formuły otrzymamy wartości 0 i 1. Wartość logiczna PRAWDA zostanie zamieniona na 1, a FAŁSZ na 0 (rys. nr 8).
Teraz możemy łatwo zsumować nasze wyniki. Żebyśmy nie musieli tej formuły zatwierdzać w klasycznym Excelu kombinacją klawiszy Ctrl+Shift+Enter, korzystamy z funkcji SUMA.ILOCZYNÓW. Argumentem funkcji jest tablica1, czyli tablica uzyskana z poprzedniej formuły. Zapis powinien wyglądać następująco:
=SUMA.ILOCZYNÓW(–(DZIEŃ.TYG($A$2:$A$1998;2)=G2))
Po zatwierdzeniu formuły skrótem klawiszowym Ctrl+Enter otrzymamy ilość wszystkich transakcji przypadających na poniedziałek. Po skopiowaniu formuły w dół, otrzymamy dane dla pozostałych dni tygodnia (rys. nr 9).
Żeby obliczyć wartość sprzedaży postępujemy bardzo podobnie. Możemy skopiować poprzednią formułę. Zamiast podwójnej negacji (dwa minusy) zrobimy operację mnożenia przez kolumnę Sprzedaż, czyli zakres $B$2:$B$1998. Na chwilę usuniemy też funkcję SUMA.ILOCZYNÓW. Zapis formuły powinien wyglądać następująco:
=DZIEŃ.TYG($A$2:$A$1998;2)=G2)*$B$2:$B$1998
Po zatwierdzeniu formuły otrzymamy rozlane wartości sprzedaży z podaną wartością dla poniedziałku przedstawione na rys. nr 10.
Aby otrzymać wyniki dla wszystkich dni tygodnia musimy otoczyć poprzednią formułę funkcją SUMA.ILOCZYNÓW. Zapis formuły powinien wyglądać następująco:
Po zatwierdzeniu formuły skrótem klawiszowym Ctrl+Enter i skopiowaniu w dół otrzymamy wartości sprzedaży dla poszczególnych dni tygodnia przedstawione na rys. nr 11.
W tym poście poznamy działanie tłumacza funkcji w Excelu.
Chodzi o takie dodatkowe okienko, które najczęściej znajduje się z boku ekranu po prawej stronie (rys. nr 1).
Od kiedy w Excelu na karcie Wstawianie pojawiła się grupa poleceń Dodatki (rys. nr 2), czyli niejako sklep, możemy sobie pobierać dostępne dodatki. Jednym z takich dodatków jest właśnie Tłumacz funkcji.
Wybieramy polecenie Pobierz dodatki z karty Wstawianie (jak na rys. nr 2). Otworzy nam się okno Dodatki pakietu Office, gdzie w polu Wyszukaj wpisujemy nazwę dodatku, jakiego szukamy (rys. nr 3). Istotne jest, że sklep Office działa w języku angielskim, więc nazwę dodatku musimy podać w tym właśnie języku.
Po znalezieniu dodatku, jaki nas interesuje, klikamy przycisk Dodaj. Pojawi nam się komunikat Excela dotyczący postanowień licencyjnych i ochrony prywatności, który musimy zatwierdzić przyciskiem Kontynuuj (rys. nr 4).
Dodatek zostanie zainstalowany i zaraz po instalacji pojawi się na końcu karty Narzędzia główne, co widać na rys. nr 5 (Translator).
Zadaniem tego dodatku jest tłumaczenie nazw funkcji Excela. W oknie Functions Translator w zakładce Dictionary możemy zacząć pisać nazwę funkcji np. ZAOKR.W.GÓRĘ, pod spodem pojawi nam się angielska nazwa tej funkcji, czyli CEILING (rys. nr 6).
Analogicznie dodatek zadziała, jeśli wpiszemy angielską nazwę funkcji np. SUMPRODUCT, mianowicie zostanie ona przetłumaczona na polską funkcję SUMA.ILOCZYNÓW. Oczywiście nie jesteśmy ograniczeni do tych dwóch języków, możemy kliknąć ikonkę koła zębatego w prawym dolnym rogu okna Functions Translator. Pojawią się nam ustawienia tłumacza, gdzie w grupie Usage languages możemy ustawić dowolny język, jaki jest obsługiwany przez Excela (rys. nr 7).
W tym dodatku mamy również zakładkę Reference, czyli bibliotekę funkcji Excela. Możemy sobie wybrać kategorię funkcji, której szukamy (rys. nr 8).
Jeśli wybierzemy sobie np. kategorię Logical, to wyświetli się nam lista wszystkich dostępnych funkcji logicznych z nazwami w obu wybranych językach, czyli w naszym przypadku po polsku i angielsku (rys. nr 9).
Moim zdaniem najciekawszą funkcjonalnością tego tłumacza jest zakładka Translator, w którym możemy tłumaczyć całe formuły. Możemy skopiować sobie dowolną formułę np. =ZAOKR(B2,0), następnie wklejamy ją do pierwszego okienka. Klikamy ikonkę ze Strzalką w dół, aby Excel przetłumaczył nam formułę. W okienku poniżej pojawi nam się przetłumaczona formuła =ROUND(B2,0) (rys. nr 10). Istotne tutaj jest, aby zawracać uwagę, jakie znaki rozdzielają część całkowitą od dziesiętnej czy poszczególne argumenty.
Na dole okna jest dodatkowa opcja – Instantly translate selected sell (English > Polish). Zaznaczenie tego checkbopxa powinno sprawić, że po kliknięciu dowolnej komórki z formułą, otrzymamy w oknie Functions Translator przetłumaczoną jej wersję (rys. nr 11).
Zauważyłem jednak, że przy bardzo skomplikowanych i długich formułach mogą pojawić się błędy, czasem formuły przekraczają możliwości tłumacza. Funkcjonalność ta przydaje się, jeśli potrzebujesz przetłumaczyć funkcje w Excelu w dowolnych językach.
W tym poście pokażemy, w jaki sposób podać dni tygodnia i miesiące w innych językach.
Zadanie to wykonamy na podstawie przykładowych danych z rys. nr 1.
W przykładowych danych mamy podane daty. Po naciśnięciu skrótu klawiszowego Ctrl+1 otworzy nam się okno Formatowania komórek, gdzie w różny sposób możemy sformatować nasze dane. W polu Typ możemy wybrać sposób pokazywania danych, np. żeby pokazywał się tylko dzień, najpierw miesiąc, rok itp. W polu Ustawienia regionalne (lokalizacja) możemy ustawić sobie język dla danego formatowania. Przykładowo, ustawmy sobie Stany zjednoczone (punkt 1 na rys. nr 2), a następnie ustawmy typ formatowania ze skróconą nazwą miesiąca (punkt 2).
Teraz po przejściu w polu Kategoria na formatowanie Niestandardowe (punkt 1 na rys. nr 3), to w polu Typ oprócz standardowych oznaczeń dnia, miesiąca i roku pokazuje się jakiś dziwny kod (punkt 2).
Te niestandardowe zapisy są związane z językiem tłumaczenia. Łatwo się domyślić, że chodzi o język angielski Stanów Zjednoczonych, bo mamy znak dolara ($), język en i oznaczenie US, czyli United States. Takie ustawienia potwierdzamy przyciskiem OK. Otrzymamy dane w pierwszej kolumnie sformatowane według naszych ustawień przedstawione na rys. nr 4.
Jest możliwość różnych zapisów tych samych kodów w zależności od języka i lokalizacji, co widać na rys. nr 5.
Powyższe kody możemy wykorzystać w funkcji TEKST, która formatuje wartośćCtr z komórki. Pierwszym argumentem funkcji jest wartość, czyli data z pierwszej kolumny. Drugi argument to format_tekst, czyli znak $, następnie kod ze strony Microsoftu zapisany w nawiasach kwadratowych.
Jeśli w zapisie funkcji TEKST w drugim argumencie podamy tylko dddd, to otrzymamy dane z podanymi nazwami dni tygodnia w domyślnym języku, w jakim korzystamy z programu Excel. Zapis formuły powinien wyglądać następująco:
=TEKST(A2;"dddd")
Możemy używać kodu liczbowego albo literowego. Otrzymamy nazwy dni tygodnia w różnych językach przedstawione na rys. nr 7.
Zapis formuły dla języka polskiego powinien wyglądać następująco:
=TEKST(A2;"[$-415]dddd")
Zapis formuły dla języka angielskiego i Stanów Zjednoczonych powinien wyglądać następująco:
=TEKST(A2;"[$-409]dddd")
Zapis formuły dla języka angielskiego i Wielkiej Brytanii powinien wyglądać następująco:
=TEKST(A2;"[$-en-GB]dddd")
Zapis formuły dla języka francuskiego i Francji powinien wyglądać następująco:
=TEKST(A2;"[$-fr]dddd")
Możemy szybko zamienić dni tygodnia na miesiące. Zaznaczamy zakres B2:H13, następnie za pomocą skrótu klawiszowego Ctrl+H otwieramy okno Znajdowania i zamieniania. Przechodzimy na zakładkę Zamień (punkt 1 na rys. nr 8), następnie w polu Znajdź wpisujemy dddd (punkt 2), a w polu Zamień na wpisujemy mmm (punkt 3). Takie ustawienia zatwierdzamy przyciskiem Zamień wszystko (punkt 4).
Wyświetli nam się komunikat o ilości zamienionych danych przedstawiony na rys. nr 9, który zatwierdzamy przyciskiem OK.
Otrzymamy dane ze zamienionymi nazwami dni tygodnia na nazwy miesięcy w wybranych językach przedstawione na rys. nr 10.
Podsumowując wystarczy odpowiednie formatowanie, aby za pomocą funkcji TEKSTpokazać nazwy dni tygodnia czy miesięcy w różnych językach.
W tym poście nauczymy się zliczać wszystkie litery w tekście, czy też dowolne znaki.
Najwięcej problemu może być z literami, bo mamy litery małe i wielkie, poza tym w polskim języku mamy litery takie jak ą, ę, ś, ć, ń, ź, ż, ł, ó, czyli wszystkie te litery z ogonkami i kreseczkami. Najprostszą metodą na wykonanie tego zadania jest wypisanie wszystkich możliwych znaków w postaci wielkich liter. Temat ten omówimy na podstawie przykładowych danych z rys. nr 1.
W pierwszym kroku musimy nasz tekst rozbić na poszczególne znaki. Do tego celu potrzebujemy ciągu liczbowego od 1 do wartości odpowiadającej długości naszego tekstu. Najpierw użyjemy funkcji DŁ, która zwraca liczbę znaków w ciągu znaków. My jednak potrzebujemy zbudować ciąg wartości. Użyjemy tutaj właściwości funkcji WIERSZ, która polega na tym, że jeśli w argumencie odwołanie zaznaczymy zakres A1:A8, to funkcja zwróci tyle wartości, ile zaznaczyliśmy wierszy w tym zakresie. Przykładowy zapis formuły to =WIERSZ(A1:A8) (rys. nr 2)
Zaznaczyliśmy w zakresie 8 wierszy, więc funkcja WIERSZ w Excelu tablicowym rozlewa się na te właśnie wiersze. Musimy dla tej funkcji zbudować odpowiedni zakres. Potrzebujemy do tego funkcji ADR.POŚR (adres pośredni). Możemy tutaj wykluczyć kolumny, interesują nas tylko wiersze. Argumentem funkcji jest adres_tekst, czyli zaczynami od "1:", od pierwszego wiersza, a dwukropek oznacza, że będziemy szli dalej do kolejnych wierszy. Ten tekst łączymy z funkcją DŁ dla tekstu z komórki A2. Zapis formuły powinien wyglądać następująco:
=ADR.POŚR("1:"&DŁ(A2))
Jeśli podejrzymy sobie wynik formuły funkcji ADR.POŚR za pomocą skrótu klawiszowego F9 otrzymamy ilość znaków 1:11, co widać na rys. nr 3.
Wychodzimy z podglądu formuły za pomocą skrótu klawiszowego Ctrl+Z. Powyższą funkcję musimy włożyć do funkcji WIERSZ, bo interesuje nas liczba wierszy z tego zakresu. Zapis formuły powinien wyglądać następująco:
=WIERSZ(ADR.POŚR("1:"&DŁ(A2)))
Po zatwierdzeniu formuły otrzymamy dane przedstawione na rys. nr 4.
W Excelu tablicowym wyniki rozlewają się automatycznie na odpowiednią ilość komórek (wierszy). W kolejnym kroku musimy dołożyć funkcję FRAGMENT.TEKSTU. Pierwszym argumentem funkcji jest tekst, czyli tekst z komórki A2. Drugi argument to liczba.początkowa, czyli tablica danych, którą zbudowaliśmy za pomocą funkcji WIERSZ (W Excelu tablicowym moglibyśmy użyć funkcji SEKWENCJA, która byłaby prostsza). Trzeci argument funkcji to liczba_znaków, czyli wartość 1, bo chcemy każdy znak wyciągnąć pojedynczo. Zapis formuły powinien wyglądać następująco:
Wyniki funkcji zostały przedstawione na rys. nr 5.
Otrzymaliśmy tablicę, w której każdy znak z tekstu został umieszczony w osobnym wierszu. Teraz będziemy chcieli sprawdzić, czy te znaki znajdują się w przygotowanym przez nas wzorze (rys. nr 6).
Standardowo powinniśmy użyć funkcji ZNAJDŹ, jednak nie możemy tego zrobić, bo ona uwzględnia wielkość liter. Więc musimy użyć drugiej funkcji wyszukującej, czyli SZUKAJ.TEKST, która nie zwraca uwagi na wielkość liter. Pierwszym argumentem funkcji jest szukany_tekst, czyli litery uzyskane z funkcji FRAGMENT.TEKSTU. Drugi argument funkcji to obejmujący_tekst, czyli odwołanie do komórki I2 zablokowane bezwzględnie, gdzie wypisaliśmy wszystkie możliwe znaki. Zapis formuły powinien wyglądać następująco;
Po zatwierdzeniu formuły otrzymamy rozlane wartości, gdzie dana litera została znaleziona (rys. nr 7).
Otrzymaliśmy liczbę 20, która odpowiada literce A, potem L ma przypisaną liczbę 28, ponownie A, czyli 20. Następnie pojawia się błąd argumentu #ARG!, który wynika z tego, że w naszych wypisanych literach nie było spacji. Żeby pozbyć się tych błędów musimy użyć funkcji CZY.LICZBA, której argumentem jest wartość, czyli wyniki z naszej poprzedniej formuły. Zapis formuły powinien wyglądać następująco:
Otrzymamy wyniki z wartościami logicznymi przedstawione na rys. nr 8.
Otrzymaliśmy wynik PRAWDA wszędzie tam, gdzie wcześniej mieliśmy liczbę, a wynik FAŁSZ, kiedy w danych był błąd argumentu. Pozostaje nam policzyć wszystkie wartości logiczne PRAWDA. Użyjemy do tego funkcji SUMA.ILOCZYNÓW, ale najpierw musimy zamienić wartości logiczne na liczby 1 i 0 (1‑PRAWDA, 0 — FAŁSZ). Możemy to zrobić za pomocą podwójnej negacji, czyli wpisujemy przed formułą dwa znaki minus. Zapis formuły powinien wyglądać następująco:
Po zatwierdzeniu formuły i skopiowaniu na wiersze poniżej otrzymamy ilość znaków w każdym wierszu, co widać na rys. nr 10.
Jeśli w formule nie chcemy mieć odwołania do komórki I2, to możemy wstawić tekst do naszej formuły w podwójnym cudzysłowie. Taka formuła też będzie działać prawidłowo. Zapis formuły powinien wtedy wyglądać następująco:
Jeśli chcielibyśmy, aby takie znaki jak pojedynczy cudzysłów, czy kropka, przecinek itp. Też się zliczały, wystarczy, że dopiszemy je do naszego ciągu znaków z komórki I2.
Podsumowując, dzięki temu, że korzystamy tutaj z funkcji SZUKAJ.TEKST wystarczy jeden raz wypisać wszystkie litery. Nie ma znaczenia, czy są to wielkie, czy małe litery.