Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Az Excel Makro-programozása

Hasonló előadás


Az előadások a következő témára: "Az Excel Makro-programozása"— Előadás másolata:

1 Az Excel Makro-programozása

2 Változók Változók deklarációja (csak Option Explicit esetén)
{Dim|Public|Private|Protected|Static} vá1tozó1 <adattípus>, változó2 As <adattípus> A VBA-ban kétféle érvényességi (láthatósági) kört különböztethetünk meg: eljárásszintű modulszintű Eljárásszintű láthatóság esetében a változót kívülről nem érhetjük el, annak a metódusnak a sajátja, amelyben deklarálva van. A deklarációs kulcsszó a Dim vagy Static. A két deklaráció között a különbség a memóriahasználatnál van, míg Static kúlcsszóval deklarált változó az alprogram lefutása után a változó értéke a memóriában marad, míg a Dim kulcsszóval deklarált változó értéke megszűnik. Modulszintű érvényességi kör esetében private és protected és public érvényességi szintű változókat deklarálhatunk. Private esetben a változó csak az őt tartalmazó modulból érhető el, public esetben pedig bárhonnan. A Protected-nek csak öröklődés esetén van szerepe. Fontos megjegyezni, hogy a típusok deklarálása sem eljárások sem függvények esetében nem kötelező, az első értékadás határozza meg a változók típusát.

3 Változó típusok Integer egész szám Single lebegőpontos szám
Double        duplapontosságú lebegőpontos szám String       karaktersorozat Boolean       logikai (true, false) Date        dátum Variant        szöveg, szám vagy dátum (automatikus típus) Object        objektum

4 Vezérlési szerkezetek a programokban
Szekvencia – egymás utáni lépések végrehajtása Szelekció – elágazás (egyágú, kétágú, háromágú többágú) Iteráció – ciklus (előírt lépésszámú, feltételes elöl vagy hátultesztelő)

5 Egy – két és háromágú elágazás
If 1. feltétel Then                 1. utasítások        (ha a 1. feltétel igaz) [ElseIf 2. feltétel                 2. utasítások]        (amennyiben a 2. feltétel igaz) [Else                 3. utasítások]         (minden egyéb esetben) End If

6 Többágú elágazás – értéktől függő
Select Case <kifejezés>         [Case <1. kifejezés>                 <1. utasítások>] [Case <2. kifejezés>                 <2. utasítások>]         … [Case Else                 <különben utasítások>] End Select

7 Feltételes operátorok
Feltételek összeállításához használható operátorok:         relációs operátorok:  < ; > ; <= ; >= ; = ; <>         logikai operátorok: And ; Or ; Not ; Xor

8 Előírt lépésszámú ciklus - For
For ciklusváltozó =ettől To eddig [Step +/-lépésköz] [utasítások] Next [ciklusváltozó]

9 Előírt lépésszámú ciklus – For Each
For Each valtozo In Collection [utasítások] Next valtozo

10 Feltételes ciklus - elöltesztelő
Amennyiben nem tudjuk előre megmondani, hogy hányszor kell lefuttatnunk az utasítássorozatot, akkor a feltételes ciklusok valamelyikét kell használnunk. Egy feltételes ciklus lehet elöl- illetve hátultesztelő. Elöltesztelő ciklusnál a feltétel kiértékelése a ciklus elején a Do While kulcsszavak után történik. Elöltesztelő ciklus esetben a feltétel teljesülése esetén futnak le a ciklusmagban szereplő utasítások. Do While feltétel                 [utasítások] Loop

11 Feltételes ciklus - hátultesztelő
Hátultesztelő ciklusnál a feltétel kiértékelése a ciklus végén a Loop Until kulcsszavak után történik. Mindaddig történik az ismétlés, amíg a feltétel hamis. A hátultesztelő ciklus esetében a ciklusmagban lévő utasítások legalább egyszer biztosan lefutnak. Do                  [utasítások] Loop Until feltétel

12 Üzenet ablakok A program futása során a felhasználóval történő kapcsolattartás legpraktikusabb módja az üzenőablakok használata. Adatbekérésre az InputBox függvényt, míg üzenetek, válaszok küldésére a MsgBox függvényt használhatjuk. Az InputBox szintaxisa: változó = InputBox("szöveg","címke") A MsgBox szintaxisa: MsgBox („üzenet”) vagy MsgBox „üzenet” változó = MsgBox ("üzenet", paneltípus) vbOKOnly - OK gomb; vbOKCancel - Ok és Mégse gombok; vbAbortRetryIgnore - Leállítás, Ismét és Kihagyás gombok; vbYesNoCancel - Igen, Nem és Mégse gombok; vbYesNo - Igen és Nem gombok

13 Eljárások Mivel a VBA egy objektumorientált nyelv, utasításainkat eljárásokba és függvényekbe szervezhetjük. Minden egyes eljárást a Sub utasítással kell kezdenünk, majd a makró nevét kell megadnunk és végül zárójelek között a futáshoz szükséges paraméterlistát. Az eljárásokat az End Sub utasítással zárjuk. Sub <eljárásnév>([paraméterlista]) [<deklarációk>] <utasítások> End Sub Eljárás hívása: [Call] <eljárásnév> ([aktuális paraméterlista])

14 Függvények Minden egyes függvényt a Function utasítással kell kezdenünk, majd a függvény nevét kell megadnunk végül zárójelek között a futáshoz szükséges paraméterlistát. A függvényeket az End Function utasítással zárjuk. Minden függvénynek kötelezően tartalmaznia kell legalább egy olyan értékadó utasítást, amelynek bal oldalán a függvény neve szerepel. Function <függvénynév>([paraméterlista]) [<deklarációk>] <utasítások> függvénynév = (legalább egy értékadó utasítás) End Function Függvény hívása: <függvénynév> ([aktuális paraméterlista])

15 Megjegyzések Megjegyzéseket a program kódjába a sor elején vagy akár sorban elhelyezett aposztróffal (’) tehetünk. A Visual Basic zöld színnel jelöli a megjegyzéseket. Célszerű minél több, és minél részletesebb megjegyzést elhelyezni a programkódban, hiszen ezzel egyrészt áttekinthetőbbé tehetjük, másrészt megkönnyíthetjük a kód későbbi esetleges újraértelmezését.

16 Makro rögzítése

17 Makro szerkesztő ablak
Amennyiben a Szerkesztés gombra kattintunk a Visual Basic szerkesztőben megjelenik a makrónk VBA kódja. Váltás szerkesztőnézetbe (Visual Basic Editor-ba) az Alt + F11 billentyűkombinációval is történhet.

18 Visual Basic editor kezelőfelülete

19 Munkafüzetek kezelése
Munkafüzet megnyitása: Workbooks.Open (file) Munkafüzet nevének megadása felhasználóbarát módszerrel: file = Application.GetOpenFilename() Üzenetablak kezelése: If file = "False" Then MsgBox ("Nem választott vagy adott meg fájlnevet!") /A szöveg zárójel nélkül is megadható Else End If

20 Munkafüzetek kezelése
Munkafüzet bezárása: Workbooks(2).Close (a zárójelben a munkalap indexe, hányadik munkafüzet a megnyitottak közül) Aktív munkafüzet bezárása: ActiveWorkbook.Close

21 Munkalapok kezelése Munkalapok számának kiírása:
MsgBox "A munkalapok száma=" & Worksheets.Count Új munkalap hozzáadása: ActiveWorkbook.Sheets.Add Before :=Worksheets(Worksheets.Count) – utolsó munkalap elé ActiveWorkbook.Sheets.Add After :=Worksheets(Worksheets.Count) – utolsó munkalap után ActiveWorkbook.Sheets.Add Count :=5 - öt új munkalapot szúr be Munkalap törlése: Worksheets(index).Delete Munkalap átnevezése: Activesheet.Name

22 Többágú elágazások kezelése
Select Case valasz Case 1: ActiveWorkbook.Sheets.Add Before:=Worksheets(Worksheets.Count) Case 2: ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count) Case 3: darab = InputBox("Hány új munalapot adjak hozzá?", "Hozzáaad", "5") ActiveWorkbook.Sheets.Add Count:=Val(darab) Case Else: MsgBox "1-3 közötti számot adjon meg!" End Select

23 Munkafüzetben lévő munkalapok kiírása
For Each munkafuzet In Workbooks szoveg = szoveg & "Munkafüzet: " & munkafuzet.Name & vbNewLine & "Munkalapok: " & vbNewLine For Each lap In munkafuzet.Worksheets szoveg = szoveg & lap.Name & vbNewLine Next lap Next munkafuzet MsgBox szoveg

24 Képernyő villogás ideiglenes kikapcsolása kiírás idejére
Application.ScreenUpdating = False //Kiíráskor ne villogjon a képernyő Application.ScreenUpdating = True //Visszakapcsolás

25 Könyvtár- és fájlkezelés
Könyvtár megadása: konyvtar = "C:\Users\varal\Documents\„ Fájl megadása: Fajlnev = Dir(konyvtar & "*.xl*") Munkafüzet megnyitása az adott könyvtárban: Workbooks.Open (konyvtar & Fajlnev) Ciklusban végigjárható a könyvtár és megkeresi az Excel fájlokat: For Each Munkalap In Workbooks(Fajlnev).Worksheets Cells(i, j).Value = Munkalap.Name j = j + 1 Next Munkalap

26 Tartomány és cellaműveletek
For i = 1 To 25 Cells(i, 1).Value = i // az aktuális ciklusváltozó értékével tölti fel az 1.oszlopot Range("B1:B25").Value = i //25-tel tölti fel a végén a B oszlopot Range("C1:C25").Value = "=RandBetween(1, 25)” // véletlen számokkal tölti fel a C oszlopot Next i Range(Cells(1, 4), Cells(7, 4)).Value = "=RandBetween(10, 20)” // közötti számokkal tölti fel a D oszlop első 7 sorát

27 Tartomány és cellaműveletek
Range("Árak").Value = "=RandBetween(100, 250)" //Előtte E1:E10 tartományt elnevezni "Áraknak„ Set minta = Range("F1:H6") 'Tartomány deklaráció minta.Value = 14 minta.Select 'Tartomány kijelölése

28 Sor illetve oszlop kijelölés
Set probasor = Range("A1:C25") probasor.Rows(Val(sor)).Select //Tartományon sor kijelölés, ha nincs ott a probasor, akkor az egész sort kijelöli! Set probaoszlop = Range("A1:C25") probaoszlop.Columns(Val(oszlop)).Select //Tartományon oszlop kijelölés, ha nincs ott a probaoszlop, akkor az egész sort kijelöli!

29 Tartomány másolása Range("A1:A2").Select Selection.Copy Range("G15").Select ActiveSheet.Paste Range("G17:G18").Value = Range("A1:A2").Value 'Ugyanez egy sorban

30 Kijelölt tartomány celláinak megszámlálása
Set tartomany = Range("A1:C25") Range("A1:C25").Select MsgBox ("A tartomány celláinak száma=" & tartomany.Count) MsgBox ("Sorok száma a tartományban=" & tartomany.Rows.Count) //Sorok száma MsgBox ("Oszlopok száma a tartományban=" & tartomany.Columns.Count) //Oszlopok száma

31 Tartomány törlése valasz = MsgBox("Valóban törölni akasr minden elemet?", vbOKCancel + vbQuestion + vbDefaultButton2, "Kérdés") If valasz = vbOK Then Range("A1:C25").ClearContents

32 Számolás és cellába írás
Range("D26").Value = "Összeg" Range("D27").Value = "Átlag" Range("D28").Value = "Darab" Range("D29").Value = "Minimum" Range("D30").Value = "Maximum" Range("A26").Value = "=SUM(A1:A25)" Range("A27").Value = "=AVERAGE(A1:A25)" Range("A28").Value = "=COUNT(A1:A25)" Range("A29").Value = "=MIN(A1:A25)" Range("A30").Value = "=MAX(A1:A25)"

33 Keretezés és színezés Range("F1:H6").Interior.Color = vbGreen Range("F1:H6").Borders.Weight = xlThick Range("F1:H6").Borders.LineStyle = xlSolid //xlDash vagy xlDot is lehet, ha nincs semmi, akkor xlNone

34 Színes betűs cellák összege
osszeg = 0 For i = 1 To 12 If Cells(i, 15).Font.Color = vbRed Then osszeg = osszeg + Cells(i, 15).Value End If Next i MsgBox "Az O-oszlop piros számainak összege = " & osszeg

35 Üres cellák törlése nem folytonos oszlopból
szamlalo = 0 For i = 1 To 24 If Cells(i, 16).Value <> "" Then Cells(szamlalo + 1, 17).Value = Cells(i, 16).Value szamlalo = szamlalo + 1 End If Next i

36 Tartomány sorbarendezése
Set Rng = Range("S1").CurrentRegion For i = 1 To Rng.Count For j = i + 1 To Rng.Count If Rng.Cells(j) < Rng.Cells(i) Then temp = Rng.Cells(i) Rng.Cells(i) = Rng.Cells(j) Rng.Cells(j) = temp End If Next j Next i

37 Ismétlődések megkeresése oszlopban és eltávolításuk
Cells(1, 22).Value = Cells(1, 21).Value egyediszam = 1 hozzaad = True For i = 2 To 10 For j = 1 To egyediszam If Cells(i, 21).Value = Cells(j, 22).Value Then hozzaad = False End If Next j If hozzaad = True Then Cells(egyediszam + 1, 22).Value = Cells(i, 21).Value egyediszam = egyediszam + 1 Next i

38 Lépésközök For ciklusban (STEP)
For i = 1 To 16 Step 2 Cells(i, 25).Value = 100 Next i For j = 25 To 13 Step -2 Cells(20, j).Value = 50 Next j

39 Hibakezelés Set Rng = Selection For Each cell In Rng On Error Resume Next cell.Value = Sqr(cell.Value) Next cell

40 Adatok fájlba írása fajlnev = Application.DefaultFilePath & "\adatok.txt" Set tartomany = Selection Open fajlnev For Output As #1 For i = 1 To tartomany.Rows.Count For j = 1 To tartomany.Columns.Count cellaertek = tartomany.Cells(i, j).Value If j = tartomany.Columns.Count Then Write #1, cellaertek Else Write #1, cellaertek, End If Next j Next i Close #1

41 Adatok fájlból olvasása
i = 35 fajlnev = Application.GetOpenFilename() Open fajlnev For Input As #1 Do While Not EOF(1) //Fájl vége jelig olvasunk, mert nem tudjuk hány adat van benne Line Input #1, sor pozicio = InStr(sor, ",") elso = Left(sor, pozicio - 1) //Vesszőt, mai az elválasztó megkeressük és annál elvágjuk az adatokat egymástól masodik = Right(sor, Len(sor) - pozicio) Cells(i, 1).Value = Val(elso) Cells(i, 2).Value = Val(masodik) i = i + 1 Loop Close #1


Letölteni ppt "Az Excel Makro-programozása"

Hasonló előadás


Google Hirdetések