A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
Előző változat mindkét oldalon Előző változat Következő változat | Előző változat | ||
tanszek:oktatas:muszaki_informatika:vba_tutorial [2024/02/21 19:21] knehez |
tanszek:oktatas:muszaki_informatika:vba_tutorial [2024/02/22 10:21] (aktuális) knehez |
||
---|---|---|---|
Sor 1: | Sor 1: | ||
- | ==== Excel VBA alapok ==== | + | ====== 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ó | ||
+ | <code> | ||
+ | Dim szam As Integer | ||
+ | Dim szoveg As String | ||
+ | </code> | ||
+ | |||
+ | ==== 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** | ||
+ | <code> | ||
+ | If szam > 10 Then | ||
+ | MsgBox "A szám nagyobb, mint 10." | ||
+ | Else | ||
+ | MsgBox "A szám 10 vagy annál kisebb." | ||
+ | End If | ||
+ | </code> | ||
+ | |||
+ | * **For Next Ciklus** | ||
+ | <code> | ||
+ | For i = 1 To 5 | ||
+ | MsgBox "Szám: " & i | ||
+ | Next i | ||
+ | </code> | ||
+ | |||
+ | Itt fontos megjegyezni hogy a szövegeket //&// jellel adjuk össze, nem a plusz operátorral! | ||
+ | |||
+ | * **Do While Loop** | ||
+ | <code> | ||
+ | i = 1 | ||
+ | Do While i <= 5 | ||
+ | MsgBox "Szám: " & i | ||
+ | i = i + 1 | ||
+ | Loop | ||
+ | </code> | ||
+ | |||
+ | ==== Ö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. | Definiáljunk egy teszt függvényt ami visszaad egy konstans értéket. | ||
Sor 10: | Sor 74: | ||
használata: írjuk be egy cellába **=teszt()** | használata: írjuk be egy cellába **=teszt()** | ||
+ | |||
+ | ---- | ||
Adjunk össze két számot. | Adjunk össze két számot. | ||
Sor 19: | Sor 85: | ||
használata: **=Osszeadas(A1;B1)** | használata: **=Osszeadas(A1;B1)** | ||
+ | ---- | ||
+ | Írjunk egy függvényt, amely egy sztringet vesz bemenetként, és visszaadja annak fordított változatát. | ||
- | Ez a függvény egy tömb elemeinek átlagát számítja ki. | ||
<sxh vb> | <sxh vb> | ||
- | Function Atlag(ertekek() As Double) As Double | + | Function SzovegForditas(szoveg As String) As String |
- | Dim osszeg As Double | + | |
Dim i As Integer | Dim i As Integer | ||
+ | For i = Len(szoveg) To 1 Step -1 | ||
+ | SzovegForditas = SzovegForditas & Mid(szoveg, i, 1) | ||
+ | Next i | ||
+ | End Function | ||
+ | </sxh> | ||
+ | ---- | ||
+ | Ez a függvény egy tartomány elemeinek átlagát számítja ki. | ||
+ | |||
+ | <sxh vb> | ||
+ | Function TartomanyAtlag(tartomany As Range) As Double | ||
+ | Dim osszeg As Double | ||
+ | Dim db As Long | ||
| | ||
osszeg = 0 | osszeg = 0 | ||
- | For i = LBound(ertekek) To UBound(ertekek) | + | db = 0 |
- | osszeg = osszeg + ertekek(i) | + | |
- | Next i | + | |
| | ||
- | Atlag = osszeg / (UBound(ertekek) - LBound(ertekek) + 1) | + | For Each cella In tartomany |
- | End Function</sxh> | + | osszeg = osszeg + cella.Value |
+ | db = db + 1 | ||
+ | Next cella | ||
+ | |||
+ | TartomanyAtlag = osszeg / db | ||
+ | End Function | ||
+ | </sxh> | ||
Töltsük fel tetszőleges értékekkel a A1 és B2 téglalapba eső cellákat: | 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}} | {{:tanszek:oktatas:muszaki_informatika:pasted:20240221-192107.png}} | ||
- | Egy másik cellába írjukbe: **=ÁTLAG(A1:B2)** | + | 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. | ||
+ | |||
+ | <sxh vb> | ||
+ | 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 | ||
+ | </sxh> | ||
+ | |||
+ | 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: | ||
+ | |||
+ | <sxh vb> | ||
+ | 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 | ||
+ | </sxh> | ||
+ | |||
+ | Használata például ez lehet: | ||
+ | |||
+ | {{:tanszek:oktatas:muszaki_informatika:pasted:20240222-051514.png}} | ||
+ | |||
+ | --- | ||