Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 3 - Makra pro práci s konkrétní buňkou, řádkem či sloupcem

Minulá lekce, Klasické Hello a úvod do OOP pro makra, nás seznámila s pojmem objekt, vlastnost objektu a metoda objektu. V dnešní lekci se podíváme zejména na to, jak říci, že chceme pracovat s konkrétní buňkou, řádkem či sloupcem (v aktuálním listu). Vyzkoušíme a vysvětlíme si Offset, který popisuje buňku či oblast posunutou vůči jiné buňce či oblasti buněk.

Níže uvedené objekty jsou stejného typu, lze tedy předpokládat, že mají k dispozici stejné vlastnosti a metody.

Objekt ActiveCell - aktivní buňka

Zadání: Zapište do aktivní buňky hodnotu 100.

U ActiveCell budeme měnit hodnotu Value, tedy ji přiřadíme pomocí =. Hodnotu lze vnímat jako číslo 100, nebo jako řetězec "100". V tomto případě je to jedno, tedy se nabízí dvě správná řešení.

Sub zmen_aktivni()
    ' ActiveCell.Value = "100"  hodnota 100 je vnímána jako řetězec
    ActiveCell.Value = 100      'hodnota 100 je vnímána jako číslo
End Sub

Zadání: V dialogovém okně zobrazte adresu aktivní buňky.

Vlastnost Address obsahuje absolutní adresu buňky, vlastnost Row obsahuje číslo řádku a vlastnost Column obsahuje číslo sloupce. Jelikož je před vlastnostmi objekt ActiveCell, vztahují se k němu:

Sub adresa_aktivni()
    MsgBox "Absolutní adresa je " & ActiveCell.Address
    MsgBox "Řádek: " & ActiveCell.Row & " Sloupec: " & ActiveCell.Column
End Sub

Zadání: Zapište do aktivní buňky své křestní jméno a do následující (předchozí) buňky své příjmení.

Zápis křestního jména provedeme příkazem ActiveCell.Value = "Jméno", pro zápis příjmení se musíme dostat do následující (předchozí) buňky.

Protože se chceme v listu posunout o určitý počet buněk od aktivní buňky, použijeme Offset(RowOffset, ColumnOffset). Offset má dva parametry, jejichž hodnota musí být celé číslo. První parametr určuje o kolik řádků a kam je posunuta cílová buňka (0 neposunuje se, kladné číslo směrem dolů, záporné číslo směrem nahoru). Druhý parametr určuje o kolik sloupců a kam je posunuta cílová buňka (0 neposunuje se, kladné číslo směrem vpravo, záporné číslo směrem vlevo).

Tedy od aktivní buňky ActiveCell se posuňme do následující buňky Offset(0, 1) a tam nás zajímá vlastnost Value. Použijeme tečkovou notaci. Protože chceme hodnotu měnit, přiřadíme pomocí = novou hodnotu, v tomto případě "Příjmení".

Sub jmeno_prijmeni_aktivni()
    ActiveCell.Value = "Jméno"
    ActiveCell.Offset(0, 1).Value = "Příjmení"
End Sub

Při zápisu do předchozí buňky místo Offset(0, 1) bude Offset(0, -1) a zbytek kódu zůstává. Pokud bychom chtěli příjmení napsat do buňky pod, použijeme Offset(1, 0), do buňky nad Offset(-1, 0).

Offset v makrech v Microsoft Office Excel - Makra v Microsoft Office

Objekt Cells - buňka

Pro určení jedné konkrétní buňky lze použít Cells(Row, Column). První parametr určuje číslo řádku buňky a druhý číslo sloupce. Tedy například buňka A2 je Cells(2, 1), buňka B5 je Cells(5, 2), buňka C1 je Cells(1, 3).

Zadání: Naprogramujte všechna zadání, která jste řešili pro aktivní buňku, tentokrát pro buňku B5.

Řešení je opět velmi jednoduché. Původně jsme pracovali s aktivní buňkou ActiveCell, teď chceme pracovat s buňkou B5 Cells(5, 2). ActiveCell nahradíme Cells(5, 2) a zbytek zůstane stejný.

Správně se dalo předpokládat, že vlastnosti a metody pro buňku, ať už je to buňka aktivní nebo buňka s konkrétní adresou, budou stejné. Zrovna tak i u oblastí se dá s těmito vlastnostmi a metodami počítat.

Objekt Rows – řádek

Tento objekt lze využít pro určení jednoho řádku. Číslo řádku uvádíme v parametru.

Zadání: Změňte barvu pozadí celého prvního řádku.

Budeme pracovat s prvním řádkem, tedy Rows(1). Zajímá nás výplň Interior a barva, což je vlastnost Color. Základní barvy lze zapsat přes vbBarva, jak je uvedeno v komentáři. Krom bílé vbWhite jsou to základní barvy v tiskárně s barevným modelem CMYK (vbMagenta, vbCyan, vbYellow, vbBlack) a základní barvy monitoru s barevným modelem RGB (vbRed, vbGreen, vbBlue).

Já mám raději zápis využívající přímo barevný model RGB, kde se barva skládá ze tří složek. První určuje množství červené (Red), druhá zelené (Green) a třetí modré (Blue). Hodnota je celé číslo od 0 do 255 včetně.

Sub format_radek()
    Rows(1).Interior.Color = RGB(0, 0, 0) 'to samé jako vbBlack
End Sub

Pro změnu barvy lze použít taktéž vlastnost ColorIndex. Hodnotu xlNone použijeme, pokud chceme mít buňku bez výplně, celočíselnou hodnotu, pokud chceme buňku podbarvit. Ukážeme si to v následujícím příkladu.

Zadání: Změňte barvu pozadí pátého řádku, až na buňku bez výplně ve druhém, třetím a šestém sloupci.

Změna barvy pozadí řádku pomocí makra v Excelu - Makra v Microsoft Office

Budeme pracovat s pátým řádkem Rows(5) a jeho výplní Interior. Pro vybarvení použijeme vlastnost ColorIndex. První řádek kódu změní pozadí celého řádku a další pak zruší výplň ve druhém, třetím a šestém sloupci.

Při rušení výplně chceme pracovat s konkrétní buňkou, tedy použijeme vlastnost (a zároveň objekt) Cells. Objekt Rows(5) říká, že budeme pracovat s pátým řádkem. Za tečkou je pak buňka vztažena k tomuto pátému řádku. Proto píšeme Cells(1, 2), což znamená v prvním řádku vůči nadřazené oblasti a druhém sloupci, tedy v buňce B5. Pokud není uveden nadřazený objekt, je pravda, že buňka B5 je Cells(5, 2), jak je uvedeno v předchozí části textu. Ale pozor, při uvedení nadřazeného objektu se vše vztahuje právě k němu.

Sub format_radek_bunka()
    Rows(5).Interior.ColorIndex = 3
    Rows(5).Cells(1, 2).Interior.ColorIndex = xlNone
    Rows(5).Cells(1, 3).Interior.ColorIndex = xlNone
    Rows(5).Cells(1, 6).Interior.ColorIndex = xlNone
End Sub

Objekt Columns - sloupec

Tento objekt lze využít pro určení jednoho sloupce. Číslo sloupce uvádíme v parametru.

Zadání: Změňte barvu pozadí celého prvního sloupce.

Řešení bylo vysvětleno výše. Jen protože pracujeme s prvním sloupcem, uvádíme Columns(1) a je použit zápis vbBarva, v tomto případě vbBlack:

Sub format_sloupec()
    Columns(1).Interior.Color = vbBlack 'RGB(0, 0, 0)
End Sub

Zadání: Změňte barvu pozadí celého sloupce určeného aktivní buňkou. Nebudeme pracovat se sloupcem 1, ale se sloupcem v němž je aktivní buňka. Jak už víme, ActiveCell.Column vrací číslo sloupce aktivní buňky:

Sub format_sloupec_aktivni()
    Columns(ActiveCell.Column).Interior.Color = vbBlack 'RGB(0, 0, 0)
End Sub

V příští lekci, , se společně podíváme na objekt Range, pomocí něhož určujeme oblast buněk.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 599x (20.36 kB)

 

Předchozí článek
Klasické Hello a úvod do OOP pro makra
Všechny články v sekci
Makra v Microsoft Office
Článek pro vás napsala Lenka
Avatar
Uživatelské hodnocení:
11 hlasů
Autorka je absolventkou FI MU. Má dlouholetou pedagogickou praxi. Vyučovala maturitní obor IT, zejména Programování a Databázové systémy. Taktéž byla vývojová odborná redaktorka matematiky. Nyní se věnuje nestandardní i standardní výuce na soukromo.
Aktivity