1 Komunikacja z arkuszem. Iteracje. Funkcje.Programowanie w VBA Komunikacja z arkuszem. Iteracje. Funkcje.
2 Komunikacja z arkuszemActiveCell – oznacza aktualnie wybraną komórkę, jeśli wybrany jest zakres, to jest to komórka od której zaczęto zaznaczać; Selection – wybrany zakres komórek; Cells – bezpośrednie odwołanie do komórek adresując bezwzględnie (czyli niezależnie od zaznaczenia); Adresowanie jak w macierzach: A(1,2) – 1.wiersz, 2. kolumna
3 Komunikacja z arkuszem - Aktualnie zaznaczona komórkaActiveCell.Value – zwraca wartość tej komórki lub umożliwia przypisanie jej wartości: Dim dana As Variant dana = ActiveCell.Value ActiveCell.Value = dana * 2 Można też używać znanych z rejestracji makr metod związanych z formatowaniem: ActiveCell.Font, ActiveCell.FontSize, itd. ActiveCell.Row – zwraca numer wiersza zaznaczonej komórki; ActiveCell.Column – zwraca numer (liczbowy) kolumny zaznaczonej komórki;
4 Komunikacja z arkuszem - Aktualnie zaznaczony zakresSelection.Rows.Count – zwraca ilość wierszy zaznaczenia; Selection.Columns.Count – zwraca ilość kolumn zaznaczenia;
5 Komunikacja z arkuszem – Zmienna - zakresDim zmienna as Range Set zmienna = Selection zmienna.Rows.Count – zwraca ilość wierszy zakresu przechowywanego w zmiennej; zmienna.Columns.Count – zwraca ilość kolumn zakresu przechowywanego w zmiennej; zmienna.Row – zwraca numer pierwszego wiersza zakresu ze zmiennej; zmienna.Column – zwraca numer pierwszej kolumny zmiennej; Ostatni wiersz zakresu: zmienna.Row + zmienna.Rows.Count - 1
6 Komunikacja z arkuszem –Zakres komórekRange("A1:B2") Range("A1:B2").Rows.Count Range("A1:B2").Select Range("A1:B2").Copy Range("A1:B2").Interior.Color = 2
7 Komunikacja z arkuszem - bezwzględne odwołanieCells(
8 Zadania Napisz program:Obliczający liczbę komórek w zakresie zaznaczonym aktualnie w arkuszu (mnożenie liczby wierszy przez liczbę kolumn); Wpisujący podaną przez użytkownika (inputbox) liczbę x w komórkę o koordynatach (x,x);
9 Iteracje dla n = 3
10 Iteracje Jest to powtarzanie tej samej instrukcji (bloku instrukcji) w pętli; Pętla musi mieć podaną ilość powtórzeń, niebezpośrednio – tworzy się ją przez zakres od liczby do liczby (przy rozpoczęciu sprawdzany jest warunek wykonania); For
11 Iteracje Wykonywanie pętli można przerwać z wewnątrz instrukcją Exit For – wywoływaną na przykład przez instrukcję warunkową;
12 Iteracje Po co takie kombinacje? Żeby nie trzeba było robić skomplikowanych przekształceń i używać bezpośrednio danych z zadania (na przykład) – ogólnie – w celu ułatwienia sobie życia; Pętla w pętli z dobrze dobranymi zakresami to idealny sposób na poradzenie sobie z operacjami na dowolnych macierzach, tablicach, itd.
13 Iteracje Inna składni iteracji specjalnie dla tablic:For Each
14 Inne iteracje While
15 Inne iteracje i=5 Do While i<5 MsgBox("bum") Loop DoMsgBox("brzdek") Loop While i<5
16 Zadania Napisz programy:Obliczającą sumę liczb naturalnych od 1 do n (n podane przez użytkownika); Wypisującą dzielniki liczby podanej przez użytkownika;
17 Zadania i = i +1 – kumulowanie 1 do i (dopisanie 1, bez usunięcia dotychczasowej wartości i); suma = …? - też nie chcemy, żeby znikła dotychczasowa wartość, ale żeby dodawał kolejne wartości do już istniejącej sumy wcześniejszych.
18 Instrukcja skoku GoTo
19 Abc =
20 Funkcja jednej i więcej zmiennychPobiera argument(y), które są potrzebne do obliczenia i zwrócenia jej wartości; Funkcja powinna mieć przypisany typ, wtedy trudniej o błąd; Function T_absolutna(T_Celsjusz) As Single T_absolutna = T_Celsjusz End Function
21 Funkcja stała Zwraca wartość stałą, np. funkcja: Function Avogadro()Avogadro = 6.022E+23 End Function Po wpisaniu do komórki „=Avogadro()” otrzymamy wynik: „6.022E+23”
22 Idiotoodporność Idiotoodporność (foolproof)! – warto stosować, abyśmy sami mogli stwierdzić, gdzie leży błąd w programie; Na czym polega? Należy przewidzieć wszystkie potencjalne błędy i możliwości, jakie mogą wystąpić przy przyjmowaniu danych wejściowych do programu. Każdą potencjalną opcję sprawdzać instrukcją warunkową i w przypadku wystąpienia błędu nie dopuszczać do jego wystąpienia, tylko odsyłać, na przykład, do wypisania własnego tekstu informującego o błędzie i z czego on wynika; Aby móc używać tej „techniki”, trzeba możliwie szeroko definiować zmienne wejściowe – np. poprzez typ Variant, a w miarę upewniania się co do prawidłowości danej zawartej w takiej zmiennej (przez komendy typu Is...) – przenosić ją do kolejnych bardziej zawężonych typów i operacji wykonywanych na niej.
23 Funkcje Przydatne komendy:IsNumeric(
24 Przykład Function przyklad(zakres As Variant) As StringDim tablica As Range If IsArray(zakres) Then Set tablica = zakres przyklad ="Liczba wierszy: " & tablica.rows.count End If End Function
25 Przykład Function przyklad(liczba As Variant) As StringIf IsNumeric(liczba) Then If liczba = liczba \ 1 Then przyklad = "calkowita" Else przyklad = "niecalkowita" End If End Function
26 Zadania do domu Napisz funkcję:Obliczającą sumę liczb od 1 do n (gdzie n jest argumentem funkcji); Obliczającą ciśnienie jednego mola gazu doskonałego na podstawie temperatury i objętości (dwa argumenty); Obliczającą n-ty element ciągu Fibonaciego; Napisz program: Wypełniający zakres komórek (kolejne komórki w zakresie rzędami) kolejnymi liczbami zaczynając od 1 używając pętli typu „for each element in zakres”; Wypełniający zakres komórek (kolejne komórki w zakresie rzędami) kolejnymi liczbami zaczynając od 1 używając pętli typu „For i = 1 to zakres.rows.count”;