Programowanie w VBA Komunikacja z arkuszem Iteracje Funkcje
Programowanie w VBA Komunikacja z arkuszem. Iteracje. Funkcje.
Funkcje • Funkcja to podstawowy sposób wykonywania operacji na komórkach w MS Excel; • Funkcja przenosi wartość przez swoją nazwę, a więc funkcja Abc wewnątrz swojego kodu musi zawierać instrukcję: Abc = <zwracana do komórki wartość funkcji>
Funkcja jednej i więcej zmiennych • Pobiera 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 + 273. 15 End Function
Funkcja stała • Zwraca wartość stałą, np. funkcja: Function Avogadro() Avogadro = 6. 022 E+23 End Function Po wpisaniu do komórki „=Avogadro()” otrzymamy wynik: „ 6. 022 E+23”
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ć 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.
Funkcje Przydatne komendy: • Is. Numeric(<zmienna>) – zwraca prawdę, jeśli zmienna jest liczbą (jeśli jest, można zmienną wsadzić do typu liczbowego); • Is. Array(<zmienna>) – prawda, jeśli zmienna jest tablicą (wektorem); • Is. Empty(<komórka>) – prawda, jeśli komórka jest pusta (zmienna typu Range); • Is. Date (<zmienna>) – prawda, jeśli zmienna może być zapisana jako data; • Len(<string>) – zwraca długość ciągu znaków; • Rnd() – zwraca liczbę losową z zakresu <0; 1)
Przykład Function przyklad(zakres As Variant) As String Dim tablica As Range If Is. Array(zakres) Then Set tablica = zakres przyklad ="Liczba wierszy: " & tablica. rows. count End If End Function
Przykład Function przyklad(liczba As Variant) As String If Is. Numeric(liczba) Then If liczba = liczba 1 Then przyklad = "calkowita" Else przyklad = "niecalkowita" End If End Function
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”;
Deklaracje tablic • Dim tablica(1 to 10) As Long • Dim tablica(10) = Dim tablica(0 to 10) • Dim tablica() – nieokreślony wymiar (deklaracja Dim przyjmuje tylko liczby) – Re. Dim tablica(0 to 10) – Array tablica("a", "b", "c") tożsame z: Re. Dim tablica(0 to 2) tablica(0) = "a" tablica(1) = "b" tablica(2) = "c"
Wstęp do funkcji bloków • UBound(<tablica>, <wymiar>) – zwraca ostatni indeks tablicy w podanym wymiarze (1 to wiersze (y), 2 to kolumny (x)); • LBound(<tablica>, <wymiar>) – zwraca pierwszy indeks tablicy w podanym wymiarze; • Wymiar tablicy to (UBound-LBound+1);
Funkcje bloków komórek (wektorów, tablicy) • Funkcja bloku: Function przyklad(zakres As Variant) As String Dim tablica As Variant Dim x As Integer Dim y As Integer If Is. Array(zakres) Then tablica = zakres x = UBound(tablica, 2) – LBound(tablica, 2) + 1 y = UBound(tablica, 1) – LBound(tablica, 1) + 1 przyklad = "Tablica ma " & x & " kolumn i " & y & " wierszy" Else przyklad = "Argument nie jest zakresem. " Endif
Funkcje bez zdefiniowanej liczby argumentów • Używa się ich na przykład do operacji na rozdzielonych blokach komórek i innych zastosowań, gdy nie chcemy mieć ograniczonej liczby argumentów (Optional daje możliwość użycia mniejszej liczby argumentów, ale nie większej); • Funkcja opiera się na tablicy Param. Array; Function <nazwa>(Paramarray <zmienna>) As <typ> • Np. : Function Przyklad(Paramarray parametry()) As String ‘() bo musi być typu Variant Dim arg 1 As Variant Dim arg 2 As Variant Dim arg 3 As Variant If Is. Array(parametry) Then If (Ubound(parametry, 1)-LBound(parametry, 1)+1) > 3 Then Przyklad = "Za duzo argumentów. " Else arg 1 = parametry(0) arg 2 = parametry(1) arg 3 = parametry(2) Przyklad = "Argument 1: " & arg 1 & ", Argument 2: " & arg 2 & ", Argument 3: " & arg 3 End If Else Przyklad = "Brak argumentów. " End If End Function
- Slides: 13