Tartalomjegyzék

Excel VBA alapjai

Az Excel VBA (Visual Basic for Applications) egy eseményvezérelt programozási nyelv, amely lehetővé teszi az Excel alkalmazások automatizálását és testreszabását. Ebben a részben az Excel VBA alapvető nyelvi elemeit mutatjuk be, beleértve a változók deklarálását, az alapvető típusokat és a vezérlési elemeket.

Változók Deklarálása

A VBA-ban a változók deklarálása a Dim kulcsszóval történik. A változó típusát is megadhatjuk a deklaráció során, ami segít a kód olvashatóságában és a típushibák elkerülésében.

Dim szam As Integer
Dim szoveg As String

Alapvető Típusok

A VBA számos alapvető adattípust támogat, többek között:

Vezérlési Elemek

A VBA vezérlési szerkezetei lehetővé teszik a program ágának irányítását a különböző feltételek alapján.

If szam > 10 Then
    MsgBox "A szám nagyobb, mint 10."
Else
    MsgBox "A szám 10 vagy annál kisebb."
End If
For i = 1 To 5
    MsgBox "Szám: " & i
Next i

Itt fontos megjegyezni hogy a szövegeket & jellel adjuk össze, nem a plusz operátorral!

i = 1
Do While i <= 5
    MsgBox "Szám: " & i
    i = i + 1
Loop

Összefoglalás

Ez a fejezet bevezetést nyújtott az Excel VBA alapjaihoz, beleértve a változók deklarálását, az alapvető típusokat és a vezérlési elemeket. A bemutatott kódpéldákkal könnyebbé válik az alapvető programozási koncepciók megértése és alkalmazása.

Makrók engedélyezése

A Fájl/Beállítások/Adatvédelmi központ-nál állítsuk be a makrók engedélyezését és utána zárjuk be a munkafüzetet és indítsuk újra.

Definiáljunk egy teszt függvényt ami visszaad egy konstans értéket.

Function teszt()
   teszt = 1
End Function

használata: írjuk be egy cellába =teszt()


Adjunk össze két számot.

Function Osszeadas(szam1 As Double, szam2 As Double) As Double
    Osszeadas = szam1 + szam2
End Function

használata: =Osszeadas(A1;B1)


Írjunk egy függvényt, amely egy sztringet vesz bemenetként, és visszaadja annak fordított változatát.

Function SzovegForditas(szoveg As String) As String
    Dim i As Integer
    For i = Len(szoveg) To 1 Step -1
        SzovegForditas = SzovegForditas & Mid(szoveg, i, 1)
    Next i
End Function


Ez a függvény egy tartomány elemeinek átlagát számítja ki.

Function TartomanyAtlag(tartomany As Range) As Double
    Dim osszeg As Double
    Dim db As Long
    
    osszeg = 0
    db = 0
    
    For Each cella In tartomany
        osszeg = osszeg + cella.Value
        db = db + 1
    Next cella
    
    TartomanyAtlag = osszeg / db
End Function

Töltsük fel tetszőleges értékekkel a A1 és B2 téglalapba eső cellákat:

Egy másik cellába írjukbe: =TartomanyAtlag(A1:B2)

Viszont, ha az értékek között van olyan ami nem szám, akkor nem működik, ezért alakítsuk át, hogy kezelje a kivételeket is.

Function TartomanyAtlag(tartomany As Range) As Double
    Dim cella As Range
    Dim osszeg As Double
    Dim db As Long
    
    osszeg = 0
    db = 0
    
    For Each cella In tartomany
        If IsNumeric(cella.Value) Then
            osszeg = osszeg + cella.Value
            db = db + 1
        End If
    Next cella
    
    If db > 0 Then
        TartomanyAtlag = osszeg / db
    Else
        TartomanyAtlag = 0
    End If
End Function

Töltsük fel tetszőleges értékekkel a A1 és B2 téglalapba eső cellákat, de az egyiket akarattal elrontjuk:

Egy másik cellába írjukbe: =TartomanyAtlag(A1:B2)


Szorozzunk össze egy mátrix-ot egy vektorral:

Function MatrixVektorSzorzas(matrix As Range, vektor As Range) As Variant
    Dim sorok As Long, oszlopok As Long, i As Long, j As Long
    Dim eredmeny() As Double
     
    sorok = matrix.Rows.Count
    oszlopok = matrix.Columns.Count
     
    ' Ellenőrizzük, hogy a vektor mérete megfelel-e a mátrix oszlopainak számával
    If vektor.Rows.Count <> oszlopok Or vektor.Columns.Count > 1 Then
        MatrixVektorSzorzas = CVErr(xlErrValue)
        Exit Function
    End If
     
    ' oszlopvektor legyen az eredmény
    ReDim eredmeny(1 To sorok, 1 To 1) As Double
     
    For i = 1 To sorok
        For j = 1 To oszlopok
            eredmeny(i, 1) = eredmeny(i, 1) + matrix.Cells(i, j).Value * vektor.Cells(j, 1).Value
        Next j
    Next i
     
    MatrixVektorSzorzas = eredmeny
End Function

Használata például ez lehet: