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:


.