4. Lecke – Változók, műveletek

VBA változók és műveletek

I. Változók

Mit is jelent a változó?
Egy ember esetében a születési dátuma egy konsans szám, azaz nem fog változni az évek során soha. Viszont az életkora már változik, így az egy változó, ami mellesleg szám típusú. Lakcíme is változó, mert bármikor elköltözhet, viszont az már egy szöveg típusú változó. Ha pedig azt kérdezzük, hogy “Magyar állampolgár?”, akkor arra igen vagy nem a válasz, azaz egy logikai változó (igaz vagy hamis).

– Plusz infó –
A számítógép-tudományban és a matematikában a változó egy mennyiség vagy egy objektum szimbolikus jelölése. A matematikában a változó gyakran egy ismeretlen mennyiséget jelent, míg a számítógép-tudományban azt a helyet értjük alatta, ahol egy mennyiséget tárolhatunk. A változókat gyakran a konstansokkal ellentétes értelemben használjuk, amik értéke ismert, és az nem változik.

Forrás: Wikipédia

Excelben való programozásunk során gyakran fogunk változókat használni. Gondoljunk csak bele, ha például egy táblázat sorain akarunk végigmenni, akkor az éppen aktuális sornak a száma is egy változó lesz, hiszen mindig nő eggyel, ahogy haladunk előre.

Ahhoz, hogy változókkal dolgozzunk, már a programunk elején szükséges definiálni azokat. Meg kell határoznunk, hogy mi legyen a változó neve és mi legyen a típusa.

A leggyakoribb változó típusok az alábbiak, mellettük a VBA-ban használandó nevük.
Szám – Integer vagy Long vagy Double (Hogy mi a különbség, arról később.)
Szöveg – String
Logikai (igaz, hamis) – Boolean

Egy bonyolultabb program sok memóriát ehet. Ha nagy számokkal dolgozunk, akkor nyilván lassabban fogja végrehajtani a műveleteket a makrónk. Éppen ezért, a szám változóknál van lehetőségünk előre megtervezni, hogy kisebb vagy nagyobb számokkal fogunk dolgozni.
Ha -32,768 és 32,767 között mozog a számunk, pl. egy életkor, akkor ajánlott az Integer típus használata, de ha nagyobb, -9,223,372,036,854,775,808 és 9,223,372,036,854,775,807 között lehet a változó értéke, akkor a Long-ot kell használni. Így az Integer kevesebb bitet fogyaszt, míg a Long többet.

Tovább bonyolítja a szám típusú változók helyzetét, hogy a Long és az Integer egész számokra vonatkoznak, így ha törttel akarunk számolni, akkor érdemes a Double-t alkalmazni.

A változók defináláskor a képlet a következő:

Dim eletkor as Integer
Dim lakhely as String
Dim tablazat_utolso_sora as Long
Dim hirlevelre_feliratkozott as Boolean

Azaz egy “Dim“-mel kezdünk (Declare in Memory rövidítése), utána jön a változó általunk meghatározott neve, majd azt követi egy “as“, végül pedig a típusa a változónak. Magyarunk meghatározunk egy változó nevet valamilyen változó típusként. Ezzel a névvel tudunk majd a későbbiekben dolgozni.

Példa 1:
Létrehozunk egy “szam” nevű szám típusú változót; meghatározzuk, hogy az értéke legyen 100; majd a “szam” nevű változót kiíratjuk egy párbeszédablakban.

Dim szam As Integer
szam = 100
MsgBox szam

Példa 2:
Létrehozunk 3 új változót: vezetéknév, keresztnév, teljes név. A vezetéknévnek és a keresztnévnek adunk egy szöveges értéket. a Teljes név értéke pedig a vezetéknév és a keresztnév változó összefűzése lesz.

Dim vezetek_neve As String
Dim kereszt_neve As String
Dim teljes_nev As String
vezetek_neve = "Kovács"
kereszt_neve = "János"
teljes_nev = vezetek_neve & " " & kereszt_neve
Msgbox teljes_nev

Két különböző szöveget az “&” karakterrel tudunk összefűzni, ami két idézőjel közti szöveget fűzi össze. A fenti példában a változók tárolják az idézőjeles szöveget, a két alábbi kifejezés így teljesen megegyezik egymással:

teljes_nev = “Kovács” & ” ” & “János”
teljes_nev = vezetek_neve & ” ” & kereszt_neve

Ha csak ennyit írnánk: teljes_nev = “Kovács” & “János” , akkor a vezeték nevet és a keresztnevet szóköz nélkül, egybe fűzné. Éppen ezért a vezeték és a keresztnév közé fűztünk még egy szóközt is:
& ” ” &

Videón:

II. Matematikai műveletek

Jó hír, hogy a VBA-ban a matematikai műveletek teljesen maguktól értetődőek. Amiket mi használni fogunk:

Összeadás: +
Kivonás: –
Szorzás: *
Osztás /
Hatványozás: ^
Zárójel: ()

Amit már korábban is használtuk, egyenlőség jellel “=” tudunk valamihez értéket rendelni. Mindig előbb jön az, aminek értéket szeretnénk adni, majd az “=” jel után pedig az érték.

Példa 1:

Dim konverzio1 as Integer
Dim konverzió2 as Integer
Dim osszes_konverzio as Integer

Osszes_konverzio = konverzio1 + konverzio2

Példa 2:
Tegyük fel, hogy a következő táblázatban szeretnénk kiszámolni egy hirdetés átkattintási arányát, azaz a CTR-t (Click-through rate).

CTR kiszámolása VBA-ban

A képlet a következő:

CTR = (Clicks / Impressions) *100

Számoljuk ki először csak a második sor CTR-jét.

Sub Makró1()

'Definiáljuk a változóinkat:
Dim Impressions As Integer
Dim Clicks As Integer
Dim CTR As Double

'A változókhoz rendeljük a cellák értékeit:
Impressions = Range("B2").Value
Clicks = Range("C2").Value

'Számolás
CTR = (Clicks / Impressions) * 100

'Kiírjuk a megfelelő cellába az eredményt:
Range("D2").Value = CTR

End Sub

A fenti kódban a zölddel írt ” ‘ ” jel után írt szöveg a komment. Minden szöveg, képlet, kód sor, ami előtt egy ‘ karakter van, azt figyelmen kívül fogja hagyni a program. Ez segíteni fog nekünk a jövőben, hogy átlássuk a kódjainkat.

Gyakorlati feladat

Az utolsó feladatból fogunk kiindulni.

1. A G1 cella környékére tegyünk egy gombot, ami lefuttatja a programunkat.
2. Az F1 cellába, ha beírunk egy számot akkor arra a sorra fogja nézni a programunk a feladatot. Tehát, ha az F1 cella értéke 3, akkor a 3. Sor értékeivel számolja ki a CTR-t és a D3 cellába írja a végeredményt.

Segítség 1. – Kell egy új változó, ami a számunkra szükséges sor számát tartalmazza.
Segítség2. – Range helyett Cells-t fogunk itt alkalmazni.

Megoldás a videón, magyarázó szöveggel:

A teljes kód:

Sub Makró1()

   'Definiáljuk a változóinkat:
   Dim Impressions As Integer
   Dim Clicks As Integer
   Dim CTR As Double

   sor As Integer

   'Megadjuk az éppen aktuális sort
   sor = Range("F1").Value

   'A változókhoz rendeljük a cellák értékeit:
   Impressions = Cells(sor, 2).Value
   Clicks = Cells(sor, 3).Value

   'Számolás
   CTR = (Clicks / Impressions) * 100

   'Kiírjuk a megfelelő cellába az eredményt:
   Cells(sor, 4).Value = CTR

End Sub

Összefoglalás

– Megnéztünk pár fontos változót, megtanultuk definiálni azokat
– Megnéztük a legfontosabb matematikai műveleteket
– Megtanultuk, hogy két szöveget az “&” karakterrel tudunk összefűzni
– Megtanultuk, hogy a VBA kódunkba “ ‘ “ karakterrel tudunk kommentelni

Mennyire találtad hasznosnak ezt cikket?
[Összes szavazat: 4 Átlag értékelés: 5]