Programowanie w VBA
description
Transcript of Programowanie w VBA
ProgramowanieProgramowaniew VBAw VBA
Komunikacja z arkuszem.Komunikacja z arkuszem.Iteracje. Funkcje.Iteracje. Funkcje.
FunkcjeFunkcje
• 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 Funkcja jednej i więcej zmiennychzmiennych
• 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.15End Function
Funkcja stałaFunkcja stała• Zwraca wartość stałą, np. funkcja:
Function Avogadro() Avogadro = 6.022E+23End Function
Po wpisaniu do komórki „=Avogadro()” otrzymamy wynik: „6.022E+23”
Idiotoodporność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.
FunkcjeFunkcjePrzydatne komendy:• IsNumeric(<zmienna>) – zwraca prawdę, jeśli zmienna
jest liczbą (jeśli jest, można zmienną wsadzić do typu liczbowego);
• IsArray(<zmienna>) – prawda, jeśli zmienna jest tablicą (wektorem);
• IsEmpty(<komórka>) – prawda, jeśli komórka jest pusta (zmienna typu Range);
• IsDate (<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ładPrzykładFunction przyklad(zakres As Variant) As StringDim tablica As RangeIf IsArray(zakres) Then Set tablica = zakres przyklad ="Liczba wierszy: " & tablica.rows.countEnd IfEnd Function
PrzykładPrzykładFunction przyklad(liczba As Variant) As StringIf IsNumeric(liczba) Then If liczba = liczba \ 1 Then przyklad = "calkowita" Else przyklad = "niecalkowita" End IfEnd IfEnd Function
Zadania do domuZadania do domuNapisz 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”;
• 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)– ReDim tablica(0 to 10)– Array tablica("a", "b", "c")
tożsame z: ReDim tablica(0 to 2)tablica(0) = "a"tablica(1) = "b"tablica(2) = "c"
Deklaracje tablicDeklaracje tablic
Wstęp do funkcji blokówWstę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 Funkcje bloków komórek (wektorów, tablicy)(wektorów, tablicy)
• Funkcja bloku:
Function przyklad(zakres As Variant) As StringDim tablica As VariantDim x As IntegerDim y As IntegerIf IsArray(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 Funkcje bez zdefiniowanej liczby argumentówargumentó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 ParamArray;Function <nazwa>(Paramarray <zmienna>) As <typ>
• Np.:Function Przyklad(Paramarray parametry()) As String ‘() bo musi być typu Variant Dim arg1 As Variant Dim arg2 As Variant Dim arg3 As Variant If IsArray(parametry) Then If (Ubound(parametry,1)-LBound(parametry,1)+1) > 3 Then Przyklad = "Za duzo argumentów." Else arg1 = parametry(0) arg2 = parametry(1) arg3 = parametry(2) Przyklad = "Argument 1: " & arg1 & ", Argument 2: " & arg2 & ", Argument 3: " & arg3 End If Else Przyklad = "Brak argumentów." End IfEnd Function