VBA w Exce13, excel


VBA w Excelu - kurs dla początkujących

Na wstępie mała uwaga formalna. Strony kursu z założenia stanowią jedno tematyczną całość. Wiadomości nabyte na poprzednich stronach uzupełniają informacje aktualnie przedstawiane. Jednak chciałbym aby każdy temat tego kursu funkcjonował samodzielnie i był do wykonania dla kompletnego laika w dziedzinie programowania. Dlatego też niektóre informacje uznałem za stosowne powtórzyć na tej stronie.

0x01 graphic
Tablice

Mimo że nie jest to niezbędne dla początkujących programistów, ale żeby tematyka tego działu była kompletna opisze jeszcze zmienne tablicowe. Zmienne tego typu możemy wykorzystać na przykład do pracy ze zbiorem powiązanych ze sobą informacji. Zmienna tablicowa inaczej tablica jest zmienną zawierającą wiele komórek przeznaczonych do przechowywania wartości, podczas gdy typowa zmienna ma jedynie jedną komórkę, w której można przechowywać tylko jedną wartość. Obrazowo można to przedstawić w ten sposób: Zwykłą zmienną możemy porównać do kontenera, który zawiera jeden pojemnik do przechowywania zmieniających się zawartości, tablice zaś możemy porównać do zestawu pojemników umieszczonych w takim właśnie kontenerze z których każdy może przechowywać inną zawartość. Pojemniki te ułożone są w odpowiednim porządku inaczej strukturze. Każdy taki pojedynczy pojemnik (element) zmiennej tablicowej jest oznaczony indeksem liczbowym określającym jego miejsce w danej strukturze tablicy.

  • tablica - zbiór kolejno indeksowanych elementów mających ten sam wewnętrzny typ danych. Każdy element tablicy posiada unikatowy numer indeksu. Przeprowadzenie zmian dla jednego elementu tablicy nie wpływa na inne jej elementy.

0x01 graphic

Zmienne tablicowe mogą być jedną lub wielowymiarowe (dla naszych skromnych potrzeb z powodzeniem wystarczą tablice jedno a co najwyżej o dwóch wymiarach). Tablica jednowymiarowa jest zbiorem kolejno po sobie następujących elementów. Przykładem zaś tablicy dwuwymiarowej może być tabela czy arkusz kalkulacyjny z wieloma wierszami i kolumnami. Tablica trójwymiarowa to już prostopadłościan. Większa liczba wymiarów jest trudna do wyobrażenia (przynajmniej dla mnie) ale jako ciekawostkę podam, że za pomocą VB możemy deklarować tablice zawierające do 60 wymiarów.

0x01 graphic

Deklarowanie tablicy:

Tablice są w zasadzie deklarowane w ten sam sposób co inne zmienne, to jest z użyciem instrukcji Dim, Static, Private lub Public. Słowa te tak jak w przypadku zmiennych służą nie tylko do deklarowania ale i do określania zakresu tablic. Za jednym z tych słów należy podać nazwę tablicy (zmiennej tablicowej) zakończonej parą nawiasów wewnątrz których określamy rozmiar tablicy (lub pozostawiamy puste). Tablica, dla której rozmiar jest określony, jest tablicą o stałym rozmiarze. Tablica, dla której rozmiar nie jest określony (nawiasy puste) i może zmieniać się podczas działania programu, jest tablicą dynamiczną.

0x01 graphic

Poniżej przedstawiam przykład prostej deklaracji tablicy. W przykładzie za pomocą słowa kluczowego Dim deklarujemy jednowymiarowo tablice o nazwie DniTygodna. Nazwa tablicy kończy się parą nawiasów w której określamy rozmiar tablicy, czyli liczbę elementów które tablica ma przechowywać. Nasza tablica zawiera siedem elementów, dlaczego siedem a nie sześć jak to podaliśmy. Ponieważ domyślnie elementy tablicy są numerowane od zera.

Dim DniTygodnia(6)

0x01 graphic

Jak wspomniałem elementy tablicy są domyślnie numerowane od zera. Przeważnie nie ma to większego znaczenia ale nieraz ustawienie takie może być niewygodne. Numer początkowy indeksu tablic możemy zmienić z 0 na 1 stosując instrukcje Option Base 1. Instrukcje tę należy zastosować na początku modułu kodu w sekcji deklaracji tego modułu, czyli przed pierwszą występującą w nim procedurą.

Ustalenie indeksu początkowego tablicy za pomocą instrukcji Option Base 1 odnosi się do wszystkich tablic deklarowanych w danym module. Jeżeli takie generalne rozwiązanie jest dla nas mało wygodne możemy użyć innego sposobu ustalenia indeksu początkowego tablicy odnoszącego się do pojedynczych tablic. W sposobie tym w instrukcji deklaracji konkretnej tablicy określamy numer (index) pierwszego elementu i liczbę elementów tablicy. Poniżej deklarujemy tablice o składającą się z siedmiu elementów, index pierwszego elementu ustawiony jest na jeden.

Dim DniTygodnia(1 To 7)

0x01 graphic

Tablice stosuje się zazwyczaj do przechowywania danych tego samego typu. Dlatego też w instrukcji deklaracji tablicy możemy a nawet powinniśmy podać typ danych jaki dana tablica ma przechowywać. Wyjątkiem od zasady jednolitości typu danych jest tablica zadeklarowana jako Variant, pozwala to przypisywać poszczególnym elementom tablicy dane dowolnych typów. Rozwiązanie takie jest nieraz wygodne ale jak wiemy bardzo pamięciożerne. A oto przykład deklaracji tablicy typu String

Dim DniTygodnia(1 To 7) As String

UWAGA: podobnie jak w przypadku deklaracji pojedynczych zmiennych, jeżeli dla tablicy nie zostanie określony typ danych, jako typ danych elementów deklarowanej tablicy przyjmowany jest Variant.

0x01 graphic

Do tej pory deklarowaliśmy tablice o jednym wymiarze, w tym punkcie przedstawię sposób deklaracji tablicy dwuwymiarowej. Tablice dwuwymiarową możemy porównać na przykład do tabeli lub arkusza kalkulacyjnego. Odpowiednie liczby określają liczbę kolumn i wierszy w tablicy. Jeżeli tablicę wyobrazimy sobie jako macierz, to pierwszy z argumentów reprezentuje wiersze, a drugi argument reprezentuje kolumny. Poniżej deklarujemy tablice typu Byte składającą się ze 100 elementów (zawierającą 10 wierszy i 10 kolumn).

Dim Oceny(9, 9) As Byte

Lub też

Dim Oceny(1 To 10, 1 To 10) As Byte

0x01 graphic

Zapisywanie danych do tablic:

Aby zapisać dane do tablicy należy wybranemu elementowi tablicy przypisać odpowiednią wartość. W pierwszym przykładzie tworzymy tablice do przechowywania nazw dni tygodnia, następnie poszczególnym elementom tablicy przypisujemy odpowiednie wartości.

Dim DniTygodnia(1 To 7) As String
 DniTygodnia(1) = "Poniedziałek"
 DniTygodnia(2) = "Wtorek"
'idt.

A oto inny przykład zapisywania danych do tablicy tym razem dwuwymiarowej.

Dim Oceny(1 To 10, 1 To 10) As Byte
 Oceny(1, 1) = 5
 Oceny(1, 2) = 4
'idt.

0x01 graphic

Do zapisania danych do tablicy możemy też użyć funkcji InputBox, funkcję to poznamy w dalszej części kursu.

Dim DniTygodnia(1 To 7) As String
 DniTygodnia(1) = InputBox("Podaj nazwę dnia")
'idt.

0x01 graphic

Dane umieszczane w tablicy mogą być pobierane też bezpośrednio z komórek arkusza Excela.

0x01 graphic

Dim DniTygodnia(1 To 7) As String
 DniTygodnia(1) = Range("A1").Value
'idt.

0x01 graphic

Odczytywanie danych z tablicy:

Wartość pojedynczego elementu tablicy (tak jak w przypadku zmiennych) możemy odczytać i wykorzystać na wiele sposobów. Możemy jej użyć na przykład w wyrażeniu, przypisać do innej zmiennej czy też wyświetlić w oknie funkcji MsgBox lub komórce arkusza Excela.

W przedstawionym przykładzie za pomocą funkcji MsgBox (funkcja ta dokładnie omówiona jest w dalszej części kursu) wyświetlamy wartość elementu tablicy o indexie 2.

0x01 graphic

Dim DniTygodnia(1 To 7) As String
 DniTygodnia(1) = "Poniedziałek"
 DniTygodnia(2) = "Wtorek"
'idt.
 MsgBox DniTygodnia(2)

A oto sposób pobrania wartości z elementu (index 1, 2) tablicy dwuwymiarowej.

Dim Oceny(1 To 10, 1 To 10) As Byte
 Oceny(1, 1) = 5
 Oceny(1, 2) = 4
 MsgBox Oceny(1, 2)

0x01 graphic

Poniżej przedstawiam sposób przypisania wartości pojedynczego elementu tablicy do innej zmiennej, którą możemy w jakiś sposób wykorzystać w dalszej części naszego programu.

Dim NumerDnia
Dim DniTygodnia(1 To 7) As String
 DniTygodnia(1) = "Poniedziałek"
 DniTygodnia(2) = "Wtorek"
'idt.
 NumerDnia = DniTygodnia(2)

0x01 graphic

UWAGA: do zapisu jak i odczytu danych z tablicy często też używane są pętle.

0x01 graphic

Tablice dynamiczne:

W przykładach przedstawionych do tej pory deklarowaliśmy tablice o określonym rozmiarze. Jeżeli nie znamy rozmiaru tablicy lub wiemy ze rozmiar tablicy zmieni się podczas działania programu możemy zadeklarować tablice dynamiczną.

Aby zadeklarować tablice dynamiczną w instrukcji która ją deklaruje nie podajemy jej rozmiaru.

Dim WybraneDni() As String

Jednak ponieważ zadeklarowana w ten sposób tablica nie może przechowywać żadnych danych to przed jej użyciem musimy określić jej aktualny rozmiar. Robimy to za pomocą instrukcji ReDim.

ReDim WybraneDni(4) As String

0x01 graphic

Array:

Informacyjnie tylko podam że inną (nietypową) tablice możemy utworzyć wykorzystując funkcje Array. Funkcja ta zwraca wartość typu Variant zawierającą tablicę.

0x01 graphic

Przykład 1:

A oto przykład w którym wykorzystujemy informacje przedstawione do tej pory. Deklarujemy tablice o nazwie DniTygodna składającą się z siedmiu elementów. Tablica ta służy do przechowywania nazw dni tygodnia. Poszczególnym elementom tablicy przypisujemy odpowiednie wartości. Następnie za pomocy funkcji Weekday określamy numer bieżącego dnia aktualnego tygodnia i przypisujemy do zmiennej NumerDnia. Numer ten w naszym przypadku (jak widać z przypisania) jest indeksem określającym wartość jaką pobieramy z tablicy DniTygodna. Wartość to (nazwę dnia) pokazujemy w komórce A1 arkusza, który jest wyświetlany w momencie otwarcia dokumentu Excela.

Przykład 1 kod przykładu:

Private Sub Workbook_Open()
 
Dim NumerDnia
 
Dim DniTygodnia(1 To 7) As String
  DniTygodnia(1) = "Niedziela"
  DniTygodnia(2) = "Poniedziałek"
  DniTygodnia(3) = "Wtorek"
  DniTygodnia(4) = "Środa"
  DniTygodnia(5) = "Czwartek"
  DniTygodnia(6) = "Piątek"
  DniTygodnia(7) = "Sobota"
 NumerDnia = Weekday(Date)
 Range("A1").Value = DniTygodnia(NumerDnia)
End Sub

Przykład 1 kroki:

  • Uruchom Microsoft Excel.

  • Z menu Widok wybieramy Paski narzędzi a następnie opcje Visual Basic, (jeżeli pasek nie jest widoczny).

  • Z paska narzędzi Visual Basic wybieramy przycisk Edytor Visual Basic.

  • Będąc w Edytorze Visual Basic, z menu View (Widok) wybieramy opcję Project Explorer (Eksploator projektu). Powinno się otworzyć okno Project-VBAProject (Projekt-VBAProject) oczywiście punktu tego nie wykonujemy, jeżeli okienko było wcześniej otwarte.

  • W oknie tym kliknij dwa razy na obiekt ThisWorkbook.

  • W nowo otwartym oknie Zeszyt1 - ThisWorkbook(Code) (Zeszyt1 - ThisWorkbook(Kod programu)) piszemy (wstawiamy) kod z przykładu.

  • Zamknij a następnie uruchom dokument celem przetestowani przykładu.

0x01 graphic

0x01 graphic
Dla dociekliwych:

Przykład 2:

Poniżej przedstawiam funkcje o nazwie: słownie, za pomocą której zamieniamy wartości liczbowe na wartości słowne. Jest to jakby wstęp do prawdziwej funkcji tego typu, ale za pomocą tego przykładu chciałbym pokazać w jaki można wykorzystać tablice. Nasza funkcja zmienia wartości liczbowe od 0 d 19 na wartości słowne. Tekst w kolorze zielonym zaczynający się od znaku ' jest komentarzem i nie ma wpływu na działanie przykładu.

Przykład 2 kod przykładu:

Function słownie(liczba)
 
Dim Wynik
Static jednosci(19) As String
 jednosci(0) = "zero"
 jednosci(1) = "jeden"
 jednosci(2) = "dwa"
 jednosci(3) = "trzy"
 jednosci(4) = "cztery"
 jednosci(5) = "pięć"
 jednosci(6) = "sześć"
 jednosci(7) = "siedem"
 jednosci(8) = "osiem"
 jednosci(9) = "dziewięć"
 jednosci(10) = "dziesięć"
 jednosci(11) = "jedenaście"
 jednosci(12) = "dwanaście"
 jednosci(13) = "trzynaście"
 jednosci(14) = "czternaście"
 jednosci(15) = "piętnaście"
 jednosci(16) = "szesnaście"
 jednosci(17) = "siedemnaście"
 jednosci(18) = "osiemnaście"
 jednosci(19) = "dziewiętnaście"
 
If IsNumeric(liczba) = False Then
  Wynik = "zły typ danych - funkcja konwertuje poprawnie liczby całkowite z przedziału od 0 do 19"
  słownie = Wynik
 
Exit Function
 
End If 'Za pomocą instrukcji If...Then...Else sprawdzamy czy wartość argumentu liczba naszej funkcji jest liczbą. Czyli jeżeli argument liczba nie jest liczbą wyświetlany jest komunikat o złym typie danych i kończymy działanie naszej funkcji.
 
If liczba > 19 Or liczba < 0 Then
  Wynik = "Zły zakres - funkcja konwertuje poprawnie liczby całkowite z przedziału od 0 do 19"
  słownie = Wynik
 
Exit Function
 
End If 'Opis analogicznie jak wyżej, sprawdzamy czy argument liczba jest liczbą która mieści się w przedziale od 0 do 19.
 liczba = Int(liczba)
 Wynik = jednosci(liczba)
 słownie = Wynik
End Function

Przykład 2 kroki:

  1. Uruchom Microsoft Excel.

  2. Z menu Widok wybieramy Paski narzędzi a następnie opcje Visual Basic, (jeżeli pasek nie jest widoczny).

  3. Z paska narzędzi Visual Basic wybieramy przycisk Edytor Visual Basic.

  4. Będąc w Edytorze Visual Basic, z menu Insert (Wstaw) wybieramy opcję Module (Moduł). Powinno się pojawić okno Zeszyt1 - Module1(Code) (Zeszyt1 - Moduł1(Kod programu)).

  5. W nowo otwartym w oknie Zeszyt1 - Module1(Code) (Zeszyt1 - Moduł1(Kod programu)) piszemy (wstawiamy) kod z naszego przykładu.

  6. Zamykamy Edytor VisualBasic (Alt+Q) i powracamy do Microsoft Excel.

  7. W arkuszu Excela kliknij np. komórkę B2, następnie z menu Wstaw wybierz opcje Funkcja.

  8. W oknie Wstawianie funkcji (Wklej funkcję) wybieramy:

    • Z pola Lub wybierz kategorię: (Kategoria funkcji:), opcje Użytkownika.

    • Następnie z pola Wybierz funkcję: (Nazwa funkcji:), naszą funkcję słownie. Wybór zatwierdzamy przyciskiem OK

  • W następnym oknie wpisujemy adres komórki z której funkcja ma pobierać argumenty np. A2 i naciskamy przycisk OK.

  • Przetestuj przykład wpisując odpowiednie liczby do komórki A2.

  • Przykład zasada działania:

    Po wpisaniu do komórki A2 liczby z przedziału od 0 do 19, w komórce B2 pojawi się interpretacja słowna tej liczby. Oczywiście wpis musimy zatwierdzić klawiszem Enter lub kliknięciem przyciskiem myszy w inną komórkę arkusza.



    Wyszukiwarka

    Podobne podstrony:
    VBA w Excel7, excel
    VBA w Excelu, excel
    VBA w Exce18, excel
    VBA w Exce21, excel
    VBA w Exce17, excel
    VBA w Excel3, excel
    VBA w Exce14, excel
    VBA w Exce16, excel
    VBA w Exce11, excel
    VBA w Excel4, excel
    VBA w Excel1, excel
    VBA w Excel5, excel
    VBA w Exce15, excel
    VBA w Exce12, excel
    VBA w Exce23, excel
    VBA w Exce25, excel
    VBA w Excel6, excel
    VBA w Exce10, excel
    VBA w Excelu10, excel

    więcej podobnych podstron