Quantcast
Channel: Malinowy Excel
Viewing all 291 articles
Browse latest View live

Przeszukiwalna lista wyboru z podpowiedziami (formularz VBA)

$
0
0

Czyli sposób na łatwe szukanie klienta z VBA

Temat, o który już dawno mnie pytaliście, ale przyznaję szczerze: nie chciało mi się za niego zabierać :). W końcu jednak nadszedł czas! Obecnie, z nowym mechanizmem przeliczania w Excelu 365, zrobienie czegoś takiego za pomocą formuł nie jest już wielkim wyzwaniem. Natomiast wyzwaniem jest to, że nadal nie wszyscy mają Excela w tej wersji. I szybko to się nie zmieni… Dlatego chciałabym, aby rozwiązanie było możliwe w każdej wersji Excela.

Ok, ale o co w ogóle chodzi?

O przeszukiwalną listę. Chciałabym napisać rozwijaną, ale to za bardzo ograniczyłoby mi możliwości rozwiązania, choć na pewno byłoby najbardziej użyteczne.

Chodzi o zrobienie takiej listy wyboru np. klientów, aby po wpisaniu kilku liter (niekoniecznie początkowych), Excel wylistował klientów, zawierających wpisane litery. Z nich użytkownik wybiera klienta, który ma być wpisany do komórki.

Chodzi o coś takiego:

VBA Przeszukiwalna lista klientów

 

Czyli po dwukrotnym kliknięciu w kolumnie z klientami pojawia się formularz, na którym możemy wpisać szukaną frazę. Nasz wybór zostanie wpisany do aktywnej komórki arkusza.

Zadanie do najłatwiejszych nie należy, rozwiązanie będzie złożone i długie (dlatego tak długo zwlekałam ;)). Ale damy radę! Do dzieła!

Omówienie formatki i założenia

Formatka to prosta tabela o nazwie tbFaktury w arkuszu Dane, oraz jednokolumnowa tabela tbKlienciw arkuszu Klienci:

Przeszukiwalna lista formularz VBA-Formatka

Przeszukiwalna lista formularz VBA-Formatka

A oto założenia:

  1. Formularz wywoływany na zdarzenie podwójnego kliknięcia w nazwanym zakresie (kolumna Klient w tabeli tbFaktury)
  2. Kolumna Klient w tabeli tbFaktury jest nazwana ZakresKlientow
  3. Kolumna Klienci w tabeli tbKlienci jest nazwana Klienci

A kolejne kroki użytkownika są takie:

  1. Użytkownik dwuklika w komórkę, do której chce wstawić klienta
  2. Pojawia się formularz
  3. Wpisuje szukaną frazę
  4. Wybiera z listy klienta, zatwierdza
  5. Klient zostaje wstawiony do aktywnej komórki

Zacznijmy więc od stworzenia formularza.

Tworzenie formularza przeszukiwalnej listy

1. W tym celu, w oknie VBA (Alt + F11), w naszym projekcie, tworzymy nowy formularz: Insert/UserForm.

2. Nazywamy go frmSzukaj, w okienku Properties:

Nazywanie formularza

Nazywanie formularza

3. A teraz prace plastyczno-techniczne, czyli umieszczanie kontrolek na formularzu:

Potrzebujemy następujące kontrolki (nazwy zmieniamy tak, jak w przypadku formularza – w okienku Properties):

  1. Label, czyli etykieta, czyli nasz tekst Wpisz szukany tekst.
  2. TextBox, czyli pole tekstowe, do którego użytkownik wpisuje szukany fragment nazwy klienta (nazwałam go w kodzie txtSzykanyTekst)
  3. CommandButton, czyli przycisk Szukaj, który użytkownik będzie naciskał, gdy wpisze szukaną frazę (nazwa: btnSzukaj)
  4. ListBox, czyli lista, na której wyświetlą się znalezieni klienci, a użytkownik będzie mógł na nim wybrać klienta (nazwa: lbxPropozycje)
  5. CommandButton, czyli przycisk, który umożliwi wstawienie wybranego klienta do arkusza i zamknięcie formularza (nazwa: btnWstaw).

Poniższy obrazek pokazuje te elementy:

Kontrolki formularza

Kontrolki formularza

Trochę to zagmatwane, ale da się zrobić :).

W przypadku obu przycisków – btnSzukaj i btnWstaw, ustawiamy je jako nieaktywne. Staną się aktywne dopiero, gdy użytkownik:

  • btnSzukaj – wpisze cokolwiek do pola tekstowego
  • btnWstaw – wybierze klienta z listy.

Aby ustawić tę właściwość, użyj okienka Properties i ustaw Enabled na false:

Przyciski na początku mają być nieaktywne

Przyciski na początku mają być nieaktywne

Aktywacja przycisku SZUKAJ – zdarzenie pola tekstowego

To teraz napiszmy zdarzenie, które spowoduje aktywację tych przycisków. Dla przycisku SZUKAJ, czyli od btnSzukaj, będzie to zdarzenie Change pola tekstowego txtSzykanyTekst. Zdarzenia elementów formularza tworzymy tak samo, jak zdarzenia np. arkusza. Dwukrotnie klikamy na element i z list nad okienkiem kodu wybieramy odpowiednie zdarzenie.

Aktywacja przycisku SZUKAJ

Aktywacja przycisku SZUKAJ

Następnie wpisujemy kod (widoczny na obrazku powyżej), aktywujący kontrolkę btnSzukaj, czyli:

Private Sub txtSzykanyTekst_Change()
     btnSzukaj.Enabled = True
End Sub

Aktywacja przycisku WSTAW – zdarzenie listy

To samo robimy dla listy lbxPropozycje, zdarzenie Change, czyli:

Private Sub lbxPropozycje_Change()
   btnWstaw.Enabled = True
End Sub

Oprogramowanie przycisku SZUKAJ

Teraz pora na określenie co ma się stać. gdy user naciśnie przycisk Szukaj, czyli btnSzukaj.

Ma się stać tak:

  1. Czyszczenie listy (na wszelki wypadek, gdyby user szukał różnych tekstów),
  2. Zmiana wielkości liter szukanego tekstu (VBA jest case sensitive!)
  3. Przeszukanie listy klientów w poszukiwaniu odpowiednich – jak pasuje → wpisz na listę

Powyższe kroki wykonuje ten kod:

Private Sub btnSzukaj_Click()
    Dim Klienci As Range, Komorka As Range
    Dim SzukanyTekst As String, ZnalezionyTekst As String
    
    lbxPropozycje.Clear
    
    SzukanyTekst = LCase(txtSzykanyTekst.Value)
    
    Set Klienci = Sheets("Klienci").Range("Klienci")
        Klienci.Sort Klienci.Cells(1, 1), xlAscending, Header:=xlYes
        
        For Each Komorka In Klienci
            ZnalezionyTekst = LCase(Komorka.Value)
            If InStr(1, ZnalezionyTekst, SzukanyTekst) > 0 Then
                lbxPropozycje.AddItem Komorka.Value
            End If
        Next
End Sub

Oprogramowanie przycisku WSTAW

Ok. Zakładamy, że user wybrał klienta, naciska przycisk Wstaw i co teraz? Teraz powinniśmy:

  1. wstawić wybranego klienta do aktywnej komórki arkusza,
  2. zamknąć formularz.

Czyli tak:

Private Sub btnWstaw_Click()
    Dim WybranyTekst As String
    
    WybranyTekst = lbxPropozycje.Value
    
    ActiveCell.Value = WybranyTekst
    Unload frmSzukaj
      
End Sub

I to by było na tyle, jeśli chodzi o to, co się dzieje na formularzu. Teraz tylko pozostaje pytanie: OK, ale jak wywołać formularz?

Wywołanie formularza – zdarzenie arkusza

Wywołamy go poprzez dwukrotne kliknięcie w kolumnie z klientami w tabeli. Przypomnę, że ten zakres nazwałam ZakresKlientow.

W tym celu należy utworzyć zdarzenie BeforeDoubleClick w arkuszu, gdzie znajduje się nasza tabela. U mnie to jest arkusz Dane.

A kod tego zdarzenia to:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim ZakresKlientow As Range
    
    Set ZakresKlientow = Me.Range("ZakresKlientow")
    
    If Not Intersect(Target, ZakresKlientow) Is Nothing Then
        Cancel = True
        frmSzukaj.Show
    End If
    
End Sub

I to jest wszystko! Trochę kodu to rozwiązanie wymaga i do najprostszych nie należy.

Powiązane produkty

  • Nagrywanie makr – podczas tej dwugodzinnej lekcji dowiesz się jak w sprytny sposób nagrywać całkiem inteligentne makra
  • O obiekcie tabela słów kilka – podczas tej lekcji pokazuję czym jest obiekt tabela w Excelu i dlaczego warto z niego korzystać. Daje nam on ogromne możliwości dynamizowania naszych arkuszy, a wiele nowych funkcjonalności Excela wręcz wymaga przechowywanie danych w tymże obiekcie (np. Power Query). Must have każdego użytkownika Excela!
  • Kurs Excel w codziennej pracy – mający na celu uporządkować Twoją wiedzę na temat Excela. Jest świetny zarówno dla osób, które chcą uporządkować swoją wiedzę, zdobywaną do tej pory “po omacku”, jak i takich, które dopiero zaczynają swoją przygodę z Excelem.

 

Plik do pobrania (zip):

MalinowyExcel VBA Lista z podpowiedziami dw.zip

 

 

I film na Youtoubie, gdzie pokazuję powyższe rozwiązanie:

 

 


Kiedy pracownik może przejść na emeryturę? Określanie daty

$
0
0

Czyli dwie ciekawe funkcje daty

Załóżmy, że mamy określić daty, kiedy nasi pracownicy mogą przejść na emeryturę. Jedynym naszym kryterium w tym wypadku jest wiek i płeć pracownika. Czyli kobieta może przejść na emeryturę w wieku 60 lat, mężczyzna natomiast – w wieku 65 lat.

Dostajemy z systemu następujące informacje:

  • imię i nazwisko pracownika
  • płeć,
  • rok, miesiąc i dzień urodzenia.

Na tej podstawie mamy określić kiedy pracownik może przejść na emeryturę. Chcemy dostać coś takiego:

Kiedy pracownik na emeryturę - Cel

Do tego obliczymy sobie jeszcze ile pełnych lat pracy zostało każdemu pracownikowi oraz zaznaczymy kolorem tych, którzy już osiągnęli wiek emerytalny.

Formatka

Z systemu dostajemy dane na takiej formatce:

Malinowy Excel w HR Kiedy pracownik na emeryturę Formatka

Formatka

Z zakresu, który otrzymałam z systemu stworzyłam obiekt tabela o nazwie tbPracownicy. Dodatkowo w kolumnie C mam żółte komórki, w których określam w jakim wieku są kobiety i mężczyźni, kiedy mogą przejść na emeryturę. Określam też dzisiejszą datę (można z powodzeniem użyć funkcji DZIŚ).

Aby obliczyć datę przejścia na emeryturę w Excelu, najpierw potrzebujemy określić datę urodzenia pracownika w jednej komórce. W zależności od płci pracownika – będzie mógł on przejść na emeryturę albo w wieku 60 lat (kobieta), albo 65 (mężczyzna).

Określanie daty urodzenia pracownika

W kolumnie H mojego arkusza utworzę kolumnę Data ur., w której określę datę urodzenia pracownika. Użyję w tym celu funkcji DATA, która potrafi stworzyć datę na podstawie roku, miesiąca i dnia podanych w innych komórkach. Funkcja ta radzi sobie nawet z tekstami.

Formuła w komórce H8 wygląda tak:

=DATA([@[Rok ur.]];[@[Mc ur.]];[@[Dzień ur.]])

A jeśli nie korzystasz z tabel (i odwołań strukturalnych w nich), wpisz taką formułę:

=DATA(E8;F8;G8)

Powstaje nam następująca kolumna:

Malinowy Excel w HR Kiedy pracownik na emeryturę Określanie daty urodzenia

Określanie daty urodzenia

Określanie daty przejścia na emeryturę

Teraz, na podstawie płci pracownika określimy datę za 60 lub 65 lat, zaczynając od daty urodzenia pracownika. Płeć mamy, więc najprościej za pomocą funkcji JEŻELI ustalimy liczbę lat, a za pomocą funkcji NR.SER.DATY ustalimy konkretną datę.

Zacznę formułę od NR.SER.DATY, gdyż to datę docelowo mam ustalić. Zawsze moim punktem startowym będzie data urodzenia pracownika. Punkt końcowy muszę tej funkcji podać w miesiącach, zatem pomnożę 12 razy 60 lub 65 – w zależności od płci.

Formuła w kolejnej kolumnie – Data emerytury – wygląda tak:

=NR.SER.DATY([@[Data ur.]];12*JEŻELI([@Płeć]="K";$C$3;$C$4))

A tak wyniki:

Malinowy Excel w HR Kiedy pracownik na emeryturę Określanie daty emerytury

Określanie daty emerytury

Wyróżnianie kolorem osób, które osiągnęły wiek emerytalny

Ale, ale! Zobacz na wiersz 17, w którym pani Ewa już powinna być na emeryturze (mamy kwiecień, a ona 60 lat skończyła w marcu). Chciałabym takie osoby wyróżnić kolorem. Użyję do tego formatowania warunkowego. W tym celu:

1. Zaznaczę kolumnę Data emerytury tabeli

2. Wejdę do Narzędzia główne/ Formatowanie warunkowe/ Nowa reguła/ Formatuj tylko komórki zawierające

3. Ustawię regułę, że wartość komórki ma być mniejsza lub równa dzisiejszej dacie. Możesz z powodzeniem użyć funkcji DZIŚ do jej określenia. Ja tę datę mam w komórce, więc wskażę tę komórkę – C5.

4. Następnie wybierz sposób wyróżnienia (przycisk Formatuj)

5. Zatwierdź OK.

Wszystkie powyższe kroki przedstawia rysunek:

Malinowy Excel w HR Kiedy pracownik na emeryturę Reguła wyróżniania osób w wieku emerytalnym

Reguła wyróżniania osób w wieku emerytalnym

Wynik tej reguły wygląda następująco:

Malinowy Excel w HR Kiedy pracownik na emeryturę Wyróżnienie osób w wieku emerytalnym

Wyróżnienie osób w wieku emerytalnym

Ile pełnych lat zostało pracownikowi do emerytury?

To teraz zostało tylko określić, ile pełnych lat zostało pracownikowi do emerytury? Do tego użyjemy funkcji-widmo: DATA.RÓŻNICA. Dlaczego widmo? Ponieważ nigdzie w Excelu jej nie znajdziesz: w menu Formuły, nie ma swojego kreatora czy nawet podpowiedzi składni! Dlaczego? Nie mam pojęcia i strasznie się temu dziwię…

Funkcja ta ma za zadanie obliczanie różnicy między dwiema datami. Wynik może wyświetlić na różne sposoby: w dniach, miesiącach, latach,… Nas interesują pełne lata, więc wpiszmy ręcznie taką formułę:

=JEŻELI([@[Data emerytury]]<=$C$5;0;DATA.RÓŻNICA($C$5;[@[Data emerytury]];"y"))

Całość wrzuciłam w funkcję JEŻELI, aby dla osób, które są już w wieku emerytalnym wyświetlić, że mają do przepracowania 0 pełnych lat. Gdybym tego nie zrobiła – wyświetliłby się przy nich błąd.

Tak wygląda wynik:

Malinowy Excel w HR Kiedy pracownik na emeryturę WYNIK

WYNIK

Przydatne? 🙂

 

Powiązane produkty

  • Funkcje dat – excelowy niezbędnik – lekcja omawiająca najważniejsze funkcje dat, które pozwolą Ci w prosty sposób dokonywać obliczeń na datach, bez kombinowania jak koń pod górę.
  • Formatowanie warunkowe – podczas tej lekcji nauczysz się korzystać z cudownego narzędzia, jakim jest formatowanie warunkowe. Będziesz umiał(a) korzystać zarówno z wbudowanych opcji, np. dotyczących dat, jak również napiszesz swoje własne reguły (np. zaznaczanie całych wierszy z danymi)
  • O obiekcie tabela słów kilka – podczas tej lekcji pokazuję czym jest obiekt tabela w Excelu i dlaczego warto z niego korzystać. Daje nam on ogromne możliwości dynamizowania naszych arkuszy, a wiele nowych funkcjonalności Excela wręcz wymaga przechowywanie danych w tymże obiekcie (np. Power Query). Must have każdego użytkownika Excela!

 

Plik do pobrania:

MalinowyExcel Kiedy pracownik może pójść na emeryturę dw.xlsx

 

I film na Youtoubie, gdzie pokazuję powyższe rozwiązanie:

 

 

 

Lista rozwijana z uprawnieniami cz.1.

$
0
0

Czyli tylko osoby znające hasło mogą edytować zakres

Załóżmy, że akceptacja sprzedaży w naszej firmie odbywa się trójetapowy: najpierw sprzedaż akceptuje kierownik Działu Obsługi Klienta (DOK), następnie Dyrektor Sprzedaży (DS), a na końcu kierownik Działu Kontroli Kredytowej (KKK). I ten ostatni ma decydujące zdanie: w końcu zależy nam na sprzedaży a nie dobroczynności tutaj.

Formatka z zamówieniami wygląda następująco:

Zależna Lista rozwijana z uprawnieniami1-Formatka

Formatka

W ostatnich trzech kolumnach decydenci wpisują Tak lub Nie. I tylko decydenci mogą to zrobić.

Do rozwiązania tego problemu potrzebujemy listy rozwijanej i dodatkowo ochrony zakresów w arkuszu i oczywiście ochronę arkusza.

Do dzieła!

Założenia

Przyjęłam następujące założenia (zarówno “miękkie”, jak i “twarde”):

  • dane wpisywane są do obiektu tabela nazwanego jako tbAkceptacje
  • nazwane zakresy (ułatwią później odwoływanie się do nich):
    • kolumna Akcept DOKAkceptDOK
    • kolumna Akcept DSAkceptDS
    • kolumna Akcept KKK → AkceptKKK
    • zakres np. J6:J7 jako TakNie (ja go umieściłam w tym samym arkuszu dla ułatwienia, Ty możesz umieścić go np. w jakimś ukrytym arkuszu)
  • tylko osoby znające hasło mogą uzupełniać powyższe zakresy
  • do tej tabeli nie będą już dopisywane/edytowane żadne dane, poza akceptacjami.

Tworzenie list rozwijanych

Lista rozwijane mają się wyświetlać zawsze i ma na nich być wybór między Tak i Nie. Zastosujemy więc najprostsze sprawdzanie poprawności typu lista.

  1. Zaznacz kolumny AKCEPT DOK, AKCEPT DS i AKCEPT DKK w tabeli
  2. Wybierz menu Dane/ Poprawność danych
  3. Dozwolone ma być Lista
  4. Źródło to odwołanie do zakresu TakNie:
Lista rozwijana z uprawnieniami1-Tworzenie list rozwijanych

Tworzenie list rozwijanych

Po zatwierdzeniu dostajemy najzwyczajniejszą listę rozwijaną.

Ochrona zakresów komórek

Teraz jak już listy rozwijane działają, możemy zająć się ochroną.

Chcemy, aby tylko osoby znające hasło mogły edytować zakresy akceptacji (które dla “zwykłego śmiertelnika” są nieedytowalne). Zwykła ochrona arkusza działa zerojedynkowo: komórkę można edytować, albo nie. My tutaj chcemy pójść krok dalej, więc oprócz zwyczajnej ochrony arkusza, dorzucimy ochronę zakresów: domyślnie zakresy będą chronione, chyba że użytkownik zna hasło.

Dla każdego zakresu akceptacji (DOK, DS i DKK) wykonamy takie same operacje, jednak dla każdego zakresu oddzielnie. Pokażę to na przykładzie DOK.

  1. (Najlepiej) zaznacz zakres, który ma być edytowalny po podaniu hasła
  2. Wejdź do menu Recenzja. Zezwalaj na edycję zakresów, kliknij przycisk Nowy:

    Lista rozwijana z uprawnieniami1-Określanie hasła edytowania zakresu1

    Określanie hasła edytowania zakresu krok 1

  3. Nazwij ochronę, określ zakres (po zaznaczeniu jego adres sam wskoczy do tego pola), określ hasło i naciśnij OK.

    Lista rozwijana z uprawnieniami1-Określanie hasła edytowania zakresu2

    Określanie hasła edytowania zakresu krok 2

  4. Dodaj kolejny zakres, jeśli potrzeba.

Jeśli chcesz, możesz określić którzy użytkownicy w Twojej firmie mają mieć dostęp do danego zakresu bez podania hasła. Określasz ich lokalizację i nazwę użytkownika (tutaj najlepiej skontaktować się z “informatykami”).

W tym celu należy użyć przycisku Uprawnienia, a następnie wybrać szukanego użytkownika:

Lista rozwijana z uprawnieniami1-Określanie użytkowników bez hasła

Określanie użytkowników, którzy nie muszą podawać hasła do zakresu

Ten użytkownik po prostu nie będzie musiał podawać hasła, aby edytować zakres. Jeśli jednak nie określisz użytkowników – wystarczy, że podasz konkretnym osobom hasło do zakresu.

Zakładanie ochrony arkusza

Wszystko to pięknie wygląda, jednak koniecznie trzeba pamiętać, aby po tych wszystkich operacjach ochronić arkusz. W przeciwnym razie i tak wszyscy będą mogli edytować każdy zakres).

Aby to zrobić wejdź do menu Recenzja/Chroń arkusz i podaj hasło ochrony. To już najprostszy etap :). Zapisz plik i ciesz się wynikiem!

W kolejnym wpisie pokażę Ci jak zrobić, aby zablokować możliwość zmiany zdania dla DOK i Dyrektora Sprzedaży. Jeśli Kontrola Kredytowa zatwierdzi zamówienie – DOK i DS nie będą już mogli zmienić swojej decyzji. Użyję do tego makra (VBA), które będzie miało za zadanie to kontrolować. Ale to w kolejnym tygodniu :).

 

Powiązane produkty

  • O obiekcie tabela słów kilka – podczas tej lekcji pokazuję czym jest obiekt tabela w Excelu i dlaczego warto z niego korzystać. Daje nam on ogromne możliwości dynamizowania naszych arkuszy, a wiele nowych funkcjonalności Excela wręcz wymaga przechowywanie danych w tymże obiekcie (np. Power Query). Must have każdego użytkownika Excela!
  • Listy rozwijane – podczas tej lekcji pokazuję jak zrobić listę rozwijaną zarówno taką, jak we wpisie (czyli sprawdzanie poprawności), jak i formant formularza, oraz jak je wykorzystać np. na wykresach.
  • Walidacja danych – triki – podczas tej lekcji opowiadam o ciekawych zastosowaniach sprawdzania poprawności, którego lista rozwijana w komórce (użyta w tym wpisie) jest opcją. Ale narzędzie to potrafi dużo, duuuużo więcej!
  • Kurs Excel w codziennej pracy – mający na celu uporządkować Twoją wiedzę na temat Excela. Jest świetny zarówno dla osób, które chcą uporządkować swoją wiedzę, zdobywaną do tej pory “po omacku”, jak i takich, które dopiero zaczynają swoją przygodę z Excelem.

 

Plik do pobrania:

MalinowyExcel Lista rozwijana z uprawnieniami cz1 dw.xlsx

 

I film na Youtoubie, gdzie pokazuję powyższe rozwiązanie:

(pojawi się wkrótce)

 

 

Lista rozwijana z uprawnieniami cz. 2 (VBA)

$
0
0

Czyli jeśli góra zatwierdziła – nie można edytować!

W poprzednim wpisie pokazywałam jak zahasłować wybrane zakresy komórek w arkuszu tak, aby mogły je edytować jedynie osoby, które znają hasło. Dzisiaj pokażę kod VBA, który nie pozwoli edytować komórek, jeśli konkretna komórka została już uzupełniona.

W naszej sytuacji akceptowania warunków zamówień będzie to działać tak, że jeśli Kierownik Kontroli Kredytowej (KKK) zaakceptuje umowę (zaakceptuje = Tak), osoby wcześniej akceptujące (Dział Obsługi Klienta (DOK) i Dyrektor Sprzedaży (DS)) nie będą mogli już zmieniać swoich decyzji. Czyli, krótko mówiąc, zamówienie zostanie finalnie zaakceptowane.

Ma to działać tak:

MalinowyExcel Listy rozwijane z uprawnieniami cd VBA Wynik

Zabierzmy się więc za stworzenie takiego rozwiązania.

Założenia

Są takie same jak w poprzednim wpisie, a w szczególności:

  • nazwane zakresy kolumn tabeli: AkceptDS, AkceptDOK

Pamiętajmy też, że na arkusz założona jest ochrona i chronione są zakresy (z hasłem). Zanim użytkownik zmienić wartość w komórce, a raczej będzie próbował – pojawi się monit o hasło. Monit ten pojawi się tylko raz w jednej sesji otwarcia pliku.

Lista rozwijana z uprawnieniami – kod VBA

Sprawdzanie, czy KKK zaakceptował zamówienie ma się odbywać wtedy, gdy użytkownik próbuje zmienić wartość w zakresie AkceptDS lub AkceptDOK. Wtedy więc chcemy uruchomić makro. Triggerem, czyli akcją uruchamiającą ma być więc zdarzenia arkusza: zmiana wartości komórki, czyli Change. Tam właśnie umieścimy nasz kod. O tym, jak dodawać zdarzenia arkusza pisałam np. tutaj.

Sam kod ma sprawdzać:

  1. czy komórka, którą próbuje zmienić user jest w zakresie AkceptDS lub AkceptDOK
  2. jeśli tak, to cofnąć operację wpisania wartości
  3. wyświetlić komunikat

Jak widać niewiele :). Dorzucimy sobie jeszcze kilka technicznych kwestii jak obsługa błędów i wyłączanie zdarzeń (żeby makro się nie zapętlało). Ale najpierw podstawa, czyli:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Zakres As Range
    
    Set Zakres = Union(Me.Range("AkceptDOK"), Me.Range("AkceptDS"))
  
    If (Not Intersect(Target, Zakres) Is Nothing) And Me.Cells(Target.Row, 7).Value = "Tak" Then
       
        Application.Undo
        
        MsgBox "Nie możesz edytować już tych danych! KKK zaakceptował!", vbExclamation, "Niedozwolona operacja"
        
    End If
    
End Sub

Powyższy kod  po pierwsze definiuje zakres, w którym mamy sprawdzać zmiany: zmienna Zakres, która łączy – Union – oba interesujące nas zakresy w arkuszu.

Następnie sprawdza, czy zmieniona komórka (Target) jest w tym zakresie i czy wartość komórki w kolumnie nr 7 (tam są decyzje KKK) jest Tak. Jeśli to się zgadza – cofa operację i wyświetla komunikat o błędzie w okienku z wykrzyknikiem (vbExclamation).

Teraz tylko wspomniane wcześniej kwestie techniczne. Gdybyśmy uruchomili ten kod – zapętlałby się. Dlaczego? Ponieważ cofnięcie operacji też jest zmianą komórki. A na każdą zmianę komórki nasze makro jest odpalane. Trzeba więc wyłączyć na tę chwilkę obsługę zdarzeń w arkuszu. Jest to jedna linijka, którą wrzucimy do if-a, który teraz będzie wyglądał tak:

    If (Not Intersect(Target, Zakres) Is Nothing) And Me.Cells(Target.Row, 7).Value = "Tak" Then
        
        Application.EnableEvents = False
        Application.Undo
        
        MsgBox "Nie możesz edytować już tych danych! KKK zaakceptował!", vbExclamation, "Niedozwolona operacja"
        
    End If

Ok. Zdarzenia wyłączyliśmy. Dalej w kodzie cofamy operację, wyświetlamy komunikat, ale… trzeba jeszcze te zdarzenia włączyć, czyli po sobie posprzątać :). Za if-em dodamy więc linijkę włączającą obsługę błędów, o tak:

    Application.EnableEvents = True

Jeszcze warto dorzucić tutaj obsługę błędów, jakby użytkownik np. postanowił zmienić kilka komórek jednocześnie. Odpowiada za to instrukcja On Error GoTo Obsluga, gdzie Obsluga to miejsce w kodzie, do którego mamy przejść, gdy napotkamy błąd. Czyli miejsce, gdzie przywracamy obsługę zdarzeń. Całość wygląda tak:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Zakres As Range
        
    On Error GoTo Obsluga
    
    Set Zakres = Union(Me.Range("AkceptDOK"), Me.Range("AkceptDS"))
  
    If (Not Intersect(Target, Zakres) Is Nothing) And Me.Cells(Target.Row, 7).Value = "Tak" Then
        
        Application.EnableEvents = False
        Application.Undo
        
        MsgBox "Nie możesz edytować już tych danych! KKK zaakceptował!", vbExclamation, "Niedozwolona operacja"
        
    End If
    
Obsluga:
    Application.EnableEvents = True
    
End Sub

I to tyle. Jak widać kod krótki :).

Mam nadzieję, że Ci się przyda!canv

 

Powiązane produkty

  • Listy rozwijane – podczas tej lekcji pokazuję jak zrobić listę rozwijaną zarówno taką, jak we wpisie (czyli sprawdzanie poprawności), jak i formant formularza, oraz jak je wykorzystać np. na wykresach.
  • Nagrywanie makr – podczas tej dwugodzinnej lekcji dowiesz się jak w sprytny sposób nagrywać całkiem inteligentne makra
  • Kurs Excel w codziennej pracy – mający na celu uporządkować Twoją wiedzę na temat Excela. Jest świetny zarówno dla osób, które chcą uporządkować swoją wiedzę, zdobywaną do tej pory “po omacku”, jak i takich, które dopiero zaczynają swoją przygodę z Excelem.

 

Plik do pobrania:

MalinowyExcel Lista rozwijana z uprawnieniami cd VBA dw.zip

 

I film na Youtubie, gdzie pokazuję powyższe rozwiązanie:

 

 

 

Pokaż miesiące, w których nie ma sprzedaży w tabeli przestawnej

$
0
0

Czyli jedna prosta opcja, którą będziesz wychwalać pod niebiosa 🙂

Jak dowiedziałam się o tej opcji – cieszyłam się jak małe dziecko! Ileż razy wstawiałam do danych sztuczne dane tylko po to, aby w tabeli przestawnej wyświetlić każdy miesiąc – nawet taki, w którym nie było sprzedaży… Jak się okazuje – wcale nie trzeba tak robić :). Wystarczy włączyć prostą opcję w tabeli przestawnej.

Jeśli tej opcji nie włączymy, wynik zarówno tabeli przestawnej i wykresu przestawnego może być taki:

Wyświetlanie miesiący bez sprzedaży tabela przestawna - przedstawienie problemu

Miesiące bez sprzedaży nie są wyświetlane…

A tak nie chcemy – łatwiej będzie nam analizować sprzedaż klientów po miesiącach, kiedy będziemy widzieli wszystkie 12 miesięcy, a nie tylko te, w których była sprzedaż. Brak sprzedaży w danych miesiącach jest ważną informacją!!!

A jak jeszcze dorzucimy sobie np. fragmentator, aby łatwo filtrować dane – wykres będzie brzydko “skakał”…

Ok, zobacz więc co to za opcja 🙂

Formatka

Nasza formatka będzie to tabela przestawna, w której prezentujemy po prostu sprzedaż klientów po miesiącach:

Wyświetlanie miesięcy bez sprzedaży tabela przestawna Formatka

Formatka

Zobacz, że na razie wyświetlane są wszystkie miesiące, ponieważ tabela nie jest filtrowana dla żadnego z klientów. I tak byśmy chcieli, aby pozostało (a nie tak, jak na obrazku na wstępie artykułu).

Ustawianie opcji tabeli przestawnej

1. Po pierwsze potrzebujemy zadać sobie pytanie: w jakim polu chcemy powtarzać wartości, nawet jak nie mam tam danych? U nas będzie to miesiąc (Months).

2. Następnie kliknij w to pole prawym przyciskiem myszy

3. Z menu kontekstowego wybierz Ustawienie pól

4. Z okienka, które się pokaże wybierz zakładkę Układ i drukowanie

5. I zaznacz checkbox: Pokaż elementy bez danych

Wszystkie powyższe kroki prezentuje obrazek poniżej:

Malinowy Excel Wyświetlanie miesięcy bez sprzedaży tabela przestawna Ustawianie opcji

Ustawianie opcji

Pierwsze efekty są takie (tabela)…

Malinowy Excel Wyświetlanie miesięcy bez sprzedaży tabela przestawna Pierwsze efekty

Pierwsze efekty

…czyli słabe :). Nie chcemy tych przedziałów, które tabela wyświetliła przed styczniem i po grudniu. Nie ma problemu – wystarczy je odfiltrować z tabeli. Efekt będzie taki:

Malinowy Excel Wyświetlanie miesięcy bez sprzedaży tabela przestawna Efekt końcowy

Efekt końcowy

Tadam! Jedna prosta opcja, a tak cieszy :). Ja ją uwielbiam!!! A Ty?

Jeśli też Ci się ta opcja spodobała – mam do Ciebie prośbę: podziel się tym wpisem ze znajomymi, współpracownikami, którym również może się ona przydać. Jeśli zechcesz udostępnić ten artykuł na Facebooku – będę Ci bardzo wdzięczna! Bardzo się starałam, aby ten artykuł był dla Ciebie na tyle wartościowy, by wart był wzmianki ;). Oczywiście śmiało podeślij go innym osobom mailem lub Messengerem. Będzie mi bardzo miło:)

 

Powiązane produkty

  • Tabele przestawne – wprowadzenie, podczas tej lekcji opowiadam o tworzeniu klasycznych tabel przestawnych od podstaw. Jak powinien wyglądać zakres danych? Co, jak i gdzie ułożyć, aby otrzymać czytelny i ładny raport, jakiego potrzebujemy (albo szef potrzebuje;))? Na te pytania odpowiadam podczas tego webinaru.
  • O obiekcie tabela słów kilka – podczas tej lekcji pokazuję czym jest obiekt tabela w Excelu i dlaczego warto z niego korzystać. Daje nam on ogromne możliwości dynamizowania naszych arkuszy, a wiele nowych funkcjonalności Excela wręcz wymaga przechowywanie danych w tymże obiekcie (np. Power Query). Must have każdego użytkownika Excela!
  • Nagrywanie makr – podczas tej dwugodzinnej lekcji dowiesz się jak w sprytny sposób nagrywać całkiem inteligentne makra
  • Kurs Excel w codziennej pracy – mający na celu uporządkować Twoją wiedzę na temat Excela. Jest świetny zarówno dla osób, które chcą uporządkować swoją wiedzę, zdobywaną do tej pory “po omacku”, jak i takich, które dopiero zaczynają swoją przygodę z Excelem.

 

Plik do pobrania:

MalinowyExcel Wyświetlanie miesięcy bez sprzedaży w TP dw.xlsx

 

I film na Youtubie, gdzie pokazuję powyższe rozwiązanie:

(pojawi się wkrótce)

 

 

Przeszukiwalna lista rozwijana – formuły (Office 365)

$
0
0

Czyli trochę o nowych dynamicznych tablicach

Już w lipcu 2020 wszyscy posiadacze subskrypcyjnej wersji Office’a (Office 365) będą mogli korzystać z nowej funkcjonalności Excela: dynamicznych tablic. Powiem tak: to jest REWOLUCJA. Od tej pory mega-skomplikowane formuły będzie można zamienić na kilka przyjemnych i łatwych w użyciu funkcji. Również to, co do tej pory było wręcz niemożliwe do wykonania – przy pomocy dynamicznych funkcji  tablicowych będzie bardzo proste!

Nie trzeba daleko szukać – niedawno pokazywałam sposób na stworzenie przeszukiwalnej listy rozwijanej, wykorzystujący formularz użytkownika i makra oczywiście (VBA). Artykuł ten możesz przeczytać tutaj. Opisane w nim rozwiązanie bardzo mi się podoba – sama stosuję je w swoich plikach, jak również w plikach, które tworzę dla klientów.

Wiem jednak, że nie wszyscy chcą korzystać z makr. W takiej sytuacji potrzebne jest rozwiązanie oparte np. na formułach. I takie właśnie dzisiaj pokażę. Efekt będzie taki:

MalinowyExcel Przeszukiwalna lista rozwijana 365 Wynik

Pokażę Wam rozwiązanie wzorowane na propozycji Leili Gharani, której kanał na YT bardzo Wam polecam.

Zaczynamy!

Formatka

Potrzebuję 2 tabel (u mnie w dwóch arkuszach): jedną nazwałam tbFaktury (arkusz Dane), drugą – tbKlienci (arkusz Dane).

Przeszukiwalna lista dynamiczne funkcje tablicowe Office 365

Formatka

W tbFaktury użytkownik wpisuje do tabeli numer faktury, a następnie klienta, dla którego fakturę tę tworzy. Naszym celem jest to, aby po wpisaniu fragmentu nazwy klienta  pojawiła się lista rozwijana ze wszystkimi możliwymi klientami, których nazwa zawiera wpisany fragment.

Formuła dla przeszukiwalnej listy rozwijanej dla jednej komórki

Najpierw stworzę formułę dla jednej komórki (sedno sprawy!), która będzie listowała wszystkie możliwe wartości (zrobię to poza tabelą główną).

Czyli jeśli użytkownik wpisze do komórki fragment nazwy klienta – formuła wyświetli wszystkie nazwy klienta, które zawierają wpisany fragment. Za jednym razem tych klientów będzie mniej, za innym więcej. Jednak dla dynamicznych formuł tablicowych nie jest to problem :).

Załóżmy, że fragment nazwy będę wpisywała do komórki G7, którą nazwę jako Robocza, a wyniki mają się wyświetlać od komórki H7 w dół. Właśnie w komórce H7 wpiszę formułę.

Skorzystam z przecudownej funkcji filtrującej: FILTRUJ. Jest to dynamiczna funkcja tablicowa. Potrzebuje ona ode mnie informacji o:

1. zakresie, który ma przefiltrować (u nas będą to wszyscy klienci, czyli kolumna Klient w tabeli tbKlienci).

2. kryteriów filtrowania (ma zawierać fragment nazwy wpisany przez użytkownika).

Istnieje funkcja tekstowa SZUKAJ.TEKST, która umie sprawdzić na której pozycji w tekście znajduje się inny tekst (jeśli nie znajdzie tego tekstu – zwróci błąd). Tej funkcji tutaj użyję (nie bierze pod uwagę wielkości liter).

=SZUKAJ.TEKST(G7;tbKlienci[Klient])

Zauważ, że w drugim argumencie tej funkcji podałam zakres wielu komórek – jest to informacja dla funkcji, że ma do czynienia z operacją tablicową. W wyniku otrzymam tablicę liczb i błędów:

MalinowyExcel Przeszukiwalna lista rozwijana formułami 365 Wyniki funkcji SZUKAJ.TEKST

Wyniki funkcji SZUKAJ.TEKST

Teraz sprawdzę, czy wyniki tej funkcji są liczbami. Jeśli tak – znaleźliśmy klienta, który w nazwie ma tekst wpisany przez usera:

=CZY.LICZBA(SZUKAJ.TEKST(G7;tbKlienci[Klient]))

To z kolei konwertuje nam wszystkie liczby na PRAWDA, a wszystkie błędy #ARG! na FAŁSZ. O tak:

MalinowyExcel Przeszukiwalna lista rozwijana formułami 365 Wyniki funkcji CZY.LICZBA

Wyniki funkcji CZY.LICZBA

Te wartości logiczne to właśnie coś, czego potrzebuje od nas funkcja FILTR, aby przefiltrować podany jej zakres (czyli tbKlienci[Klient]).  To wrzućmy wszystko w tę funkcję:

=FILTRUJ(tbKlienci[Klient];CZY.LICZBA(SZUKAJ.TEKST(G7;tbKlienci[Klient])))

Efekt będzie następujący:

MalinowyExcel Przeszukiwalna lista rozwijana formułami 365 Wynik funkcji FILTRUJ

Wynik funkcji FILTRUJ

Wszystko można jeszcze posortować funkcją SORTUJ (u mnie akurat tabela źródłowa już była posortowana, więc nie zobaczymy efektu):

=SORTUJ(FILTRUJ(tbKlienci[Klient];CZY.LICZBA(SZUKAJ.TEKST(G7;tbKlienci[Klient]))))

No to jest. Teraz tylko trzeba wrzucić to do listy rozwijanej, czyli sprawdzania poprawności danych.

Formuła ma działać dla wielu komórek

W tabeli tbFaktury dodam sprawdzanie poprawności do kolumny Klient. Interesuje mnie lista rozwijana, zatem Dane/Poprawność danych:

MalinowyExcel Przeszukiwalna lista rozwijana formułami 365 Tworzenie listy rozwijanej

Tworzenie listy rozwijanej

Zauważ, że w Źródle odwołałam się tylko do komórki H7 i za nią postawiłam znak #. Jest to zapis odwołania do dynamicznej tablicy. Zauważ, że formuła w H7 niejako w niej “żyje”. Ja jej nie kopiowałam, w dół (do pozostałych dwóch komórek), aby uzyskać nazwy dwóch innych firm, spełniających kryteria. Sama się skopiowała. Excel sam wiedziała, do jakiego miejsca ma ją skopiować. I od tej pory my, kiedy chcemy odwołać się do dynamicznej tablicy, również nie musimy wiedzieć, gdzie ona się kończy. Wystarczy nam informacja o tym, gdzie się zaczyna :).

Od razu na tym etapie możemy określić, abyśmy mogli wpisywać do komórek niepoprawne wartości (niepoprawne, czyli takie, których nie ma na liście). Powiem o tym dalej, natomiast na tę chwilę uwierz mi na słowo :). W zakładce Alert o błędzie odznacz chceckbox Pokazuj alerty po wprowadzeniu nieprawidłowych danych:

MalinowyExcel Przeszukiwalna lista rozwijana formułami 365 Tworzenie listy rozwijanej - alert o błędzie

Tworzenie listy rozwijanej – alert o błędzie

Zadziała pięknie, jednak jest jedno “ale”…

… jest pewien problem

Aby skorzystać z listy, użytkownik nadal musi wpisywać szukany tekst do komórki G7. Bardzo to niewygodne. Chciałabym, aby mógł wpisywać szukaną wartość bezpośrednio w tabeli z fakturami.

Możnabyłoby pomyśleć: w takim razie co za problem – skopiujmy formułę, którą przed chwilą napisaliśmy do sprawdzania poprawności, odwołajmy się do komórki z klientem i sprawa załatwiona!

No właśnie nie do końca.

Niestety, może na tę chwilę?, sprawdzanie poprawności nie przyjmie dynamicznej tablicy jako źródła ;(.

Mi przychodzi do głowy tylko VBA. A konkretnie zdarzenia arkusza Worksheet_Change, które na każdą zmianę komórki (najlepiej tylko tych z klientami) wpisywało wartość do komórki Robocza, a na tej podstawie utworzy się źródło listy rozwijanej.

Zatem przejdźmy do VBA.

Potrzebujemy trochę makr (VBA)

Utwórzmy zatem zdarzenie arkusza Worksheet_Change i wpiszmy następujący kod:

Private Sub Worksheet_Change(ByVal Target As Range)

    On Error GoTo Obsluga
    
    If Not Intersect(Me.Range("Zakres"), Target) Is Nothing Then
        Application.EnableEvents = False
        Me.Range("Robocza").Value = Target.Value
    End If

Obsluga:
    Application.EnableEvents = True
    
End Sub

Zadanie powyższego kodu jest bardzo proste: wpisuje do komórki Robocza tą samą wartość, którą wpisał użytkownik. A na tej podstawie formuła tablicowa już robi swoje :).

Efekt jest taki:

MalinowyExcel Przeszukiwalna lista rozwijana 365 WynikFajne, prawda? 😉

Na koniec mam do Ciebie prośbę: pomożesz mi dotrzeć z tym artykułem do szerszego grona? Jeśli zechcesz udostępnić ten artykuł na Facebooku – będę Ci bardzo wdzięczna! Bardzo się starałam, aby ten artykuł był dla Ciebie na tyle wartościowy, by wart był wzmianki ;). Oczywiście śmiało podeślij go innym osobom mailem lub Messengerem. Będzie mi bardzo miło:)

 

Powiązane produkty

  • O obiekcie tabela słów kilka – podczas tej lekcji pokazuję czym jest obiekt tabela w Excelu i dlaczego warto z niego korzystać. Daje nam on ogromne możliwości dynamizowania naszych arkuszy, a wiele nowych funkcjonalności Excela wręcz wymaga przechowywanie danych w tymże obiekcie (np. Power Query). Must have każdego użytkownika Excela!
  • Listy rozwijane – podczas tej lekcji pokazuję jak zrobić listę rozwijaną zarówno taką, jak we wpisie (czyli sprawdzanie poprawności), jak i formant formularza, oraz jak je wykorzystać np. na wykresach.
  • Nagrywanie makr – podczas tej dwugodzinnej lekcji dowiesz się jak w sprytny sposób nagrywać całkiem inteligentne makra

 

Plik do pobrania:

MalinowyExcel Lista z podpowiedziami 365 dw.zip

 

I film na Youtubie, gdzie pokazuję powyższe rozwiązanie:

(pojawi się wkrótce)

 

 

Zależna lista rozwijana: dynamiczne formuły tablicowe (Office 365)

$
0
0

Czyli UNIKATOWE, SORTUJ i FILTRUJ

Aby stworzyć zależną listę rozwijaną, trzeba było używać niezbyt prostych funkcji, np. PRZESUNIĘCIE. Opisywałam to już kiedyś na blogu (zobacz tutaj).

Teraz, gdy dla użytkowników subskrypcyjnej wersji Office’a (365) dostępne są dynamiczne formuły tablicowe – będzie to pestka!

Chodzi o coś takiego:

Będziemy chcieli z pierwszej listy rozwijanej wybierać markę samochodu, a z drugiej – model. Oczywiście będą nas interesowały modele tylko wybranej wcześniej marki.

Założenia

Zanim jednak takie cudo zrobimy, upewnijmy się, że spełniamy założenia:

  1. Odpowiednia tabela z danymi
  2. Office 365

Odpowiednia tabela z danymi, to taka tabela (może być też zwykły zakres), gdzie znajduje się przyporządkowanie modelu do marki. O tak:

Tabela danych

U mnie, powyższa tabela nazywa się tbSamochody. Warto działać na tabeli, a nie na zwykłym zakresie, gdyż zyskujemy dodatkową, darmową dynamikę… J. Ale o tym trochę później.

Sama formatka z listami rozwijanymi to po prostu dowolne 2 komórki, w których umieścimy owe listy. Na przykład tak (komórki B5 i C5):

Miejsce na obie listy rozwijane

Ok, jak to mamy, to możemy przejść dalej.

Lista rozwijana – pierwszy poziom (marki)

Na pierwszej liście rozwijanej (tej niezależnej), potrzebujemy unikalne wpisy z pierwszej kolumny tabeli, którą nazwałam tbSamochody.

I to słowo – unikalne – jest słowem kluczem. Praktycznie tak samo nazywa się nowa funkcja tablicowa, która dokładnie to umie zrobić: wyświetla w swoim wyniku unikatowe wartości z wskazanego zakresu. Funkcja ta to UNIKATOWE.

Niestety, póki co (lipiec 2020), dynamiczna formuła tablicowa nie może być źródłem listy sprawdzania poprawności (Excel wtedy krzyczy, nawet nazwanie formuły nie pomaga), poradzimy sobie inaczej. Wpiszemy do roboczej komórki w arkuszu naszą formułę i na niej oprzemy listę rozwijaną.

Tak już Excel nam pozwoli zrobić ;).

Wpiszmy zatem do roboczej komórki B11 następującą formułę:

=UNIKATOWE(H4:H28)

Wystarczy ją po prostu zatwierdzić Enterem (a nie CSE, jak wcześniej zatwierdzaliśmy formuły tablicowe w Excelu!).

Pojawi się taki wynik:

Dynamiczna formuła tablicowa funkcja UNIKATOWE

Zauważ, że formuła się „rozlała” na 4 komórki, ponieważ tyle miejsca potrzebuje, aby wyświetlić unikalne marki samochodów z naszej listy.

Zauważ też, że formuła niejako „żyje” w pierwszej komórce wyniku, czyli w B11. Gdy ta komórka jest zaznaczona i spojrzymy na pasek formuły – kolor czcionki jest czarny. Jeśli zaś zaznaczymy choćby komórkę niżej – w pasku formuły zobaczymy tę samą formułę, ale napisana będzie już na szaro! Tam bowiem znajduje się jedynie tymczasowy wynik formuły! Tymczasowy, ponieważ dla innych danych możemy otrzymać inny wynik.

OK, formułę mamy, teraz pora na listę rozwijaną. Wstawmy ją do komórki B5 (Dane/ Poprawność danych).

W źródle listy rozwijanej odwołajmy się właśnie do komórki B11, w której nasza formuła żyje. A żeby lista rozwijana wiedziała, że chcemy wyświetlić całą tablicę, a nie tylko zawartość komórki B11 – dopiszmy za jej adresem znaczek #. O tak:

MalinowyExcel Zależna lista rozwijana dynamiczne formuły tablicowe 365 Odwołanie do dynamicznej tablicy

Odwołanie do dynamicznej tablicy

I to tyle. A o tworzeniu list rozwijanych (i walidacji i formancie formularza) sporo mówiłam TUTAJ i TUTAJ, więc pozwól, że już nie będę się powtarzać :).

Lista rozwijana – drugi poziom (modele)

Ok, teraz druga lista. Ta zależna od wyboru z pierwszej listy.

Wyobraź sobie, że w tabeli tbSamochody chcesz wyświetlić tylko modele Suzuki.

Co robisz?

Oczywiście: filtrujesz (hehe, jesteś w tabeli, więc autofiltr masz z automatu…)!

Jakie ustawiasz kryterium filtrowania?

Kryterium jest takie, że marka – Suzuki. Wtedy zobaczysz wybrane modele dla Suzuki.

No to już wszystko wiemy, zabierzmy się więc do funkcji FILTRUJ, która robi dokładnie to samo. Potrzebuje wiedzieć jakie dane ma przefiltrować i jakie kryteria ma brać pod uwagę. Kryteria to tak naprawdę tablica wartości PRAWDA i FAŁSZ, wskazujących na odpowiednie wiersze filtrowanej tabeli.

Dane do filtrowania będzie to kolumna z modelami, a kryteria to wyrażenie logiczne, porównujące całą kolumnę z markami do wartości, którą użytkownik wybrał na pierwszej liście, czyli komórki B5.

Formuła w C11 (również robocza), jest taka:

=FILTRUJ(I4:I28;H4:H28=B5)

Żeby jeszcze wyniki były ładnie posortowane – możemy wszystko wrzucić do funkcji SORTUJ, o tak:

=SORTUJ(FILTRUJ(I4:I28;H4:H28=B5))

Domyślnie sortuje ona rosnąco, a o to nam chodzi.

Wynik przedstawia poniższy obrazek:

MalinowyExcel Zależna lista rozwijana dynamiczne formuły tablicowe 365 Wynik drugiej formuły

Wynik drugiej formuły

Teraz pozostaje, tak samo jak poprzednio, wrzucić wynik do listy rozwijanej:

MalinowyExcel Zależna lista rozwijana dynamiczne formuły tablicowe 365 Tworzenie zależnej listy rozwijanej

Tworzenie zależnej listy rozwijanej

I to jest wszystko…

Nie trzeba sortować źródła!

… ale jeszcze nie wszystko, ponieważ warto dodać, że dzięki wspomnianym funkcjom: FILTRUJ, SORTUJ i UNIKATOWE – dane w tabeli źródłowej nie muszą być sortowane! Było to konieczne we wcześniejszych wersjach Excela (żeby formuła nie była z serii tych kosmicznych, i żeby nie było konieczności używania VBA).

Sprawdź sama – z nieposortowanych też zadziała :).

Dlaczego warto skorzystać z tabeli?

No i jeszcze jedno – wisienka na torcie ;). Jeśli dane źródłowe będą, tak jak u mnie w przykładzie, w obiekcie tabela – jak dopiszemy do niej nowe dane (kolejne marki czy modele) – nasze listy rozwijane to uwzględnią!!!

Zobacz:

MalinowyExcel Zależna lista rozwijana dynamiczne formuły tablicowe 365 Dodatkowa dynamika dzięki tabeli

Dodatkowa dynamika dzięki tabeli

Na koniec mam do Ciebie prośbę: pomożesz mi dotrzeć z tym artykułem do szerszego grona? Jeśli zechcesz udostępnić ten artykuł na Facebooku – będę Ci bardzo wdzięczna! Bardzo się starałam, aby ten artykuł był dla Ciebie na tyle wartościowy, by wart był wzmianki ;). Oczywiście śmiało podeślij go innym osobom mailem lub Messengerem. Będzie mi bardzo miło:)

 

Powiązane produkty

  • O obiekcie tabela słów kilka – podczas tej lekcji pokazuję czym jest obiekt tabela w Excelu i dlaczego warto z niego korzystać. Daje nam on ogromne możliwości dynamizowania naszych arkuszy, a wiele nowych funkcjonalności Excela wręcz wymaga przechowywanie danych w tymże obiekcie (np. Power Query). Must have każdego użytkownika Excela!
  • Listy rozwijane – podczas tej lekcji pokazuję jak zrobić listę rozwijaną zarówno taką, jak we wpisie (czyli sprawdzanie poprawności), jak i formant formularza, oraz jak je wykorzystać np. na wykresach.
  • Walidacja danych – triki – podczas tej lekcji opowiadam o ciekawych zastosowaniach sprawdzania poprawności, którego lista rozwijana w komórce (użyta w tym wpisie) jest opcją. Ale narzędzie to potrafi dużo, duuuużo więcej!
  • Power Query – wstęp dla laików – Celem tej lekcji jest wprowadzenie w magiczny świat Power Query wszystkich tych, którzy jeszcze nie mieli do czynienia z tym cudownym narzędziem. Coś tam kiedyś słyszeli, coś widzieli, ale jeszcze nic samodzielnie nie robili.
  • Kurs Excel w codziennej pracy – mający na celu uporządkować Twoją wiedzę na temat Excela. Jest świetny zarówno dla osób, które chcą uporządkować swoją wiedzę, dobywaną do tej pory “po omacku”, jak i takich, które dopiero zaczynają swoją przygodę z Excelem.

 

Plik do pobrania:

MalinowyExcel Zależna lista rozwijana O365 dw.xlsx

 

I film na Youtubie, gdzie pokazuję powyższe rozwiązanie:

(pojawi się wkrótce)

 

 

Wykres kołowy czasem się nadaje

$
0
0

Czyli jak Excel może pomóc nam zmienić zachowania

Ten artykuł jest nietypowy – opisuje bowiem tworzenie praktycznego rozwiązania (a nie wybraną opcję, jak dotychczasowe na moim blogu).

Pokazuje, jak można wykorzystać Excela do (próby) zmian zachowań/działań. Opisywane rozwiązanie jest z życia wzięte. Zastosowałam je u jednego ze swoich klientów, który ma spore problemy ze ściągalnością płatności od swoich klientów. Klienci ci przyzwyczajeni są do tego, że otrzymują towar, a zapłacić mają później. I jakoś tak o tym drugim im się często zapomina, a podatki płacić trzeba.

Aby się z tym uporać mój Klient wprowadził zasadę sprzedawania na przedpłaty. Wszystko byłoby fajnie, gdyby jeszcze handlowcy się do niej stosowali.

Niestety, zbyt często się nie stosują.

Próbowaliśmy wszystkiego: tłumaczenie problemu, nagrody, premie – nic nie działa. Nadal umawiają się z klientami na przelewy…

Pomyślałam więc, że dorzucę swoją – raportową – cegiełkę do tej układanki. Handlowcy kilka razy w tygodniu korzystają z Excela, w którym to postanowiłam umieścić… biofeedback. Ta nazwa bardzo ładnie mi tutaj pasuje ;). Jednym słowem: unaocznić skalę problemu.

Chodziło mi o to, aby handlowcy zobaczyli: sprzedajecie tyle, za tyle nie mamy kasy. Przekaz miał być jak najbardziej prosty i zrozumiały na pierwszy rzut oka. Postanowiłam więc skorzystać z najbardziej powszechnych technik (niekoniecznie najlepszych).

I tak, wiem, spece od wizualizacji danych by mnie za to zlinczowali: zrobiłam wykres kołowy (jest powszechnie używany i zrozumiały), korzystając z czerwonego i zielonego koloru. Dorzuciłam mini-raport dla bardziej dociekliwych, i wyszło tak:

Wykres kołowy czasem się nadaje WYNIK

Aby Cię Czytelniku nie zanudzić (rozwiązanie jest długie) – w tym artykule wymieniam kluczowe fragmenty tego rozwiązania. Natomiast całość możesz obejrzeć na filmie, który znajdziesz poniżej.

Dane źródłowe

Dane te znajdują się w tabeli, którą nazwałam tbFaktury. Oto screen:

Wykres kołowy czasem się nadaje Dane źródłowe

Dane źródłowe

Za zapłacona fakturę uznajemy taką, która w kolumnie zostało ma zero (0). Oznacza to, że faktura jest w całości zapłacona.

W tych danych zakładam również, że wszystkim fakturom minął termin płatności. Jeśli potrzebujesz to dodatkowo precyzować – przyda się np. kolumna pomocnicza, która to określi, lub dodatkowy warunek już bezpośrednio w formułach.

Raport wszystkich faktur

…czyli ta część raportu:

MalinowyExcel Wykres kołowy czasem się nadaje Raport wszystkich faktur

Raport wszystkich faktur

Liczbę wszystkich faktur o określonym sposobie zapłaty policzymy następującą formułą:

=LICZ.JEŻELI(tbFaktury[sp. zapłaty];$L26)

Wartość tych faktur taką formułą:

=SUMA.JEŻELI(tbFaktury[sp. zapłaty];$L26;tbFaktury[wart.brutto])

Raport niezapłaconych faktur

Stworzymy teraz tę część raportu:

Raport niezapłaconych faktur

Raport niezapłaconych faktur

A formuły dla poszczególnych kolumn wyglądają tak:

Liczba FV, czyli liczba niezapłaconych faktur:

=LICZ.WARUNKI(tbFaktury[zostało];">0";tbFaktury[sp. zapłaty];$L26)

PLN, czyli kwota niezapłaconych faktur:

=SUMA.WARUNKÓW(tbFaktury[zostało];tbFaktury[zostało];">0";tbFaktury[sp. zapłaty];$L26)

Procent niezapłaconych faktur danego rodzaju (odwołuję się tutaj do raportu wszystkich faktur):

=N26/S26

Pasek danych, pokazujący udział niezapłaconych faktur danego rodzaju we wszystkich fakturach:

=N26/$S$34

Pamiętaj, aby ustawić odpowiednie formatowanie warunkowe dla tych danych:

MalinowyExcel Wykres kołowy czasem się nadaje Formatowanie warunkowe ustawienia paska danych

Ustawienia paska danych

Tworzenie wykresu kołowego

Najpierw dane do wykresu, umieszczę je gdzieś z boku, nie powinny być widoczne dla użytkownika. U mnie to zakres V27:X28:

Dane do wykresu

Dane do wykresu

Formuła w W27 jest taka:

=N34

A w W28 taka:

=S34-W27

I jeszcze zakres X27:X28:

=W27/$S$34

Możesz ewentualnie wrzucić to w TEKST:

=TEKST(W27/$S$34;"0%")

Wykres kołowy tworzymy bez udziwnień (Wstawianie/Wykres kołowy 2D), odpowiednio formatujemy.

Następnie, aby wyolbrzymić etykiety – ja skorzystałam z pól tekstowych, zaciągających dane z komórek (metodę tę opisywałam TUTAJ na przykładzie tytułu wykresu).

Odpowiednio sformatowane pola tekstowe możesz kopiować. Niestety, gdy podmieniamy łącza komórek, z których te pola czerpią dane – format się psuje. Trzeba więc ustawiać go od początku. Pamiętaj jednak, że format tych etykiet możesz kopiować za pomocą malarza formatów – mniej roboty ;).

A oto wynik wszystkiego:

Wykres kołowy czasem się nadaje WYNIK

I film na Youtubie, gdzie pokazuję powyższe rozwiązanie:

(pojawi się wkrótce)

 

Na koniec mam do Ciebie prośbę: pomóż mi dotrzeć z tym artykułem do szerszego grona. Jeśli zechcesz udostępnić ten artykuł na Facebooku – będę Ci bardzo wdzięczna! Bardzo się starałam, aby ten artykuł był dla Ciebie na tyle wartościowy, by wart był wzmianki ;). Oczywiście śmiało podeślij go innym osobom mailem lub Messengerem. Będzie mi bardzo miło:)

 

Powiązane produkty

  • Formatowanie niestandardowe – to lekcja o tworzeniu własnych formatów liczbowych, których twórcy Excela nam nie dali w pakiecie, a warto by było :).
  • O obiekcie tabela słów kilka – podczas tej lekcji pokazuję czym jest obiekt tabela w Excelu i dlaczego warto z niego korzystać. Daje nam on ogromne możliwości dynamizowania naszych arkuszy, a wiele nowych funkcjonalności Excela wręcz wymaga przechowywanie danych w tymże obiekcie (np. Power Query). Must have każdego użytkownika Excela!
  • Kurs Excel w codziennej pracy – mający na celu uporządkować Twoją wiedzę na temat Excela. Jest świetny zarówno dla osób, które chcą uporządkować swoją wiedzę, zdobywaną do tej pory “po omacku”, jak i takich, które dopiero zaczynają swoją przygodę z Excelem.

 

Plik do pobrania:

MalinowyExcel Wykres kołowy czasem się nadaje dw.xlsx

 

 

 


Przeszukiwalna lista rozwijana – 2 PROSTE sposoby

$
0
0

Czyli co zrobić, aby się nie narobić?

Tytuł artykułu jest dość przewrotny. Ostatnio opisywałam wiele metod na stworzenie przeszukiwalnej listy rozwijanej: metoda używająca formularza VBA, metoda wykorzystująca dynamiczne funkcje tablicowe w Microsoft365. Teraz przyszedł czas na coś prostszego.

Tylko to tak na prawdę nie będą żadne metody, tylko po prostu… użycie Excela online i Google Sheets :).

Excel online: sprawdzanie poprawności danych

Cudowne jest to, że w onlajnowej wersji Excela, kiedy użyjesz najzwyklejszego sprawdzania poprawności danych – funkcjonalność przeszukiwania listy masz… w standardzie! Wystarczy zatem uruchomić Excela w przeglądarce (konto możesz założyć na Office.com).

Jeśli masz źródło listy rozwijanej, np. takie:

Formatka w Excel online

To wystarczy, żę, tak jak w tradycyjnym Excelu, wejdziesz do menu Dane/Sprawdzanie poprawności danych i wskażesz odpowiednie zakresy komórek:

Tworzenie listy w Excel online (Microsoft 365)

I to w zasadzie tyle :).

Google Sheets: sprawdzanie poprawności danych

Tak samo prosto robi się to w Google Sheets.

Formatka wygląda u mnie tak:

Google Sheets – formatka

I tak samo: Data/Data validation:

Google Sheets – tworzenie listy

I samo bangla :).

Mam nadzieję, że Ci się to przyda. Jeśli tak – super! Jeśli nie – przynajmniej dowiedziałaś się czegoś nowego ;).

Mam też do Ciebie prośbę: pomóż mi dotrzeć z tym artykułem do szerszego grona zainteresowanych. Udostępnij ten artykuł na Facebooku – będę Ci bardzo wdzięczna!

Powiązane produkty

  • Listy rozwijane – podczas tej lekcji pokazuję jak zrobić listę rozwijaną zarówno taką, jak we wpisie (czyli sprawdzanie poprawności), jak i formant formularza, oraz jak je wykorzystać np. na wykresach.
  • Walidacja danych – triki – podczas tej lekcji opowiadam o ciekawych zastosowaniach sprawdzania poprawności, którego lista rozwijana w komórce (użyta w tym wpisie) jest opcją. Ale narzędzie to potrafi dużo, duuuużo więcej!
  • Kurs Excel w codziennej pracy – mający na celu uporządkować Twoją wiedzę na temat Excela. Jest świetny zarówno dla osób, które chcą uporządkować swoją wiedzę, zdobywaną do tej pory “po omacku”, jak i takich, które dopiero zaczynają swoją przygodę z Excelem.

I film na Youtubie, gdzie pokazuję powyższe rozwiązanie:

 

 

 

Wyodrębnianie daty urodzenia z nowego PESELu

$
0
0

Czyli jak działa funkcja LET?

Nowa funkcja w Excelu, dostępna w subskrypcji (Microsoft365), świetnie nadaje się gdy w jednej formule potrzebujemy wielokrotnie użyć tego samego (albo tych samych, kilku)  fragmentu formuły. Funkcja ta nazywa ów fragment i pozwala użyć już samej nazwy, a nie wciąż pisać w kółko to samo.

Jej użycie omówię na przykładzie wyodrębniania daty urodzenia z PESELu. Zarówno “nowego” (2000-2099) jak i “starego” (1900-1999).

Tak wygląda formatka z wynikiem:

MalinowyExcel Wyodrębniania daty urodzenia z PESELu funkcja LET - Wynik

Jak odczytać datę urodzenia z PESELu?

O dacie urodzenia mówi 6 pierwszych cyfr w PESELu. Dwie pierwsze to końcówka roku, dwie kolejne – miesiąc, dwie kolejne – dzień. Aby jednak odróżnić osoby urodzone w latach 2000-2099 od osób z lat 1900-1999, jest pewna modyfikacja w zapisie miesiąca. W PESELach osób urodzonych w latach 2000-2099, dodaje się liczbę 20 do miesiąca. Czyli np. styczeń to 01+20=21, a listopad to 11+20=31 (TUTAJ możesz doczytać więcej o PESELu).

Technicznie, najważniejsza jest dla nas trzecia cyfra PESELu, czyli pierwsza cyfra miesiąca. Jeśli jest ona większa lub równa 2 – mamy do czynienia z osobą urodzoną w latach 2000-2099. Ta liczba będzie nam więc potrzebna do ustalenia roku i miesiąca urodzenia. Wyodrębnianie jej “zamkniemy” w nazwie, dzięki funkcji LET.

Jak użyć funkcji LET?

Aby zademonstrować Ci jak działa LET, sprawdzimy na początek czy trzecia liczba PESELu jest większa lub równa 2. Na początek tyle. Potem to zmodyfikujemy.

Ważne, abyś wiedziała, że cała formuła musi być zawarta w funkcji LET, jeśli planujemy skorzystać z nazywania poszczególnych jej elementów. Potrzebujemy określić:

  1. nazwę, którą planujemy używać,
  2. formułę, którą ta nazwa będzie reprezentować,
  3. formułę, w której użyjemy nazwy.

Jeśli zatem chcę aby trzecia cyfra PESELu nazywała się Trzecia, i była wyodrębniana za pomocą funkcji FRAGMENT.TEKSTU, a następnie porównana do 2, funkcja przybierze następującą postać:

=LET(Trzecia;--FRAGMENT.TEKSTU(B5;3;1);Trzecia>=2)

Dwa minusy (–) przed FRAGMENTEM.TEKSTU służy do konwersji tekstu na liczbę. Więcej o tym dowiesz się tutaj.

Wynikiem powyższej formuły będzie PRAWDA. Jest to wynik porównania trzeciej liczby (Trzecia) do dwójki. Oczywiście ten sam efekt jestem w stanie osiągnąć bez funkcji LET. Chciałam Ci jednak pokazać na prostym przykładzie jej działanie.

Ustalanie daty urodzenia

Teraz zajmiemy się już konkretami, czyli powoli będziemy ustalać datę urodzenia. Do tworzenia dat świetnie nadaje się funkcja DATA, która potrzebuje od nas 3 danych:

  1. rok
  2. miesiąc
  3. dzień

Na ich podstawie stworzy datę. Dzień najprościej jest ustalić, gdyż są to po prostu 5. i 6. znak z PESELU. Z rokiem i miesiącem jest ciężej. Do roku potrzebujemy dodać 1900 lub 2000 (w zależności od naszej Trzeciej). Od miesiąca zaś będziemy odejmować lub nie liczbę 20. Znów: w zależności od Trzeciej. Do dzieła.

Z pewnością potrzebujemy ustalić Trzecią cyfrę PESELu, aby dwukrotnie ją wykorzystać (rok i miesiąc). Możemy od razu ustalić, czy Trzecia jest większa lub równa 2, czyli w nazwie od razu zawrzeć  porównanie.

Tak to wygląda w funkcji LET:

=LET(Trzecia;--FRAGMENT.TEKSTU(B5;3;1)>=2;...)

W jej trzecim argumencie jest miejsce na właściwą formułę. W tej z kolei na pewno znajdzie się funkcja DATA, czyli na razie tak:

=LET(Trzecia;--FRAGMENT.TEKSTU(B5;3;1)>=2;DATA(rok;miesiąc;dzień))

Zacznijmy od najprostszego – od dnia.

Ustalanie dnia urodzenia

Dzień to po prostu 5. i 6. cyfra PESELU, czyli:

FRAGMENT.TEKSTU(B5;5;2)

Wrzucone do funkcji LET i DATA wygląda to tak:

=LET(Trzecia;--FRAGMENT.TEKSTU(B5;3;1)>=2;DATA(rok;miesiąc;FRAGMENT.TEKSTU(B5;5;2)))

DATA umie działać na liczbach przechowywanych w formie tekstu, więc z dniem nic już nie musimy robić.

Jedźmy więc do roku.

Ustalanie miesiąca urodzenia

Jak wspomniałam – miesiąc będą to 3. i 4. cyfra PESELu ewentualnie zmniejszone o 20. Zmniejszamy, jeśli Trzecia jest większa lub równa 2. Możemy to zapisać w ten sposób (drugi argument funkcji DATA):

FRAGMENT.TEKSTU(B5;3;2)-20*Trzecia

W powyższej formule wykorzystałam fakt, że Trzecia jest wartością logiczną, czyli jeśli będzie FAŁSZem, to w mnożeniu przyjmie wartość zero (0). Jeśli zaś będzie PRAWDĄ – przyjmie wartość 1. Więcej o takim wykorzystaniu logiki dowiesz się tutaj.

Po wrzuceniu tego do funkcji LET i DATA, otrzymujemy to:

=LET(Trzecia;--FRAGMENT.TEKSTU(B5;3;1)>=2;DATA(rok;FRAGMENT.TEKSTU(B5;3;2)-20*Trzecia;FRAGMENT.TEKSTU(B5;5;2)))

Podobnie zadziałamy z rokiem.

Ustalanie roku urodzenia

Rok to 1. i 2. cyfra PESELu, powiększone o 1900 lub 2000, w zależności od Trzeciej. Jeśli Trzecia >=2 – dodajemy 2000, w przeciwnym wypadku 1900:

LEWY(B5;2)+JEŻELI(Trzecia;2000;1900)

Całość wygląda tak:

=LET(Trzecia;--FRAGMENT.TEKSTU(B5;3;1)>=2;DATA(LEWY(B5;2)+JEŻELI(Trzecia;2000;1900);FRAGMENT.TEKSTU(B5;3;2)-20*Trzecia;FRAGMENT.TEKSTU(B5;5;2)))

Czyli wszystkie daty urodzenia, po sformatowaniu ich na daty oczywiście, wyglądają tak:

MalinowyExcel Wyodrębniania daty urodzenia z PESELu funkcja LET - Wynik

Wynik

Przydatne? 🙂

Na koniec mam do Ciebie prośbę: pomożesz mi dotrzeć z tym artykułem do szerszego grona? Jeśli zechcesz udostępnić ten artykuł na Facebooku – będę Ci bardzo wdzięczna! Bardzo się starałam, aby ten artykuł był dla Ciebie na tyle wartościowy, by wart był wzmianki ;). Oczywiście śmiało podeślij go innym osobom mailem lub Messengerem. Będzie mi bardzo miło:)

Powiązane produkty

  • Zagnieżdżanie funkcji – podczas tej lekcji nauczysz się jak zagnieżdżać funkcje w sposób łatwy i przyjemny. I przede wszystkim: zrozumiały!
  • Logika bez funkcji logicznych – podczas tej lekcji nauczysz się korzystać z logiki bez użycia funkcji logicznych (takich jak ORAZ czy LUB). Okazuje się, że często bardzo ułatwia i przyspiesza to naszą pracę. Dodatkowo dowiesz się jak stosować logikę w narzędziach Excela takich jak sprawdzanie poprawności czy formatowanie warunkowe.
  • Funkcje dat – excelowy niezbędnik – lekcja omawiająca najważniejsze funkcje dat, które pozwolą Ci w prosty sposób dokonywać obliczeń na datach, bez kombinowania jak koń pod górę.

Plik do pobrania:

MalinowyExcel Wyodrębnianie daty urodzenia z PESELu LET DW.xlsx

 

I film na Youtubie, gdzie pokazuję powyższe rozwiązanie:

 

 

Usuwanie co drugiej kolumny z zakresu

$
0
0

Zobacz najprostszy na świecie sposób…

Sposób, który opisuję w tym artykule to genialny pomysł członka mojej grupy na Facebooku – Marcina. Chodzi o to, aby z zakresu danych usunąć co drugą kolumnę. Można to wykonać w kilku bardzo prostych krokach…

Usuwnaie co drugiej kolumny WYNIK

 

Krok 1: seria danych do oznaczenia co drugiej kolumny

Najpierw oznaczę kolumny, które chcę usunąć. Załóżmy, że będą to białe kolumny na mojej formatce (patrz rysunek wyżej). Nad każdą taką kolumną wpiszę zatem dowolną literę, np. A.

  1. Aby to szybko zrobić, wpiszę literę nad pierwszą kolumną do usunięcia (komórka C2)
  2. Zaznaczę dwie komórki: komórkę obok i tę przed chwilą edytowaną (B2:C2)

    Oznaczanie kolumn do usunięcia

    Oznaczanie kolumn do usunięcia

  3. Przeciągnę zaznaczenie w prawo (tworzę serię danych), aż do końca zakresu, z którego chcę usunąć co drugą kolumnę

Właśnie oznaczyłam co drugą kolumnę. Oto efekt:

Oznaczone kolumny

Oznaczone kolumny

 

Krok 2: zaznaczanie kolumn do usunięcia

Wiemy, jakie są kolumny do usunięcia – teraz trzeba je zaznaczyć. Aby to zrobić:

  1. Nie zmieniaj zaznaczenia po przeciągnięciu serii danych! Ponieważ…
  2. …w obrębie tego zaznaczenia należy zaznaczyć komórki, zawierające teksty (nasze litery A). Wybieram więc z menu Narzędzia główne/Znajdź i zaznacz/Przejdź do – specjalnie…
  3. W okienku zaznaczam, że chcę szukać stałych (wystarczy zaznaczyć teksty, jednak wszystkie opcje też zadziałają):

    Zaznaczanie komórek z literą

    Zaznaczanie komórek z literą

  4. Zatwierdzam OK.

Oto efekt:

Zaznaczone komórki

Zaznaczone komórki

Krok 3: usuwanie co drugiej kolumny

To teraz wisienka na torcie – trzeba równocześnie usunąć kolumny, w których znajdują się zaznaczone litery. W tym celu:

    1. Kliknij prawym przyciskiem myszy na dowolną z nich
    2. Z menu kontekstowego wybierz Usuń
    3. W okienku Usuwanie zaznacz Cała kolumna

      Usunięcie kolumn

      Usunięcie kolumn

I to wszystko! Efekt jest taki:

WYNIK

WYNIK

Na filmie pokazuję jeszcze jedną metodę na usunięcie co drugiej kolumny – mojego autorstwa. Nie jestem jednak z niego dumna, więc w tym artykule ograniczyłam się do opisania genialnej metody Marcina. Jeśli jesteś ciekawa mojej propozycji – śmiało zajrzyj do filmu poniżej :).

Powiązane produkty

  • Kurs Excel w codziennej pracy – mający na celu uporządkować Twoją wiedzę na temat Excela. Jest świetny zarówno dla osób, które chcą uporządkować swoją wiedzę, zdobywaną do tej pory “po omacku”, jak i takich, które dopiero zaczynają swoją przygodę z Excelem.

I film na Youtubie, gdzie pokazuję powyższe rozwiązanie + jeszcze jedno:

 

 

 

Wybieranie wartości niższych niż średnia dla 2 różnych kategorii

$
0
0

Czyli magiczne właściwości filtru zaawansowanego

Na liczne prośby uczestników webinaru, którzy nie mają dostępu (i nie chcą mieć!) do Fecebooka, zamieszczam jedno z rozwiązań zadania samodzielnego, które zadałam podczas webinaru Filtr zaawansowany – zapomniane narzędzie Excela.

Chodziło o to, aby z zestawienia transakcji wybrać takie, które dotyczą batonów i wafli, ale tylko takich, których wartość transakcji była mniejsza niż średnia w ich kategorii. Czyli batony z wartością mniejszą niż średnia dla batonów, wafle – ze średnią mniejsza niż średnia wafli:

Autofiltr w prosty sposób sobie z tym nie poradzi, czas zatem na filtr zaawansowany!

Budowanie tabeli kryteriów dla filtru zaawansowanego

W tabeli kryteriów musi znaleźć się informacja o kategorii produktów, czyli o batonach i waflach, oraz o tym, jakie wartości nas interesują.

A interesują nas mniejsze niż średnia wartość produktów z określonej kategorii. Tej średniej nie znamy, zatem będziemy ją sobie liczyli dla każdej kategorii. Zrobię to funkcją SUMA.JEŻELI (można też oczywiście użyć funkcji ŚREDNIA.WARUNKÓW).

Ale po kolei.

Załóżmy, że tabelę kryteriów umieszczę w arkuszu nad danymi. Potrzebuję 2 nagłówków: Kategoria, Wartość.

Kategorie interesują mnie dwie: Batony, Wafle. Aby zachować kryterium LUB między nimi – wpiszę je pod sobą:

Tabela kryteriów - kategorie

Tabela kryteriów – kategorie

Teraz trudniejsza sprawa: wartości.

Dla naszych danych, dla batonów – średnia wartość transakcji wynosi ok. 399,29, a dla wafli – ok. 462,57. Interesują nas zatem odpowiednie transakcje o wartościach niższych.

Ręcznie, moglibyśmy zapisać te kryteria tak:

Tabela kryteriów - zapis ręczny

Tabela kryteriów – zapis ręczny

Jednak uzyskamy średnie wartości za pomocą funkcji ŚREDNIA.JEŻELI. Dla batonów, formuła wygląda ona tak:

="<"&ŚREDNIA.JEŻELI($G$7:$G$182;G3;$I$7:$I$182)

Dla wafli – analogicznie. Wystarczy skopiować powyższą formułę w tabeli kryteriów:

Tabela kryteriów w podglądzie widoku formuł

Tabela kryteriów w podglądzie widoku formuł

Efekt jest taki:

Tabela kryteriów

Tabela kryteriów

Stosowanie filtru zaawansowanego

Jak już mamy tabelę kryteriów – wystarczy tylko zastosować sam filtr.

  1. Ustaw się w danych
  2. Dane/Zaawansowane
  3. W okienku filtru wskaż odpowiednie zakresy (filtruję listę na miejscu):
Stosowanie filtru

Stosowanie filtru

Zatwierdź OK i efekt mamy taki (po posortowaniu):

Wynik po posortowaniu

Wynik po posortowaniu

Tadam! Wszystko!

W artykule przedstawiłam jedną metodę na rozwiązanie tego zadania – moim zdaniem najbardziej czytelną.

Korzystaj śmiało!

Powiązane produkty

  • Filtr zaawansowany – zapomniane narzędzie Excela – pełna lekcja o filtrze zaawansowanym, podczas której pokazuję jak go stosować, jakie ma przewagi nad autofiltrem, jak budować zaawansowane kryteria (określane formułą!) i, dla dociekliwych, jak cudne rzeczy można uzyskać przy jego pomocy w makrach (bez konieczności pisania kodu!)
  • Kurs Excel w codziennej pracy – mający na celu uporządkować Twoją wiedzę na temat Excela. Jest świetny zarówno dla osób, które chcą uporządkować swoją wiedzę, zdobywaną do tej pory “po omacku”, jak i takich, które dopiero zaczynają swoją przygodę z Excelem.
  • Funkcje baz danych – prezentuje rzadko używane (a szkoda!) funkcje z grupy BD, czyli baz danych. Dzięki tym funkcjom będziesz w stanie odpowiedzieć na skomplikowane pytania, zawierające więcej niż jedno kryterium, połączone słowem LUB, a nie tylko ORAZ, jak to umieją funkcje SUMA.WARUNKÓW czy LICZ.WARUNKI.

 

Plik do pobrania:

MalinowyExcel rozw z Webinaru Filtr zaawansowany DW.xlsx

 

I film na Youtubie, gdzie pokazuję powyższe rozwiązanie:

 

 

 

Termin płatności VAT-u, PIT-u i ZUS-u

$
0
0

Czyli funkcja VBA, która ustala faktyczny termin płatności, uwzględniająca dni wolne od pracy

Terminy płatności podatków VAT, PIT  czy ZUS są z góry określone, np. VAT powinien być zapłacony do 25 dnia miesiąca. Jeśli jednak ten 25. wypada w dzień wolny od pracy – termin przesuwa się na kolejny dzień roboczy.

W Excelu są genialne funkcje, które umieją określać np. liczbę dni roboczych między dwiema datami czy datę przypadającą po określonej licznie dni roboczych. Natomiast tutaj mamy nieco inną sytuację – potrzebujemy sprawdzić czy dany dzień jest dniem roboczym, a jeśli nie – ustalić najbliższy.

Dawno już nie było VBA na blogu, więc w tym artykule opiszę funkcję VBA, która umie taką datę ustalić.

Formatka do zadania dowolna, natomiast koniecznie musimy gdzieś w niej umieścić listę świąt, np. tak:

Formatka

Do dzieła!

Założenia do funkcji VBA

Funkcja będzie potrzebowała od nas:

  1. daty, którą będziemy sprawdzać (czyli np. dla VAT jest to 25)
  2. zakresu świąt – najprościej ten zakres nazwać (ja nazwałam po prostu Swieta)

I teraz ważne:

Tak samo, jak w każdej excelowej funkcji dat, uwzględniającej święta, w zakresie świąt muszą znajdować się święta, które mają wpływ na obliczenia. Ja najbardziej polecam wrzucić wszystkie święta w interesującym nas roku i nie przejmować się tym, z jakiego miesiąca tego roku jest nasza data.

Tworzenie funkcji VBA, ustalającej termin płatności podatków

Termin płatności podatków lub oczywiście jakikolwiek inny. Nie ma znaczenia – funkcja będzie umiała okreslić dowolną datę, jak tylko dostanie od nas wymagane dane.

Stworzymy w VBA funkcję, zatem najpierw stwórzmy nowy moduł, w którym ta funkcja będzie żyła.

Ja nazwę swoją funkcję TerminPlatnosci. Będzie miała ona następujące argumenty:

  1. data (typ: data)
  2. zakres świąt (typ: zakres)

Deklaracja funkcji wygląda więc następująco:

Function TerminPlatnosci(Data As Date, Swieta As Range) As Date
    
    
End Function

Kod VBA: ustalanie czy dzień jest roboczy

Sprawdzimy teraz, czy wprowadzona przez użytkownika data wypada w dzień roboczy. Jeśli tak – po temacie – mamy gotową odpowiedź. Jeśli zaś nie – będziemy zwiększać ją o jeden dzień do tej pory, aż uzyskamy dzień roboczy.

Do ustalenia czy dzień jest roboczy, wykorzystam funkcji arkusza DNI.ROBOCZE. Ponieważ Visual Basic jest Amerykaninem – użyję specjalnie dla niego angielskiej nazwy tej funkcji, czyli NETWORKDAYS.

Funkcja ta bada liczbę dni roboczych między dwiema datami (również potrzebuje zakresu ze świętami – ten mamy już określony). Jeśli tej funkcji podamy tę samą datę jako datę początkową i końcową – określimy czy ta data to dzień roboczy (wynik = 1), czy wolny od pracy (wynik = 0). Chyba napiszę o tym oddzielny wpis :).

A póki co, dalsza część kodu wygląda tak:

    Dim CzyRoboczy As Boolean
    
    Do
        CzyRoboczy = Application.WorksheetFunction.NetworkDays(Data, Data, Swieta)
        If Not (CzyRoboczy) Then Data = Data + 1
    Loop Until CzyRoboczy

Zauważ, że zmienna CzyRoboczy to zmienna logiczna. Przypisałam do niej wartość, jaką zwróci funkcja NETWORKDAYS. A ona zwróci liczbę. Jeśli więc ta liczba będzie równa zero, dla funkcji będzie to równoznaczne z FAŁSZEM. Jeśli zaś jeden (tutaj nie przewiduję innej opcji ;)) – będzie to oznaczało PRAWDĘ. Mówiłam o tym spoooro podczas szkolenia online o logice bez funkcji logicznych.

Na koniec jeszcze tylko przypisanie wyniku i zakończenie funkcji:

    TerminPlatnosci = Data
    
End Function

Całość (z moimi komentarzami) wygląda tak:

Function TerminPlatnosci(Data As Date, Swieta As Range) As Date
    'czy roboczy
    Dim CzyRoboczy As Boolean
    Do
        CzyRoboczy = Application.WorksheetFunction.NetworkDays(Data, Data, Swieta)
        If Not (CzyRoboczy) Then Data = Data + 1
    Loop Until CzyRoboczy
    
    TerminPlatnosci = Data
    
End Function

Tadam! I po krzyku :).

 

Na koniec mam do Ciebie prośbę: pomożesz mi dotrzeć z tym artykułem do szerszego grona? Jeśli zechcesz udostępnić ten artykuł na Facebooku – będę Ci bardzo wdzięczna! Bardzo się starałam, aby ten artykuł był dla Ciebie na tyle wartościowy, by wart był wzmianki ;). Oczywiście śmiało podeślij go innym osobom mailem lub Messengerem. Będzie mi bardzo miło:)

 

Powiązane produkty

  • Logika bez funkcji logicznych – podczas tej lekcji nauczysz się korzystać z logiki bez użycia funkcji logicznych (takich jak ORAZ czy LUB). Okazuje się, że często bardzo ułatwia i przyspiesza to naszą pracę. Dodatkowo dowiesz się jak stosować logikę w narzędziach Excela takich jak sprawdzanie poprawności czy formatowanie warunkowe.
  • Nagrywanie makr – podczas tej dwugodzinnej lekcji dowiesz się jak w sprytny sposób nagrywać całkiem inteligentne makra
  • Funkcje dat – excelowy niezbędnik – lekcja omawiająca najważniejsze funkcje dat, które pozwolą Ci w prosty sposób dokonywać obliczeń na datach, bez kombinowania jak koń pod górę.

 

Plik do pobrania:

MalinowyExcel Funkcja VBA Płatność VAT 25 DW.zip

 

I film na Youtubie, gdzie pokazuję powyższe rozwiązanie:

 

 

 

Formuła: Termin płatności VAT-u, PIT-u i ZUS-u

$
0
0

Czyli jak ustalić najbliższy danej dacie dzień roboczy

W poprzednim artykule opisywałam funkcję napisaną w VBA, która ustala czy wybrany dzień jest roboczy, a jeśli nie – określa najbliższy dzień roboczy od niej. Jest to bardzo przydatne do określania odgórnie narzuconych terminów płatności, że np. VAT płacimy 25 dnia miesiąca, PIT – dwudziestego, a ZUS – dziesiątego lub piętnastego.

Da się to zrobić formułą  (i to o wiele prościej!) i o tym będzie ten artykuł.

Wykorzystam identyczną formatkę, co ostatnio (z listą świąt, nazwaną jako Swieta!):

Formatka

Do dzieła!

Funkcja określająca dzień roboczy

Z wielu przecudnych funkcji dat Excela, jedna umie określać datę, przypadającą określoną liczbę dni roboczych po określonej dacie. Funkcja ta to DZIEŃ.ROBOCZY i ją wykorzystam do określenia terminu płatności.

Zastosuję tylko jeden drobny trik: będę oddalała się o jeden dzień, ale od daty o 1 dzień wcześniejszej niż nasz termin płatności.

Czyli, jeśli np. termin płatności przypada na 25 grudnia – datą, którą wpiszę do funkcji będzie 24 grudnia. I oddalać się będę od niej o 1 dzień roboczy. Jest to o tyle genialne, że będę sprawdzała kolejne dni aż do skutku. Może będzie to 25 (w grudniu to akurat nie ;)), a może dopiero któryś kolejny dzień.

Formuła wygląda tak:

=DZIEŃ.ROBOCZY(E6-1;1;Swieta)

I tyle! Geniusz, doprawdy.

Oczywiście moja formuła zawiera nazwany zakres świąt, który koniecznie musimy tej funkcji podać. Możesz “normalnie”, a możesz nazwa go tak, jak ja. Ja zdecydowanie bardziej wolę nazywać, gdyż jest to czytelniejsze  i wygodniejsze.

Czytelniejsze, ponieważ od razu wiadomo, że chodzi o święta.

Wygodniejsze, ponieważ wpisuję prostą nazwę, a nie muszę się męczyć z określaniem gdzie lista świąt jest. A wcale nie musi być w tym samym arkuszu! Powiem wręcz tak: w praktyce najlepiej jest ją wrzucać do innego, ukrytego, arkusza, i po prostu się do niej odwoływać, bez zawracania sobie głowy, gdzie ona dokładnie jest… Tak cudownie działają nazwy! Więcej o nich mówię tutaj.

Uzupełniona funkcją formatka wygląda tak:

Wynik

 

Na koniec mam do Ciebie prośbę: pomożesz mi dotrzeć z tym artykułem do szerszego grona? Jeśli zechcesz udostępnić ten artykuł na Facebooku – będę Ci bardzo wdzięczna! Bardzo się starałam, aby ten artykuł był dla Ciebie na tyle wartościowy, by wart był wzmianki ;). Oczywiście śmiało podeślij go innym osobom mailem lub Messengerem. Będzie mi bardzo miło:)

 

Powiązane produkty

  • Nazwy – wstęp – pokazuję tutaj jak stworzyć nazwy komórek, zakresów i – co jest arcyciekawe – formuł! To bardzo proste i przydatne, zobaczysz 🙂
  • Logika bez funkcji logicznych – podczas tej lekcji nauczysz się korzystać z logiki bez użycia funkcji logicznych (takich jak ORAZ czy LUB). Okazuje się, że często bardzo ułatwia i przyspiesza to naszą pracę. Dodatkowo dowiesz się jak stosować logikę w narzędziach Excela takich jak sprawdzanie poprawności czy formatowanie warunkowe.
  • Funkcje dat – excelowy niezbędnik – lekcja omawiająca najważniejsze funkcje dat, które pozwolą Ci w prosty sposób dokonywać obliczeń na datach, bez kombinowania jak koń pod górę.

 

Plik do pobrania:

MalinowyExcel Termin VAT formułą DW.xlsx

 

I film na Youtubie, gdzie pokazuję powyższe rozwiązanie:

 

 

 

Szukanie nakładających się terminów

$
0
0

Czyli Power Query w akcji!

Zadanie na dziś jest… dość skomplikowane.

Pracownicy naszej firmy zapisują się (lub są zapisywani) na szkolenia. Wszystkie te dane mamy zgromadzone w tabeli. Dysponujemy danymi pracownika, nazwą szkolenia, jego datą rozpoczęcia i zakończenia.

Zdarzają się błędy przypisań: pracownik może być zapisany na szkolenia nakładające się na siebie. Chcemy stworzyć mechanizm, który będzie wyłapywał te błędy.

Pracę taką, niestety, musimy wykonywać co najmniej raz w miesiącu. Przyda się zatem rozwiązanie z kategorii co-zrobić-aby-się-nie-narobić. Power Query przyjdzie nam z pomocą. Oto formatka:

Formatka

Do dzieła!

Logika rozwiązania

Pomysł na rozwiązanie tego zadania poddał mi członek mojej grupy na Facebooku – Krzysiek. Poszczególne kroki będą następujące:

  1. określenie konkretnych dni (dat), w których mają odbywać się szkolenia,
  2. zliczenie ile razy występuje dany dzień dla danego pracownika (powinien wystąpić raz!),
  3. wyfiltrowanie wszystkich nieprawidłowości: dat, występujących więcej niż raz dla pracownika,
  4. przyporządkowanie nazw szkoleń kolidującym datom.

Będzie grupowanie, scalanie zapytań… Ale po kolei.

Ładowanie danych do Power Query

Dane w formatce znajdują się w tabeli o nazwie tbSzkolenia. Należy załadować je do Power Query, czyli

  1. ustawiamy się w dowolnym miejscu tabeli
  2. Dane/ Z tabeli/zakresu

Power Query samo zmieni typy importowanych danych, niekoniecznie tak, jakbyśmy tego chcieli. Kolejnym krokiem będzie więc zmiana typów danych:

  • Data od i data do → na datę
  • ID pracownika → tekst

Ok. Po takiej kosmetyce możemy przejść do sedna sprawy, czyli do

Tworzenie listy dat szkolenia

Na początku potrzebujemy wyodrębnić konkretne dni (daty), w których odbywa się szkolenie. W zależności od czasu jego trwania – mogą to być 2 daty, trzy czy nawet więcej. Efekt ten osiągniemy tworząc listę, której początkiem będzie Data od, a końcem Data do.

W tym celu dodamy sobie kolumnę niestandardową, czyli w edytorze Power Query: Dodaj kolumnę/ Kolumna niestandardowa, a w niej następująca formuła:

={Number.From([Data od])..Number.From([Data do])}

Po jej dodaniu otrzymamy taki efekt:

Kolumna z listą dat

Kolejnym krokiem będzie rowinięcie wpisów listy do osobnych wierszy. W tym celu kliknij w strzałeczki w nagłówku kolumny Niestandardowe i wybierz opcję Rozwiń do nowych wierszy:

Rozwijanie listy do nowych wierszy

Po zmianie typu na data, nowa kolumna wygląda tak:

Kolumna dat

Tutaj można od razu usunąć niepotrzebne kolumny, czyli datę od i datę do.

Wykrywanie kolidujących dat szkoleń

Teraz będziemy liczyć ile razy każda data występuje dla jednego pracownika. Jeśli dane byłyby idealne – powinna występować tylko raz. Ale dane nie są idealne, więc chcemy wychwycić takie, które występują więcej niż raz. W tym celu:

Pogrupujemy dane wg. pracownika i daty i zliczymy ile jest takich rekordów. Czyli :

  1. kliknij np. na kolumnie ID pracownika prawym przyciskiem myszy i wybierz grupuj.
  2. Następnie ustaw grupowanie zaawansowane,
  3. wybierz poziomy grupowania (ID, pracownik Niestandardowe),
  4. Określ co ma wyświetlać kolumna grupująca – ma zliczać wiersze.

Całość wygląda tak:

Zliczanie dni poprzez grupowanie

Teraz przyszła kolej na odrzucenie prawidłowych rekordów, czyli takich, gdzie data występuje tylko raz.  Wykorzystamy więc filtrowanie kolumny Liczność tak, aby pokazać wartości większe niż 1:

Filtrowanie błędnych danych

Scalanie: przyporządkowanie nazw szkoleń

Ponieważ podczas grupowania uciekły nam nazwy szkoleń – chcemy je teraz przyporządkować. Zrobimy to wykorzystując mechanizm scalania zapytań.

Zrobię to trochę na łatwiznę, przez co może niezbyt intuicyjnie. Ale zobaczysz, że po delikatnej zmianie kodu będzie miało to sens. Zanim jednak zacznę scalać, warto wiedzieć co z czym chcę scalić.

Chciałabym scalić obecny widok z widokiem, który miałam prawie na początku, czyli w kroku, gdzie wyodrębniłam dni szkoleń (może to być krok z usuwaniem kolumn). Dla większej czytelności – zmienię nazwę tego kroku na ListaSzkoleń.

Nadchodzi nieintuicyjny moment.

Scalę teraz te kroki: obecny i ListaSzkoleń, korzystając z mechanizmy scalania zapytań. Robię tak, abym mogła wyklikać to z menu, a nie musiała pisać kodu ręcznie. Kod podmienię za chwilę :).

Czyli, będąc w ostatnim kroku (u mnie nazywa się on Przefiltrowano wiersze), z menu Narzędzia główne wybieram Scal zapytania.

Scalać będę zapytanie, w którym jestem (u mnie to zapytanie nazywa się Szkolenia) z samym sobą, wg klucza ID pracownika-Niestandardowe (Niestandardowe to nazwa kolumny z datami). O tak:

Scalanie kroków/zapytań

Teraz trzeba podmienić nazwę drugiego scalanego zapytania, na naszą ListaSzkoleń. To już robimy w pasku formuły najnowszego kroku. Uzyskujemy taki wpis:

= Table.NestedJoin(#"Przefiltrowano wiersze", {"ID pracownika", "Niestandardowe"}, #"ListaSzkoleń", {"ID pracownika", "Niestandardowe"}, "Przefiltrowano wiersze", JoinKind.LeftOuter)

A wynik scalenia jest następujący:

Wynik scalenia

Teraz, z tabel w kolumnie Przefiltrowano wiersze chcemy wyodrębnić nazwy szkoleń. Znów użyjemy do tego celu strzałek wyodrębniania w nagłówku kolumny (pamiętaj o odznaczeniu opcji Użyj oryginalnej nazwy kolumny jako prefiksu):

Wyodrębnianie nazw szkoleń

To w zasadzie tyle.

Na koniec można jeszcze ładnie posortować dane według pracownika i daty oraz usunąć kolumnę Liczność. A żeby było już w ogóle pięknie – można też zmienić nazwę Niestandardowe na Data (w sumie można było to zrobić wcześniej, ale zapomniałam :)).

Otrzymujemy taki piękny efekt:

Wynik zapytania

Całość możemy załadować do Excela jako tabela, albo jako tabela przestawna. Ta ostatnia będzie ciekawie wyglądać:

Wynik w tabeli przestawnej

Jak dodamy do tego bajerki w stylu fragmentatorów – możemy w fajny sposób filtrować np. pracowników :).

I hope that helps.

Na koniec mam do Ciebie prośbę: pomożesz mi dotrzeć z tym artykułem do szerszego grona? Jeśli zechcesz udostępnić ten artykuł na Facebooku – będę Ci bardzo wdzięczna! Bardzo się starałam, aby ten artykuł był dla Ciebie na tyle wartościowy, by wart był wzmianki ;). Oczywiście śmiało podeślij go innym osobom mailem lub Messengerem. Będzie mi bardzo miło:)

 

Powiązane produkty

  • Power Query – wstęp dla laików – Celem tej lekcji jest wprowadzenie w magiczny świat Power Query wszystkich tych, którzy jeszcze nie mieli do czynienia z tym cudownym narzędziem. Coś tam kiedyś słyszeli, coś widzieli, ale jeszcze nic samodzielnie nie robili.
  • Kurs Excel w codziennej pracy – mający na celu uporządkować Twoją wiedzę na temat Excela. Jest świetny zarówno dla osób, które chcą uporządkować swoją wiedzę, zdobywaną do tej pory “po omacku”, jak i takich, które dopiero zaczynają swoją przygodę z Excelem.

 

Plik do pobrania:

MalinowyExcel Rejestr szkoleń dw.xlsx

 

I film na Youtubie, gdzie pokazuję powyższe rozwiązanie:

(pojawi się wkrótce)

 

 


Kwartał cyframi rzymskimi

$
0
0

Czyli jak ustalić kwartał daty za pięć lat, pisane rzymskimi cyframi?

W tym artykule pokażę Ci formułę, która ustala trochę więcej niż w tytule :).

Na podstawie podanej daty będziemy ustalać kwartał i rok daty za pięć lat. Aby upiększyć wynik dopiszemy pośrodku literkę “Q”. O tak (przy okazji zobacz formatkę):

Kwartał daty za pięc lat rzymskimi WYNIK

Do dzieła!

Elementy formuły

Aby ustalić numer kwartału (cyframi rzymskimi) i rok daty za pięć lat, potrzebujemy następujących kroków:

  1. Ustalenie kwartału daty za pięć lat (będzie taki sam, jak daty wyjściowej)
  2. Ustalenie cyfry rzymskiej tego kwartału
  3. Ustalenie roku daty za pięć lat

Po kolei teraz je opiszę.

Ustalenie kwartału daty za pięć lat

Interesuje nas kwartał daty, która będzie oddalona od bazowej daty o 5 lat. Miesiąc tej daty się nie zmieni, w końcu ma to być za równo 5 lat. Kwartały tych dwóch dat będą takie same (nawet luty nam tutaj nie wadzi, bo wszystko jest w obrębie pierwszego kwartału). Śmiało mogę więc obliczyć numer kwartału na podstawie bazowej daty – będzie prostsza formuła.

Ustalę więc kwartał (szczegółowo opisywałam ten sposób tutaj). A zrobię to tak (bazowa data w komórce B6):

=ZAOKR.GÓRA(MIESIĄC(B6)/3;0)

W efekcie otrzymam numery kwartałów napisane cyframi arabskimi. Ja chcę rzymskimi, więc wrzucę powyższą formułę do funkcji RZYMSKIE:

=RZYMSKIE(ZAOKR.GÓRA(MIESIĄC(B6)/3;0))

W efekcie otrzymam:

Miesiąc cyframi RZYMSKIMI

Miesiąc cyframi RZYMSKIMI

Uff. Połowa sukcesu! Teraz dokleję do tego literkę “Q” – to już prościzna, użyję do tego zwykłego znaczka &, o tak:

=RZYMSKIE(ZAOKR.GÓRA(MIESIĄC(B6)/3;0))&" Q "

Teraz przyszła kolej na ustalenie roku daty za pięć lat i doklejenie jej do dotychczasowej formuły. Zajmijmy się najpierw tym rokiem.

Ustalanie roku dla daty za pięć lat

Do ustalenia daty oddalonej o konkretną liczbę miesięcy od wskazanej daty (np. o 5*12=60 miesięcy), posłużę się cudowną funkcją NR.SER.DATY:

=NR.SER.DATY(B6;$C$3*12)

W komórce C3 znajduje się liczba lat, o jaką chcę się oddalić. Jak pomnożę ją przez 12 – otrzymam liczbę miesięcy. Wynik powyżeszj formuły jest następujący:

Data za pięć lat

Teraz tylko pozostaje nam wyodrębnić z niej rok. Zrobię to prościutką funkcją ROK:

=ROK(NR.SER.DATY(B6;$C$3*12))

Efekt jest taki:

Rok za pięć lat

Teraz obie dotychczasowe części formuły połączę ze sobą w jedną, o tak:

=RZYMSKIE(ZAOKR.GÓRA(MIESIĄC(B6)/3;0))&" Q "&ROK(NR.SER.DATY(B6;$C$3*12))

I w efekcie otrzymuję:

Kwartał daty za pięc lat rzymskimi WYNIK

WYNIK

I to wszystko. Trochę funkcji daty, trochę operacji na tekście i funkcja RZYMSKIE. I gotowe! 🙂

Na koniec mam do Ciebie prośbę: pomożesz mi dotrzeć z tym artykułem do szerszego grona? Jeśli zechcesz udostępnić ten artykuł na Facebooku – będę Ci bardzo wdzięczna! Bardzo się starałam, aby ten artykuł był dla Ciebie na tyle wartościowy, by wart był wzmianki ;). Oczywiście śmiało podeślij go innym osobom mailem lub Messengerem. Będzie mi bardzo miło:)

 

Plik do pobrania:

MalinowyExcel Kwartał daty za 5 lat rzymskimi dw.xlsx

 

I film na Youtubie, gdzie pokazuję powyższe rozwiązanie:

 

 

 

WYSZUKAJ.PIONOWO: jak działa szukanie przybliżone?

$
0
0

Artykuł ten to odpowiedź na pytanie, jakie zadał uczestnik mojego kursu online Excel w codziennej pracy cz. 2. 

Sama odpowiedź jest dość krótka: WYSZUKAJ.PIONOWO przybliżone wykorzystuje tzw. szukanie binarne… tylko prawdopodobnie nic Ci to nie mówi i musisz googlać dalej ;). Żeby zatem oszczędzić Ci dalszego szukania – opowiem co to znaczy.

Jak zwykle posłużę się praktycznym przykładem: tabelą rabatową. Załóżmy, że w zależności od wartości zakupów, klienci otrzymują rabat, określony w tabeli rabatowej (na obrazku: po prawej). Oto formatka:

Jak zatem WYSZUKAJ.PIONOWO znalazło wartość 1900 w tabeli rabatowej, mimo że tej wartości tam nie było? Skąd wiedziało, że 1900 zawiera się w przedziale od 1500 do 1999,99?

Użyło szukania przybliżonego.

A jak działa ten rodzaj szukania? Czytaj dalej 🙂

Formuła

Po pierwsze, aby w ogóle użyć szukania przybliżonego (choć ja wolę określenie szukanie przedziałami/wpasowywanie liczby w przedział), w ostatnim argumencie WYSZUKAJ.PIONOWO należy wpisać PRAWDA (lub np. 1 lub nic nie wpisywać). O tak:

=WYSZUKAJ.PIONOWO(C5;$G$6:$H$14;2;PRAWDA)

Ten ostatni argument decyduje o sposobie szukania, jaki ma być użyty:

  • FAŁSZ = szukanie dokładne
  • PRAWDA = szukanie przybliżone

Szukanie dokładne wykorzystuje najprostszy na świecie sposób szukania, tzw. szukanie liniowe, czyli po prostu, po kolei porównuje szukaną wartość z każdą wartością zakresu.  Jest przez to strasznie wolne. Ten sposób przeszukiwania, szuka tylko identycznych wartości.

Szukanie przybliżone z kolei, wykorzystuje tzw. szukanie binarne + potrafi zwrócić wynik dla wartości, której nie ma w przeszukiwanym zakresie (dlatego nazywa się szukaniem “przybliżonym” ;)):

  • uwzględnia wtedy największą wartość, która jest jednocześnie mniejsza niż szukana
  • nie zwraca wartości, gdy szukana wartość jest mniejsza niż najmniejsza w przeszukiwanym zakresie

Jak działa szukanie binarne?

Mi zawsze kojarzy się ono z szukaniem słowa w słowniku czy szukaniem osoby na liście obecności. Dzięki temu, że słowa są posortowane, my-ludzie wiemy, w którym miejscu słownika/listy szukać, dzięki czemu zawężamy sobie pole poszukiwań. Zaczynamy od pierwszej litery słowa, potem patrzymy na drugą itd. Za każdym razem idziemy albo w jedną ze stron: do góry listy lub w dół.

Szukanie binarne działa podobnie: posortowany rosnąco zakres dzieli na połowy na podstawie środkowej wartości. Jeśli jest ona większa niż szukana – przeszukuje dalej już tylko pierwszą połowę, a drugą odrzuca. Tę pierwszą połowę znowu dzieli na pół, potem znowu, i tak aż znajdzie szukaną wartość. Zakres musi być posortowany rosnąco – inaczej takie szukanie nie ma sensu.

Brzmi trochę skomplikowanie, więc zobacz na przykładzie naszej tabeli rabatowej.

Tak to wygląda w skrócie, a za chwilę dokładny opis:

Szukanie binarne wyszukaj.pionowo

Szukanie binarne krok po kroku

Jak działa szukanie binarne – przykład krok po kroku

Załóżmy, że w tabeli rabatowej szukamy wartości zakupu = 1900 zł. Ja-człowiek widzę, że należy się za to rabat 2%, gdyż kwota 1900 jest między 1500 a 2000.

Ale prześledźmy “tok rozumowania” Excela w tej sytuacji.

1. W pierwszej kolumnie przeszukiwanego zakresu, Excel znajduje jego środkową wartość. W naszym wypadku jest to 3000:

WYSZUKAJ.PIONOWO zukanie binarne krok 1

Krok 1

Ponieważ nasza szukana wartość, 1900, jest mniejsza niż 3000. Wartości większe niż 3000 nie będą brane pod uwagę.

WYSZUKAJ.PIONOWO szukanie binarne

Eliminacja dolnej połówki zakresu

Zostaje zatem do przeszukania górna połówka zakresu:

WYSZUKAJ.PIONOWO szukanie binarne

Górna połówka do przeszukania

2. Tę połówkę dzielimy zatem dalej na pół i porównujemy 1900 do jej środkowej wartości: 1900 > 1500:

WYSZUKAJ.PIONOWO szukanie binarne

Dzielenie kolejnej połówki

Zostaje dolna połówka do przeszukania:

WYSZUKAJ.PIONOWO szukanie binarne

Dolna, coraz mniejsza, połówka do przeszukania

3. Ostatni krok wygląda identycznie: porównanie 1900 do środkowej wartości: 1900<1500, zatem zostaje wartość 1500:

WYSZUKAJ.PIONOWO szukanie binarne

WYSZUKAJ.PIONOWO (przybliżone), zwróci wartość identyczną do szukanej lub , jeśli nie znajdzie takiej: największą, ale mniejszą od szukanej

Ponieważ interesuje nas wyświetlenie drugiej kolumny przeszukiwanego zakresu, czyli stawki rabatu, WYSZUKAJ.PIONOWO wyświetli wynik 2%.

Na koniec warto jeszcze dodać, że:

  • Szukanie binarne jest bardzo szybkie, właśnie ze względu zawężanie obszaru poszukiwań poprzez eliminację “połówek”
  • Zwykłe szukanie, wykorzystywane w dokładnym dopasowaniu WYSZUKAJ.PIONOWO, szuka po kolei, od początku tabeli (dlatego nie musi ona być wtedy sortowana).
  • Nowa funkcja X.WYSZUKAJ (dostępna w Excelu 2021, w wersji www i subskrypcyjnej 365) nie wymaga sortowania danych przez użytkownika w szukaniu przybliżonym. Funkcja ta sortuje dane w pamięci, czyli użytkownik tego po prostu nie widzi. Dodatkowo, umożliwia również szukanie w drugą stronę: czyli jeśli nie znajdzie identycznej wartości – wyświetla wartość najmniejszą z większych. Ale ta funkcja to temat na zupełnie inną okazję :).

 Plik do pobrania:
MalinowyExcel Jak działa szukanie przybliżone w WP dw

 

 

A film pojawi się wkrótce :).

Kalendarz adwentowy cz. 1. (MalinowoExcelowy)

$
0
0

Czyli kolorowanie choinki

Jak urozmaicić sobie czas oczekiwania do Świąt? Kalendarzem adwentowym! W tym artykule pokażę Ci jak można zrobić takowy w Excelu. Co prawda bez cukierków, ale zrobi wrażenie ;).

Użyjemy do tego formatowania warunkowego, a konkretnie skali kolorów, a z funkcji – proste ILE.LICZB. Do dzieła!



W filmie zamieszczonym poniżej zobaczysz pełne rozwiązanie. Uwaga! Zaczynam w nim od początku grudnia i wszystkie (dwie ;)) formuły tego dotyczą. Możesz oczywiście zacząć później, dla lepszego efektu

Aby ułatwić Ci pracę, oto formuły, których użyłam w rozwiązaniu:

Liczba obecności, E7 (Zrobione):

=ILE.LICZB('3. Choinka'!D10:D26)

Ogólna liczba dni, E8 (To do):

=ILE.LICZB('3. Choinka'!B10:B26)

Procent, E9:

=E7/E8

 

 

Na koniec mam do Ciebie prośbę: pomóż mi dotrzeć z tym artykułem do szerszego grona. Udostępnij proszę ten artykuł na Facebooku – będę Ci bardzo wdzięczna! Bardzo się starałam, aby ten artykuł był dla Ciebie na tyle wartościowy, by wart był wzmianki ;). Oczywiście śmiało podeślij go innym osobom mailem lub Messengerem. Będzie mi bardzo miło:)

 

Plik do pobrania:

MalinowyExcel Kalendarz adwentowy cz.1 DW.xlsx

 

 

 

 

 

Kalendarz adwentowy cz. 2.

$
0
0

Czyli wyświetlanie BOMBEK na choince

Druga część kalendarza – wyświetlanie bombek na choince, wykorzystuje NAZWY. Bez nich byłoby ciężko… Jest też oczywiście obraz połączony, czyli trik, który zastosowałam w pierwszej części kalendarza – w kolorowaniu choinki. Jeśli go nie czytała(e)ś, koniecznie to nadrób.

Koniecznie zrób ten trik u siebie w pracy :).

Założenia

  1. Masz już zrobioną choinkę z poprzedniego artykułu
  2. Masz przygotowane bombki, które umieścisz na choince. Mogą to być:
    1. zwykłe autokształty: kolorowe kółka (ja tak zrobiłam)
    2. obrazki bombek, np. pobrane z netu
  3. Bombki są umieszczone w jednej komórce, która jest mniej więcej tej samej wysokości, co choinka. U mnie to wygląda tak:
Bombki na choinkę do kalendarza adwentowego

Bombki na choinkę do kalendarza adwentowego

Rozwiązanie – film

Rozwiązanie – krótki opis

1. Formuła określająca, czy wyświetlać bombki

Napiszemy ją w arkuszu roboczym (ROB) w komórce E11 (generalnie nie ma to znaczenia, więc możesz wybrać jakąś inną).

Formuła wygląda tak:

=JEŻELI(E9=1;"SaBombki";"BezBombek")

Odwołuję się w niej do komórki E9, ponieważ tam określiłam ile czasu minęło/zostało do Świąt (postęp wyrażony w procentach).

2. Nadanie nazw komórkom i formule

Teraz nazwiemy komórki, których obrazki mają się wyświetlać na choince. Te obrazki będą pokazywać bombki lub nie.

U mnie komórką, która nie ma bombek jest komórka G3. Nazwę ją jako BezBombek. Aby nadać nazwę – zaznacz komórkę, następnie w polu nazwy wpisz wybraną nazwę i zatwierdź Enterem.

To samo robimy w komórce H3 (są w niej bombki). Nadajemy jej nazwę SaBombki.

Ostatnia nazwa to nazwa, która powie połączonemu obrazkowi, którą z wyżej wymienionych komórek wyświetlać: z bombkami czy bez. Tę nazwę nadamy z Menedżera Nazw, gdyż nazwiemy formułę:

=ADR.POŚR(ROB!$E$11)

Aby to zrobić:

  1. Wejdź do menu Formuły/ Menedżer Nazw
  2. Kliknij Nowy…
  3. Uzupełnij okienka:
    Nazwa: Bombki
    Odwołuje się do: =ADR.POŚR(ROB!$E$11)

    Nadawanie nazwy formule

    Nadawanie nazwy formule

  4. Zatwierdź OK.

Teraz, gdy wypełnimy nasz timesheet ostatniego dnia – na choince pojawią się bombki :).

Dla ładnego efektu możemy jeszcze zlikwidować ramkę wokół bombek. Wystarczy w tym celu wyłączyć linie siatki w arkuszu ROB: Widok/ Linie siatki.

I gotowe! Oto efekt ostatniego dnia:

Wynik

Wynik

Oczywiście możesz to upiększyć po swojemu, wstawić swoje obrazki bombek, dodać łańcuch – cuda niewidy :).

Mam nadzieję, że Ci się spodobało i że podzielisz się tym wpisem z innymi! Choćby z jedną osobą, np. wyślij jej link do tego wpisu mailem czy na Messengerze. Dziękuję!

Plik do pobrania:

MalinowyExcel Kalendarz adwentowy cz.2 BOMBKI DW.xlsx

 

 

 

Rozdzielanie danych z wierszy komórki do osobnych kolumn

$
0
0

Czyli transpozycja danych z komórki i magiczny skrót klawiszowy

W tym wpisie pokażę Ci jak w prosty sposób przerobić wiele danych, w których wszystkie informacje zapisane są pod sobą, w jednej komórce. Ponieważ tego po prostu nie da się sensownie analizować – naszym celem będzie przedstawienie tych danych w układzie tabelarycznym. Dzięki temu będziemy mogli zrobić z tymi danymi wszystko: sortować, filtrować, korzystać z funkcji, z narzędzi typu tabela przestawna itp.

Chodzi zatem o taką operację:

Rozdzielanie zawiniętych danych - Efekt

To chcemy osiągnąć

Brzmi i wygląda skomplikowanie, a w gruncie rzeczy jest bardzo proste.

Dislaimer

Od razu na wstępie zaznaczę, że sposób, który pokazuję w tym artykule, jest bardzo dobry do jednorazowych sytuacji, albo takich, które zdarzają się rzadko. Jeśli zaś podobna sytuacja zdarza Ci się często, np. codziennie (!), to po pierwsze współczuję ;), a po drugie – pokusiłabym się wtedy o automatyzację tego, choćby za pomocą niezastąpionego Power Query. Ale to temat na inny artykuł :).

Formatka – dane do przerobienia

Tak oto wyglądają nasze dane:

Rozdzielanie zawiniętych danych Efekt Ctrl J Formatka

Formatka

Ponieważ tego po prostu nie da się sensownie analizować – naszym celem jest przedstawienie tych danych w układzie tabelarycznym. Dzięki temu będziemy mogli zrobić z tymi danymi wszystko: sortować, filtrować, korzystać z funkcji, z narzędzi typu tabela przestawna itp.

W tym celu zastosujemy narzędzie rozdzielania tekstów Tekst jako kolumny. Opiszę teraz po kolei wszystkie potrzebne do tego kroki.

Rozdzielanie danych – kroki

  1. Zaznacz dane, które chcesz rozdzielić, czyli w naszym wypadku B4:B15
  2. Wybierz z menu Dane/Teskt jako kolumny
  3. Pojawi Ci się poniższy kreator. W pierwszym kroku należy zaznaczyć, że nasze dane są rozdzielane:

    Typ pliku: rozdzielany

    Typ pliku: rozdzielany

  4. Następnie trzeba Excelowi powiedzieć czym są rozdzielane. U nas jest to znak, którego nie widać, ponieważ jest to przejście do następnej komórki. Ciężko to Excelowi powiedzieć, ale jest na to magiczny sposób – skrót klawiszowy Ctrl+j. Zobacz, tak wygląda kreator, w którym jeszcze nie użyłam tego skrótu:
    Wybór ogranicznika: opcja "Inne"

    Wybór ogranicznika: opcja Inny

    A tak wygląda, kiedy użyłam:

    Ogranicznik: Ctrl + j

    Ogranicznik: Ctrl + j

    Różnica jest najlepiej widoczna w okienku podglądu danych

  5. OK, teraz zostało wskazanie miejsca, gdzie Excel ma umieścić rozdzielone dane. U mnie jest to komórka C4:

    Wskazanie miejsca docelowego

    Wskazanie miejsca docelowego

  6. Ostatni krok to zatwierdzenie wszystkich ustawień przyciskiem Zakończ.

I voila! Zobacz, jaki piękny efekt:

Warto oczywiście dodać nagłówek tym danym i ładnie go sformatować. Można też usunąć pierwotne dane, jeśli są nam nie potrzebne. Wszystko do kupy wygląda tak:

Dane po dodaniu nagłówka i sformatowaniu go

Dane po tuningu

Fajne? 🙂 Jeśli Ci się podobał ten trik, to koniecznie zapisz się na mój bezpłatny mailing, na którym wysyłam więcej takich excelowych ciekawostek! Śmiało – formularz zapisu znajdziesz pod plikiem do pobrania i filmem.

 

Plik do pobrania:

MalinowyExcel Rozdzielanie danych podział wierszaDW.xlsx

 

I film na Youtubie, gdzie pokazuję powyższe rozwiązanie:

(pojawi się wkrótce)

 

 

 

 

Viewing all 291 articles
Browse latest View live