Spróbuj samodzielnie zrobić poniższe zadania (rozwiązania znajdziesz poniżej)
1. W komórce A1 znajduje się liczba. Wpisz w komórkach od A5 tyle liczb ile wynosi A1
2. Napisz makro, które ustawi formatowanie liczbowe z 2 miejscami po przecinku w kolumnie A, formatowanie tekstowe w kolumnie B, a formatowanie daty w kolumnie C. I autodopasuje wszystkie kolumny
3. Napisz makro, które wpisuje kolejnych 50 liczb po przekątnej (A1, B2, C3, D4, itd)
4. Napisz makro, zapyta się o liczbę i pokoloruje tyle komórek ile podał użytkownik
5. Napisz makro, które pokoloruje liczby ujemne w zaznaczonych komórkach
6. Napisz funkcję, która na podstawie daty sprawdzi, czy to był „weekend” czy „dzień tygodnia”
7. Napisz funkcję, która przyjmuje 3 liczby jako parametry i wyświetli największą z nich
8. Napisz funkcję, która przyjmuje 2 liczby jako parametry i wyświetla mniejszą z nich, (ale większą od zera). Jeśli żadna liczba nie jest dodatnie, to wyświetli 0
9. Napisz funkcję, która przyjmuje 3 liczby jako parametry i wyświetla mniejszą z nich, (ale większą od zera). Jeśli żadna liczba nie jest dodatnie, to wyświetli 0
10. Napisz makro, które dla zaznaczonych komórek policzy ich sumę i wyświetli ją w msgboxie
11. Napisz makro, które w kolumnie A w pierwszej wolnej komórce wyświetli podsumowanie wszystkich liczb znajdujących się powyżej
Rozwiązania
1. W komórce A1 znajduje się liczba. Wpisz w komórkach od A5 tyle liczb ile wynosi A1
Sub Zad1()
Dim Liczba As Long 'Deklaracja zmiennej liczba jako całkowita długa
Dim Komorka As Range ' Deklaracja zmiennej określającej pojedynczą komórkę obszaru
Liczba = Range("A1").Value 'Przypisanie zmiennej liczba wartości z komórki A1
For Each Komorka In Range("A5:A" amp;amp; 5 + Liczba - 1)
Komorka = Rnd 'Funkcja Rnd (funkcja wbudowana w VBA) zwraca losową liczbę z zakresu od 0 do 1
Next
End Sub
2. Napisz makro, które ustawi formatowanie liczbowe z 2 miejscami po przecinku w kolumnie A, formatowanie tekstowe w kolumnie B, a formatowanie daty w kolumnie C. I autodopasuje wszystkie kolumny
Sub Zad2()
Columns("A:A").NumberFormat = "0.00"
Columns("B:B").NumberFormat = "@"
Columns("C:C").NumberFormat = "m/d/yyyy"
Columns("A:C").EntireColumn.AutoFit
End Sub
3. Napisz makro, które wpisuje kolejnych 50 liczb po przekątnej (A1, B2, C3, D4, itd)
Sub Zad3()
Dim i As Long
For i = 1 To 50
Cells(i, i) = i
Next
End Sub
4. Napisz makro, zapyta się o liczbę i pokoloruje tyle komórek ile podał użytkownik
Sub Zad4()
Dim Liczba As Long
Liczba = InputBox("Podaj liczbę całkowitą", "Komunikat")
Range("A1:A" & Liczba).Interior.Color = rgbOrange
End Sub
5. Napisz makro, które pokoloruje liczby ujemne w zaznaczonych komórkach
Sub Zad5()
Dim Komorka As Range
For Each Komorka In Selection
If Komorka.Value < 0 Then
Komorka.Interior.Color = rgbRed
End If
Next
End Sub
6. Napisz funkcję, która na podstawie daty sprawdzi, czy to był "weekend" czy "dzień tygodnia"
Function CzyWeekend(Data As Date) As Boolean
If Weekday(Data, vbMonday) > 5 Then
CzyWeekend = True 'Weekend
Else
CzyWeekend = False 'Dzień roboczy
End If
End Function
lub lepiej:
Function CzyWeekend(Data As Date) As Boolean
CzyWeekend = Weekday(Data, vbMonday) > 5
End Function
7. Napisz funkcję, która przyjmuje 1 liczby jako parametry i wyświetli największą z nich
Function Najwieksza(Liczba1 As Variant, Liczba2 As Variant, Liczba3 As Variant) As Variant
If Liczba1 > Liczba2 And Liczba1 > Liczba3 Then
Najwieksza = Liczba1
ElseIf Liczba2 > Liczba3 Then
Najwieksza = Liczba2
Else
Najwieksza = Liczba3
End If
End Function
W VBA można korzystać z funkcji arkuszowych Excela. Przykładem funkcji arkuszowej jest znana funkcja Max (Maksimum). W VBA możemy z niej skorzystać za pomocą obiektu Application.WorksheetFunction, czyli po prostu wpisując w funkcji Application.WorksheetFunction a następnie wybierając funkcje Max.
Function Max(Liczba1 As Double, Liczba2 As Double, Liczba3 As Double) As Double
Max = Application.WorksheetFunction.Max(Liczba1, Liczba2, Liczba3)
End Function
8. Napisz funkcję, która przyjmuje 2 liczby jako parametry i wyświetla mniejszą z nich, (ale większą od zera). Jeśli żadna liczba nie jest dodatnie, to wyświetli 0
Function MniejszaDodatnia(Liczba1 As Double, Liczba2 As Double) As Double
If Liczba1 < 0 And Liczba2 < 0 Then
MniejszaDodatnia = 0
ElseIf Liczba1 < 0 And Liczba2 > 0 Then
MniejszaDodatnia = Liczba2
ElseIf Liczba1 > 0 And Liczba2 < 0 Then
MniejszaDodatnia = Liczba1
Elseif Liczba1 < Liczba2 Then
MniejszaDodatnia = Liczba1
Else
MniejszaDodatnia = Liczba2
End If
End Function
9. Napisz funkcję, która przyjmuje 3 liczby jako parametry i wyświetla mniejszą z nich, (ale większą od zera). Jeśli żadna liczba nie jest dodatnie, to wyświetli 0
10. Napisz makro, które dla zaznaczonych komórek policzy ich sumę i wyświetli ją w msgboxie
Sub Zad10a()
Dim Suma As Double
Dim Komorka As Range
For Each Komorka In Selection
Suma = Suma + Komorka.Value
Next
MsgBox ("SUMA=" & Suma)
End Sub
albo bez pętli:
Sub Zad10b()
msgbox(worksheetfunction.sum(activecell.resize(activecell.end(xlDown).row - activecell.row+1, 1).address & ")"
End Sub
11. Napisz makro, które w kolumnie A w pierwszej wolnej komórce wyświetli podsumowanie wszystkich liczb znajdujących się powyżej
Sub Zad11a()
Dim wiersz As Long
Dim Suma As Double
wiersz = 1
While ActiveCell.Cells(Wiersz, "A") <> ""
Wiersz = Wiersz + 1
Wend
ActiveCell.Cells(Wiersz, "A").Formula = "=SUM(" & ActiveCell.resize(wiersz, 1).Address(False, False) & ")"
End Sub
albo bez pętli:
Sub Zad11b() dim miejsce as range set miejsce = activecell.end(xlDown).offset(1, 0) miejsce.formula = "=sum(" & activecell.resize(miejsce.row - activecell.row, 1).address & ")" End Sub
Tworzymy również raporty w Power BI. Jeśli chcesz zobaczyć jak wygląda przykładowy raport w Power BI to możesz go pobrać tutaj: