Uniwersytet Łódzki
Wydział Matematyki i Informatyki
Arkusze kalkulacyjne i VBA
Tadeusz Krasiński
Lekcja 2. Dalsze elementy VBA
Adres:
www.math.uni.lodz.pl/~krasinsk
Studia Podyplomowe „Analiza danych i data mining”
Rok akademicki 2017/18
Zmienne
1. Zmienne (dowolna nazwa zaczynająca się od litery np. num, j23, JP2,…). Może reprezentować liczby, zakresy, wartości logiczne, obiekty. Nadajemy im wartości za pomocą znaku równości:
x=1
num=0.3
WartoscLogiczna=True x=x+1
Myname=”Tadeusz”
Dat = #12/14/2016#
Set Tab=Range(„A1:D4”) – kluczowe słowo Set do obiektów Możemy deklarować typ zmiennych. Nie jest to konieczne, np.
Dim MojaZmienna As Integer Dim x As Double
Dim MojaTablica(1 To 10, 1 To 100) As Integer - Zmienna tablicowa.
Domyślnie bez deklaracji zmienne maja typ Variant.
Typy zmiennych:
Ćwiczenie. Zadeklarować zmienną xx jako całkowitą, nadać jej wartość całkowitą i obliczyć z niej pierwiastek (użyć funkcji Sqr) i wyświetlić w MsgBox wartość tej zmiennej i jej pierwiastka.
Wypróbować inne warianty:1. nadać xx wartość niecałkowitą, 2.zadeklarować wynik jako całkowity,
Ćwiczenie. Zadeklarować zmienną Zakres jako Range, (Range jest obiektem a więc należy przy definiowaniu zmiennej
obiektowej użyć słowa kluczowego Set) nadać jej wartość np. w kwadracie komórek wpisać wartość np. 100.
Zasięg zmiennych
Przykłady deklarowania zasięgu zmiennych:
1. Sub makro1() Dim x1 as Integer
….Instrukcje…
End Sub
Zmienna x1 jako liczba całkowita dostępna tylko w tym makro
2. Dim x2 as String Sub makro1()
….Instrukcje…
End Sub +Kolejne makra
Zmienna x2 jako ciąg symboli dostępna tylko w tym module 3. Public x3 as String
Sub makro1()
….Instrukcje…
End Sub +Kolejne makra
Zmienna x3 jako ciąg symboli dostępna we wszystkich modułach (globalna).
4. Const Proc as Integer = 3
Deklaracja stałej Proc równej 3.
Ćwiczenie. Zadeklarować zmienną xxx jako całkowitą dla całego
modułu, nadać jej wartość w pewnym makro i w innym makro
wyświetlić ją (w MsgBox).
Zakresy i odwoływanie się do komórek
W większości przypadków makra wykonują operacje na zakresach komórek. Podstawowym obiektem jest Range , nie ma obiektu Cells – jest to własność obiektu Range
Zakresy (Range)
Najczęściej instrukcje, funkcje, polecenia dotyczą zakresów (pewnego zbioru komórek). Możemy je w makrach określać na różne sposoby:
1. Range(„A2:C7”) – prostokąt komórek to samo [A2:C7]
2. Range(„A2”,”C7”) – prostokąt
3. Range(„A2:C7, D1:E5”) – 2 prostokąty komórek
4. Range(„A2:C7 C1:E5”) – część wspólna 2 prostokątów komórek
5. Range(„A:A”) – kolumna 6. Range(„A:F”) – kolumny 7. Range(„1:5”) – wiersze
8. Range(„A2:C7”).Columns(1) – 1 kolumna w zakresie 9. Range(„A2:C7”).Rows(3) – 3 wiersz w zakresie
10. Range(„A2:C7”).Cells(2,3) – komórka o numerze (2,3) w zakresie
11. Range(„A2:C7”).Cells(3) – komórka o numerze 3 w zakresie, liczonych od lewej do prawej
12. Range(„b7”).Offset(-1,2) – komórka przesunięta o jeden wiersz w górę i dwie kolumny w prawo.
13. Aby nazwać zakres Set xx= Range(„A2:C7”), dalej np.
xx.Cells(6)
14. Cells(3,5) – komórka o współrzędnych 3 wiersz, 5 kolumna w aktywnym arkuszu, czyli E3
15. Cells(Rows.Count,1) – ostatnia komórka w 1 kolumnie (Count – liczba obiektów w danej kolekcji).
16. Cells(Rows.Count,2).End(xlUp) – ostatnia niepusta
komórka w kolumnie 2.
17. Range(„B3”).Resize(10,3) – rozciągnięcie zakresu 10 razy w dół i 3 w prawo.
18. CurrentRegion - aktualnie wykorzystany zakres komórek z aktualną komórką w tym zakresie.
19. UsedRange - aktualnie wykorzystany zakres komórek w całym arkuszu.
Ćwiczenie. Wypróbować 5 lub więcej sposobów określenia zakresów wykorzystując Metodę Select do zaznaczenia zakresu np. Range(„A1:B3”).Select
Ćwiczenie. Napisać makro, które w kwadratowy zakres (8 na 8) wpisuje kwadraty kolejnych liczb naturalnych.
Wykorzystać pętlę For i=1 to 64 …….. Next i
Ćwiczenie. Napisać makro, które w kwadratowy zakres ( 6 na 6) koloruje na jakiś kolor (własność Interior.Color
obiektu Range) i wpisuje po przekątnej kwadraty kolejnych liczb naturalnych.
Uwaga. Kolory określamy przez RGB(1,100,255) wartości kolorów:czerwony (R od 0 do 255), zielony(G od 0 do 255), niebieski (B od 0 do 255) lub przez wybrane stałe
np.vbYellow lub numer koloru od 0 do 255*255*255.
Ćwiczenie. Napisać program typu Sub wpisujący kolejne liczby
1,2,…,1000 w komórkach B1,B2,…,B1000 i wyświetlający
okno z napisem „Koniec”.
Wsk. Wykorzystać właściwość Cells obiektu Range.
1. Napisać program typu Sub usuwający co drugą liczbę z poprzedniego zadania.
Wsk. Wykorzystać metodę Clear .
Ćwiczenie 20. Utwórz makro, które wykorzystuje InputBox i MsgBox do pojawienia się tekstu powitalnego w oknie, gdy podamy swoje nazwisko i tekstu zniechęcającego lub o po nowną próbę, gdy podamy nieprawidłowe nazwisko.
Wskazówka. Składnia
InputBox („Zapytanie”,”Tytuł okna”, „Wartość domyślna w oknie”)
MsgBox („Zapytanie”,Możliwe przyciski,”Tytuł okna”) MsgBox „Tekst” wyświetla tekst
MsgBox Zmienna wyświetla wartość zmiennej
1. Różnica między tymi oknami polega na tym, że w InputBoxie na zapytanie wprowadzamy wartość, a w MsgBoxie mamy zadane zapytanie i udzielamy
standardowej odpowiedzi (Yes, No, Cancel,…).
2. Użyć polecenia If…Then…Else
Przykład 2. Makro, które w oknie dialogowym pyta o wiek a następnie po przekątnej od danej komórki wypisuje kolejne lata od wieku do wiek +4.
Sub Przyklad2()
Dim i As Integer, wiek As Integer
wiek = InputBox(“Podaj liczbę:”,”Wiek”, „18”) For i = 1 To 4
ActiveCell.Offset(i, i).Font.Bold = True
ActiveCell.Offset(i, i).Value = i+wiek
Next i
End Sub
Ćwiczenie. Napisać makro, które wpisuje Nazwisko w pierwszą pustą komórkę w prawym dolnym rogu użytego zakresu. Wsk. Wykorzystać własność CurrentRegion
Użyty zakres
Nazwisko