Az Excel Makro-programozása

Slides:



Advertisements
Hasonló előadás
Szerver oldali programozás
Advertisements

Információs függvények
Microsoft Excel 3. óra Előadó: Jánosik Tamás.
Definíciók: Algoritmus: bármely véges sok lépéssel leírható tevékenység. Olyan pontos előírás, amely megmondja, hogy egy adott típushoz tartozó feladat.
Algoritmusok.
Visual Basic for Application (VBA)
Összefoglalás 1. Pascal program szerkezete 2. Pascal típusai
Felhasználó barátság eszközei
3. előadás (2005. március 1.) Utasítások, tömbök
Számítástechnika Levelezőknek
Cells(sor száma, oszlop száma)
Benczúr Zsolt VBA gyorstalpaló Benczúr Zsolt
Táblázat kezelő programok
Visual Basic for Application (VBA)
Programozás alapjai.
Programozás II. 3. Gyakorlat C++ alapok.
C A C nyelv utasításai.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Vizuális és web programozás II.
ISZAM III.évf. részére Bunkóczi László
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
Alapszint 2.  Készíts makrót, ami a kijelölt cellákat egybenyitja, a tartalmat vízszintesen és függőlegesen középre igazítja és 12 pontos betűméretűre.
Alprogramok deklarációja, definíciója és meghívása Páll Boglárka.
Ismétlés A pascal program szerkezete: program programnev; Programfej
Tömbök és programozási tételek
Fájlkezelés Pascalban
Ciklusok (iterációk).
Készítette: Csíki Gyula
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Készítette: Lipp Marcell
Turbo Pascal Indítás: C:\LANGS\Turbo Pascal Turbo Pascal.
Java programozási nyelv Vezérlési szerkezetek
Java programozási nyelv Metódusok
Algoritmusok.
Webprogramozó tanfolyam
Objektum orientált programozás
1 BME VEGYÉSZMÉRNÖKI ÉS BIOMÉRNÖKI KAR MESTERSZINTŰ MŰSZERES ANALITIKA KÉMIA SZAKIRÁNYÚ TOVÁBBKÉPZÉSI SZAK INFORMATIKA (SZÁMÍTÁSTECHNIKA) nov.19.
1 Mivel foglalkozunk a laborokon? 7. hét: Do-Loop-Until Do-Until-Looptömbök Function 7. hét: Do-Loop-Until és Do-Until-Loop ciklusok. Egy indexes tömbök,
A Visual Basic nyelvi elemei
1 Mivel foglalkoz(t)unk a laborokon? 1.hét: Word dokumentumok 1.hét: Word dokumentumok tagolása, tartalomjegyzék, ábrák számozása, hivatkozások, egyenlet-szerkesztő.
1 Mivel foglalkoz(t)unk a laborokon? 1.hét: Word dokumentumok 1.hét: Word dokumentumok tagolása, tartalomjegyzék, ábrák számozása, hivatkozások, egyenlet-szerkesztő.
Fontos tudnivalók A MATLAB egy fajta objektummal dolgozik (Mátrix)
Barna Róbert KE GTK Informatika Tanszék Pénzügyi feladatok VBA támogatása 7. előadás.
Török Katalin és Marosi Nóra 11/c. Pascal: Az es években megjelent magas szintű programozási nyelv, közel áll az emberi gondolkodáshoz. Nevét.
1 Mivel foglalkozunk a laborokon? 7. hét: Do-Loop-Until Do-Until-Looptömbök Function 7. hét: Do-Loop-Until és Do-Until-Loop ciklusok. Egy indexes tömbök,
1 Mivel foglalkoz(t)unk a laborokon? 1.Labor: Word alapok: 1.Labor: Word alapok: dokumentum tagolása, tartalomjegyzék, ábrák számozása, hivatkozások 2.
A 2. géptermi beszámoló VBA anyagának összefoglalása
1 Mivel foglalkoz(t)unk a laborokon? 1.Labor: Word alapok Excel alapok: Excel alapok: Cellahivatkozás, munkalapfüggvény, diagram varázsló, trendvonal 2.
Makrók alkalmazása VBA felületen
Excel programozás (makró)
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 3. gyakorlat.
C++2. Ciklusok elöltesztelő (for, while) A ciklusmag feldolgozása előtt történik a vizsgálat  lehet, hogy egyszer sem fut le. A soronkövetkező iteráció.
Fájlkezelés Programozási tételek
1 Függvények használata – az első függvénynél a formulát háromszor be kell írni, rendre az x, x+h, x-h argumentumokkal, – a második függvénynél az új (feltételes.
Az 5,6,7 laborok VBA anyagának összefoglalása
1 BME VBK KROMATOGRÁFIÁS SZAKANALITIKUS KÉPZÉS INFORMATIKA (SZÁMÍTÁSTECHNIKA) dec. 2. Access „elmaradás” - a Beszall_forg lekédezés elkészítése:
1 Mivel foglalkoz(t)unk a laborokon? 1.Labor: Word alapok Excel alapok: Excel alapok: Cellahivatkozás, munkalapfüggvény, diagram varázsló, trendvonal 2.
1 ANALITIKAI KÉMIAI SZAKMÉRNÖKI TANFOLYAM INFORMATIKA (SZÁMÍTÁSTECHNIKA) 2007/2008. őszi félév Tanárok: Kollárné Dr. Hunek Klára,
BME VEGYÉSZMÉRNÖKI ÉS BIOMÉRNÖKI KAR
Előadó: Édes Péter Az Excel programozása Előadó: Édes Péter
Gépészeti informatika (BMEGEMIBXGI)
Excel programozás (makró)
Algoritmizálás.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
12. hét, nov. 24: 2. géptermi beszámoló
A CLIPS keretrendszer
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
ITERÁCIÓ.
Informatikai gyakorlatok 11. évfolyam
Előadás másolata:

Az Excel Makro-programozása

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.

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

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ő)

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

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

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

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ó]

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

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

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

Ü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

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])

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])

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.

Makro rögzítése

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.

Visual Basic editor kezelőfelülete

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

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

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

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

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

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

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

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)” // 10-20 közötti számokkal tölti fel a D oszlop első 7 sorát

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

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!

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

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

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

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)"

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

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

Ü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

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

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

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

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

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

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