Tag Archives: ćwiczenia

Loading
loading..

Po przeczytaniu tego wpisu będziesz wiedział jak w łatwy sposób pobrać pełną ścieżkę pliku. Do tego celu można wykorzystać metodę GetOpenFilename obiektu Application lub metodę GetSaveAsFilename obiektu Application.

Metoda GetOpenFilename wyświetla dobrze wszystkim znane okno dialogowe Otwieranie, gdzie wskazujemy folder oraz wybieramy plik, który nas interesuje.
okno otwierania

Co ważne metoda ta nie otwiera wskazanego pliku a jedynie pobiera jego ścieżkę oraz nazwę i zwraca jako łańcuch znaków.

Poniżej przykład implementacji metody GetOpenFilename

Sub PobierzSciezkePliku()
    Dim SciezkaPliku As Variant 'Deklaracja zmiennej, która będzie przechowywać ścieżkę pliku
    Dim FileFilter As String 'Deklaracja zmiennej, która będzie argumentem FileFilter
    
    FileFilter = "Pliki Excel XLSX (*.xlsx),*.xlsx," 'Tutaj podajemy łańcuch określający kryterium filtrowania plików
    
    SciezkaPliku = Application.GetOpenFilename(FileFilter) 'Otwarcie okna dialogowego Otwieranie oraz pobranie ścieżki pliku do zmiennej
End Sub

Wszystkie argumenty metody GetOpenFilename są opcjonalne.

Application.GetOpenFilename(FileFilter, FileIndex, Title, ButtonText, MultiSelect)

FileFilter – argument ten określa co pojawi się na liście rozwijanej okna dialogowego Otwieranie. Jeżeli pominiemy ten argument to w oknie będą wyświetlane Wszystkie pliki. Jest to równoznaczne z podaniem argumentu „Wszystkie pliki (*.*),*.*

W powyższym przykładzie wyświetlamy tylko pliki formatu .xlsx. Argument FileFilter jest równy: „Pliki Excel XLSX (*.xlsx),*.xlsx,”
Pierwsza część łańcucha: Pliki Excel XLSX  definiuje jaki tekst będzie wyświetlany na liście rozwijanej Pliki typu. Druga część: (*.xlsx),*.xlsx, określa jakie pliki zostaną wyświetlone w oknie (tylko o formacie .xlsx).

FilterIndex – argument ten definiuje domyślne kryterium filtrowania plików (Ma to znaczenie w przypadku gdy FileFilter posiada więcej niż jedno kryterium. Poniżej jest zaprezentowany przykład gdy argument FileFilter składa się z 3 kryteriów).

Title – tytuł okna dialogowego (jesli zostanie pominięty, tytułem będzie łańcuch Otwieranie

ButtonText – argument stosowany tylko w przypadku systemu Macintosh

MultiSelect – jeżeli argument ma wartość True, wybranych może być więcej niże jeden plik. Wartością domyślną jest False (możliwość wybierania tylko jednego pliku). Gdy argument będzie równy True to metoda GetOpenFilename będzie zwracać tablicę.

Poniżej przykład gdy mamy 3 kryteria filtrowania plików:

Sub PobierzSciezkePliku()
 Dim SciezkaPliku As Variant
 Dim FileFilter As String
 
 FileFilter = "Pliki Excel (*.xlsx;*.xls),*xlsx;*.xls,"
 "Pliki Excel XLSX (*.xlsx),*.xlsx,"
 "Pliki Excel 97-2003 (*.xls),*.xls,"
 
 SciezkaPliku = Application.GetOpenFilename(FileFilter)
End Sub

Następnie spróbujmy zdefiniować 4 kryteria filtrowania plików, ustawić czwarte kryterium jako domyślne i zmienić tytuł okna dialogowego.

Sub PobierzSciezkePliku()
    Dim SciezkaPliku As Variant
    Dim FileFilter  As String
    Dim FilterIndex  As Integer
    Dim Title As String
    
    FileFilter = "Pliki Excel (*.xlsx;*.xls),*xlsx;*.xls," & _
    "Pliki Excel XLSX (*.xlsx),*.xlsx," & _
    "Pliki Excel 97-2003 (*.xls),*.xls," & _
    "Wszystkie pliki (*.*),*.*"
    
    FilterIndex = 4 'Wybieramy domyślny filtr. 4 oznacza że domyślnie wybieramy filtr Wszystkie pliki (*.*)
    Title = "Otwórz plik Excela"
    
    SciezkaPliku = Application.GetOpenFilename(FileFilter, FilterIndex, Title)
    
    'Wyświetlenie  MessageBox, jeśli w oknie dialogowym zostanie naciśnięty przycisk Anuluj
    If SciezkaPliku = False Then
        MsgBox "Nie wybrano żadnego plikU."
        Exit Sub
    End If
End Sub

Metoda GetSaveASFilename jest prawie identyczna jak metoda GetOpenFilename. Różnica jest taka, że wyświetla ona okno dialogowe Zapisywanie jako i umożliwia wybranie pliku lub podanie nazwy pliku. Funkcja również zwraca ścieżkę pliku wraz z nazwą i nie podejmuje żadnej akcji. Wszystkie argumenty tej funkcji są opcjonalne. Argument InitialFilename pozwala określić sugerowaną nazwę pliku (wraz ze ścieżką do pliku).

Poniżej zadania, które pomocą Ci poćwiczyć sprawniejsze posługiwanie się pętlami.

Zadania powinny być uniwersalne w każdym języku imperatywnym
Czyli niezależnie od tego jakiego języka programowania się uczysz, zadania powinny być rozwiązywalne. ( C, C++, C#, JAVA, JavaScript, VBA, Ruby, Python)

Zadania na wykorzystanie pętli

Napisz funkcję/procedurę/metodę, której wywołanie pozwoli na:

  1. wypisz liczby od 1 do 100
  2. wypisz liczby od 8 do 50
  3. wypisz liczby parzyste od 2 to 50
  4. wypisz liczby od 100 do 1
  5. wypisz liczby podzielne przez 8 ( w zakresie 1..100)
  6. wypisz liczby podzielne przez 3 lub 5 ( w zakresie 1..100)
  7. wypisz liczby podzielne przez 3 albo 5 ( w zakresie 1..100) (nie wypisuj tych podzielnych jednocześnie przez 3 i 5)
  8. wypisz największą liczbę niepodzielną przez 2,3,5,7 ale mniejszą od 1000
  9. sprawdź czy podana jako parametr liczba jest parzysta
  10. sprawdź czy podana jako parametr liczba jest liczbą pierwszą. (podzielna tylko przez 1 i przez samą siebie) (opis tutaj
  11. wylicz największy wspólny dzielnik 2 liczb podanych jako parametry (opis tutaj)
  12. wylicz najmniejszą wspólną wielokrotność liczb podanych jako parametry (opis tutaj)
  13. ile jest liczb pierwszych w zakresie od a do b podanym jako parametry
  14. sprawdź czy 2 liczby podane jako parametr są liczbami względnie pierwszymi. (opis tutaj)
  15. sprawdź czy pesel ( jako parametr) jest prawidłowym peselem (tutaj opis)
  16. oblicz silnię n (n – podane jako parametr) (tutaj opis)
  17. oblicz n-tą liczbę ciągu fibonacciego (n – podane jako parametr) (tutaj opis)
  18. oblicz n-tą liczbę pierwszą (n – podane jako parametr)

Wszystkie rozwiązania mile widziane, umieszczę pod zadaniami.
Jak będziesz miał jakieś pytania, któreś z zadań będzie za trudne do rozwiązania, to pisz na maila, spróbuję podpowiedzieć i wytłumaczyć.

Powodzenia!

Szybkie powtórzenie materiału z funkcji Excela

Poniżej do ściągnięcia plik z zadaniami.
Zakres to:
1) funkcje: Suma.jeżeli, licz.jeżeli, wyszukaj.pionowo (sumif, countif, vlookup).
2) formatowanie
3) tworzenie statystyk
4) proste tabele przestawne
Mogą przydać się jeszcze inne techniki jak filtrowanie/usuwanie duplikatów/formatowanie warunkowe.

Wszystkie dane poza miastami i województwami są wymyślone lub wylosowane.
miasta i województwa pobrałem ze strony http://www.wiw.pl/geografia/miasta/spiswoj.asp

plik z zadaniami do ściągnięcia tutaj:

excel
http://heap.pl/wp-content/uploads/2015/10/zadaniaMiasta.zip

Zadania

1. Napisz funkcję, która pobierze datę i zwróci nazwę dnia tygodnia.
2. Makro, która wszystkie zaznaczone komórki zamieni na wartości tekstowe
3. Napisz makro, które dla zaznaczonych komórek wyliczy ile z tych komórek zawiera liczby.
4. Napisz makro, które ukryje wszyztkie arkusze poza pierwszym.
5. Napisz makro, które pokaże arkusz pierwszy, a wszystkie pozostałe ukryje.
6. Napisz makro, które dla zaznaczonych komórek kolorem czerwonym pokoloruje błędy a kolorem niebieskim pokoloruje tekst. (pozostałe komórki nie powinny być zmieniane)
7. Napisz funkcję, która przyjmuje liczbę (lub tekst) i liczy ile razy występuje w całym pliku ( we wszystkich arkuszach).
7*. Jak wyżej, ale zrób to bez użycia pętli (będzie działać szybciej)
8. Napisz funkcję, która dla polskiego numeru rachunku bankowego odpowie, czy długość i cyfra kontrola zgadza się.
Zrób tak, aby funkcja działała zarówno dla numerów ze spacjami jak i bez spacji.
Na wikipedii możesz znaleźć sposób wyliczania cyfr kontrolnych. kliknij tutaj

Rozwiązania

Wkrótce…

Zadanie na GUI:

1. zrób formularz osobowy: 2 labele, 2 textboxy     (imię i nazwisko) + radiobutton z wyborem płci + przycisk DODAJ
Na początku żaden z radiobuttonów nie powinien być zaznaczony.
Dodatkowo program powinien uniemożliwić kliknięcie przycisku bez wpisanych danych lub bez zaznaczonej płci. (proponuję zrobić to po prostu właściwością Enabled)
po wpisaniu danych i kliknięciu przycisku program dopisuje koleją osobę na końcu pliku i czyści to co wpisaliśmy w textboxach oraz odznacza wszystko w radiobutton.

Zadanie STOS:

2. Napisz klasę, która będzie stosem (stack). Jest to struktura danych, która udostępnia 4 metody:
* bool czyPusty
* bool czyPełny
* void dodaj(int x)
* int pobierz()
Elementy dodawane do stosu układane są tak jak np. dokumenty na stole:
Jeśli dodam nowy dokument to będzie on na wieżchu stosu. ( instrukcja dodaj)
Jeśli dodam kolejny, to ten będzie na górze a poprzedni pod nim. ( instrukcja dodaj)
Jeśli teraz chciałbym pobrać dokument, to bez rozwalania stosu mogę wziąć tylko ten na górze. (instrukcja pobierz)
Stos możesz oprogramować za pomocą:
*  listy (dodajesz zawsze na początek i pobierasz również z początku listy)
* tablicy (początek tablicy jest spodem stosu, a ty pamiętasz ile papierów tam już masz i jeśli dodajesz nową liczbę, to zwiększasz indeks pamiętający górę stosu).
Zastanów się, zrób jedną a najlepiej obie implementacje.
Jeśli się zatniesz, to pisz.
W internecie (chociażby na Wikipedii) znajdziesz sporo info o implemenacji stosów.

Zadanie dodatkowe. Sprawdź jak w bibliotece STL rozwiązany jest stos. I jak go używać.

ZADANIE

Zadanie polega na wyróżnieniu wszystkich osób o wieku poniżej 30 lat.
a) chcemy pokolorować tylko ich wiek
b) chcemy pokolorować cały wiersz w którym jest taka osoba

Do zadania będzie potrzebna baza osób kliknij tu (xlsx) lub tu (zip)

Najwygodniej rozwiązać to zadanie używając formatowania warunkowego.
Dzięki temu po zmianie danych kolorowanie komórek również się zmieni. (będzie aktualizowało się na bieżąco)

Rozwiązanie pkt a)

To do dzieła!

  1. Zaznaczamy wszystkie komórki zawierające wiek.
  2. z karty Narzędzia Główne wybieramy Formatowanie Warunkowe -> Nowa Reguła -> Formatuj komórki zawierające
  3. wpisujemy kryteria w kolejnych kratkach (konkretnie: wartość, mniejsza niż, 30)
  4. musimy jeszcze wybrać kolor na który mają sformatować się komórki spełniające kryteria, czyli Formatuj -> karta Wypełnienie -> wybieramy kolor
  5. Klikamy OK

Możesz zobaczyć to tutaj

Rozwiązanie pkt b)

  1. Zaznaczamy całą tabelę (bez nagłówków) a nie tylko wiek.
    (bo jeśli wszyscy mieliby poniżej 30 lat, to chcemy kolorować wszystkie komórki)
  2. z karty Narzędzia Główne wybieramy Formatowanie Warunkowe -> Nowa Reguła -> Użyj formuły do określenie komórek…
  3. wpisujemy formułę: =$E2 < 30
    Formułę piszemy tak, żeby była prawdziwa jeśli komóreka ma być kolorowana, w przeciwnym razie ma dać w wyniku fałsz.
    Formuła ma być napisana dla lewej górnej komórki (aktywnej) czyli w naszym przypadku dla A2
    A po co znaczek $ ?
    musimy wstawić go przed E, ponieważ Excel kopiując komórki powinien zawsze sprawdzać wiek (kolumnę E). Jeśli zabrakło by $ to Excel Dla liczb porządkowych działałoby prawidłowo, ale dla kolejnych kolumn przesuwałby kryteria w prawo (dla imion sprawdzałby zawód (kolumna F), a dla nazwisk kolumnę G)
  4. nie zapomnij o zdefiniowaniu formatowania komórek (ja wybrałem kolor niebieski)

Możesz zobaczyć to tutaj

Layout mode
Predefined Skins
Custom Colors
Choose your skin color
Patterns Background
Images Background

Zapisz się na nasz newsletter dotyczący nauki Excela

Wysyłaj mi newsletter (możesz się wypisać w każdym dowolnym momencie).

FreshMail e-mail marketing free online marketing software