====== 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.
* **Példa**: Egyszerű változó deklaráció
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:
* **Integer**: Egész számok
* **Long**: Nagyobb egész számok
* **Single**: Lebegőpontos számok (egyszeres pontossággal)
* **Double**: Lebegőpontos számok (kétszeres pontossággal)
* **String**: Szöveges típus
* **Boolean**: Logikai típus (Igaz vagy Hamis)
==== 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...Then...Else**
If szam > 10 Then
MsgBox "A szám nagyobb, mint 10."
Else
MsgBox "A szám 10 vagy annál kisebb."
End If
* **For Next Ciklus**
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!
* **Do While Loop**
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.
{{:tanszek:oktatas:muszaki_informatika:pasted:20240222-080952.png}}
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:
{{:tanszek:oktatas:muszaki_informatika:pasted:20240221-192107.png}}
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:
{{:tanszek:oktatas:muszaki_informatika:pasted:20240221-195608.png}}
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:
{{:tanszek:oktatas:muszaki_informatika:pasted:20240222-051514.png}}
---