Rozsahy a buňky aplikace Excel VBA

Rozsahy a buňky ve VBA

Tabulky Excelu ukládají data do buněk. Buňky jsou uspořádány do řádků a sloupců. Každou buňku lze identifikovat průsečíkem jejího řádku a sloupce (např. B3 nebo R3C2).

Rozsah Excel označuje jednu nebo více buněk (např. A3: B4)

Adresa buňky

Zápis A1

V zápisu A1 je buňka označena písmenem ve sloupci (od A do XFD), za nímž následuje číslo řádku (od 1 do 1 048 576).

Ve VBA můžete odkazovat na libovolnou buňku pomocí Objekt rozsahu.

123456789 'Viz buňka B4 na aktuálně aktivním listuRozsah MsgBox ("B4")'Viz buňka B4 na listu s názvem' Data 'Pracovní listy MsgBox („Data“). Rozsah („B4“)'Viz buňka B4 na listu s názvem' Data 'v jiném OPEN sešitu's názvem' Moje data 'Sešity MsgBox („Moje data“). Pracovní listy („Data“). Rozsah („B4“)

Zápis R1C1

V zápisu R1C1 je buňka označena písmenem R následovaným číslem řádku, potom písmenem „C“ následovaným číslem sloupce. např. B4 v zápisu R1C1 bude odkazováno pomocí R4C2. Ve VBA používáte Objekt buněk použít zápis R1C1:

12 „Viz buňka R [6] C [4], tj. D6Buňky (6, 4) = "D6"

Rozsah buněk

Zápis A1

Chcete -li odkazovat na více než jednu buňku, použijte „:“ mezi počáteční adresou buňky a adresou poslední buňky. Následující text bude odkazovat na všechny buňky od A1 do D10:

1 Rozsah ("A1: D10")

Zápis R1C1

Chcete -li odkazovat na více než jednu buňku, použijte mezi počáteční adresou buňky a adresou poslední buňky znak „“. Následující text bude odkazovat na všechny buňky od A1 do D10:

1 Rozsah (buňky (1, 1), buňky (10, 4))

Zápis do buněk

Chcete -li zapsat hodnoty do buňky nebo souvislé skupiny buněk, jednoduše se podívejte na rozsah, vložte znaménko = a poté napište hodnotu, která má být uložena:

12345678910 „Uložte F5 do buňky s adresou F6Rozsah ("F6") = "F6"„Uložte E6 do buňky s adresou R [6] C [5] tj. E6Buňky (6, 5) = "E6"„Uchovávejte A1: D10 v rozsahu A1: D10Rozsah ("A1: D10") = "A1: D10"“neboRozsah (buňky (1, 1), buňky (10, 4)) = "A1: D10"

Čtení z buněk

Chcete -li číst hodnoty z buněk, prostým odkazem na proměnnou uložte hodnoty, vložte znaménko = a poté odkazujte na rozsah, který chcete přečíst:

1234567891011 Dim val1Dim val2„Čtěte z buňky F6val1 = rozsah ("F6")„Čtěte z buňky E6val2 = buňky (6, 5)MsgBox val1Msgbox val2

Poznámka: Chcete -li ukládat hodnoty z řady buněk, musíte místo jednoduché proměnné použít pole.

Nesousedící buňky

Chcete -li odkazovat na nesouvislé buňky, použijte mezi adresami buněk čárku:

123456 „Uložte 10 do buněk A1, A3 a A5Rozsah ("A1, A3, A5") = 10„Uložte 10 do buněk A1: A3 a D1: D3)Rozsah ("A1: A3, D1: D3") = 10

Průnik buněk

Chcete -li odkazovat na nesouvislé buňky, použijte mezeru mezi adresami buněk:

123 Uložte „Col D“ do D1: D10“což je běžné mezi A1: D10 a D1: F10Rozsah ("A1: D10 D1: G10") = "Col D"

Odsazení od buňky nebo dosahu

Pomocí funkce Odsazení můžete přesunout referenci z daného Rozsahu (buňky nebo skupiny buněk) o zadaný počet_prostorů a počet_ sloupců.

Ofsetová syntaxe

Rozsah.Offset (number_of_rows, number_of_columns)

Odsazení z buňky

12345678910111213141516 'OFFSET z buňky A1„Podívejte se na samotnou buňku'Přesuňte 0 řádků a 0 sloupcůRozsah ("A1"). Offset (0, 0) = "A1"„Přesuňte 1 řádek a 0 sloupcůRozsah ("A1"). Offset (1, 0) = "A2"'Přesuňte 0 řádků a 1 sloupcůRozsah ("A1"). Offset (0, 1) = "B1"'Přesuňte 1 řádky a 1 sloupceRozsah ("A1"). Offset (1, 1) = "B2"'Přesuňte 10 řádků a 5 sloupcůRozsah ("A1"). Ofset (10, 5) = "F11"

Offset od rozsahu

123 'Přesunout odkaz na rozsah A1: D4 o 4 řádky a 4 sloupce„Nová reference je E5: H8Rozsah ("A1: D4"). Offset (4,4) = "E5: H8"

Nastavení odkazu na rozsah

Přiřazení rozsahu proměnné rozsahu: deklarujte proměnnou typu Range a poté ji pomocí příkazu Set nastavte na rozsah. Vezměte prosím na vědomí, že musíte použít příkaz SET, protože RANGE je objekt:

12345678 "Deklarujte proměnnou rozsahu."Dim myRange as Range'Nastavte proměnnou na rozsah A1: D4Nastavit myRange = rozsah ("A1: D4")'Vytiskne $ A $ 1: $ D $ 4MsgBox myRange.Address

Změnit velikost rozsahu

Metoda změny velikosti objektu Range mění rozměr referenčního rozsahu:

1234567 Dim myRange As Range„Rozsah změny velikostiNastavit myRange = rozsah ("A1: F4")'Vytiskne $ A $ 1: $ E $ 10Debug.Print myRange.Resize (10, 5) .Address

Buňka vlevo nahoře v rozsahu se změnou velikosti je stejná jako buňka vlevo nahoře v původním rozsahu

Změnit velikost syntaxe

Range.Resize (number_of_rows, number_of_columns)

OFFSET vs Změna velikosti

Offset nemění rozměry rozsahu, ale přesouvá jej o zadaný počet řádků a sloupců. Změnit velikost nemění pozici původního rozsahu, ale mění rozměry na zadaný počet řádků a sloupců.

Všechny buňky v listu

Objekt Cells odkazuje na všechny buňky v listu (1048576 řádků a 16384 sloupců).

12 „Vymažte všechny buňky v pracovních listechBuňky. Vymazat

Použitý rozsah

Vlastnost UsedRange vám poskytuje obdélníkový rozsah od použité buňky vlevo nahoře po použitou buňku aktivního listu vpravo a dole.

1234567 Dim ws As WorksheetNastavit ws = ActiveSheet'$ B $ 2: $ L $ 14, pokud L2 je první buňka s jakoukoli hodnotou'a L14 je poslední buňka s libovolnou hodnotou na'aktivní listDebug.Print ws.UsedRange.Address

Aktuální region

Vlastnost CurrentRegion vám poskytuje souvislý obdélníkový rozsah od buňky vlevo nahoře k použité buňce vpravo dole obsahující referenční buňku/rozsah.

1234567891011 Dim myRange As RangeNastavit myRange = rozsah ("D4: F6")'Vytiskne $ B $ 2: $ L $ 14„Pokud existuje vyplněná cesta od D4: F16 do B2 A L14Debug.Print myRange.CurrentRegion.Address`` Můžete také odkazovat na jednu počáteční buňkuNastavit myRange = Range ("D4") 'Tisk $ B $ 2: $ L $ 14

Vlastnosti rozsahu

Můžete získat adresu, číslo řádku/sloupce buňky a počet řádků/sloupců v rozsahu, jak je uvedeno níže:

123456789101112131415161718192021 Dim myRange As RangeNastavit myRange = rozsah ("A1: F10")'Vytiskne $ A $ 1: $ F $ 10Debug.Print myRange.AddressNastavit myRange = rozsah ("F10")`` Vytiskne 10 pro řádek 10Debug.Print myRange.Row`` Vytiskne 6 pro sloupec FDebug.Print myRange.ColumnNastavit myRange = rozsah ("E1: F5")'Vytiskne 5 pro počet řádků v rozsahu.'Debug.Print myRange.Rows.Count'Vytiskne 2 pro počet sloupců v rozsahu.'Debug.Print myRange.Columns.Count

Poslední buňka v listu

Můžeš použít Řádky a Sloupce. Počet vlastnosti s Buňky objekt pro získání poslední buňky na listu:

1234567891011 „Vytiskněte číslo posledního řádku`` Vytiskne 1048576Debug.Print "Řádky v listu:" & Rows.Count„Vytiskněte číslo posledního sloupce`` Tiskne 16384Debug.Print "Sloupce v listu:" & Columns.Count„Vytiskněte adresu poslední buňky'Vytiskne $ XFD $ 1048576Debug.Print "Adresa poslední buňky v listu:" & buňky (řádky. Počet, sloupce. Počet)

Poslední použité číslo řádku ve sloupci

Vlastnost END vám vezme poslední buňku v rozsahu a End (xlUp) vás dovede k první použité buňce z této buňky.

123 Dim lastRow As LonglastRow = Cells (Rows.Count, "A"). End (xlUp) .Row

Číslo naposledy použitého sloupce v řadě

123 Dim lastCol As LonglastCol = Cells (1, Columns.Count) .End (xlToLeft) .Column

Vlastnost END vám vezme poslední buňku v rozsahu a End (xlToLeft) vás přenese doleva k první použité buňce z této buňky.

Vlastnosti xlDown a xlToRight můžete také použít k navigaci do prvních použitých nebo spodních buněk aktuální buňky.

Vlastnosti buňky

Společné vlastnosti

Zde je kód pro zobrazení běžně používaných vlastností buňky

12345678910111213141516171819202122 Dim buňka jako rozsahNastavit buňku = rozsah ("A1")buňka. AktivovatBuňka ladění. Tisk. Adresa'Vytisknout $ A $ 1Buňka ladění. Tisk. Hodnota`` Tiskne 456' AdresaBuňka ladění. Tisk buňky. Vzorec'Výtisky = SUM (C2: C3)' KomentářBuňka ladění.tisk.Comment.Text"Styl."Buňka ladění. Tisk. Styl„Formát buňkyBuňka Debug.Print.DisplayFormat.NumberFormat

Písmo buňky

Objekt Cell.Font obsahuje vlastnosti písma buňky:

1234567891011121314151617181920 Dim buňka jako rozsahNastavit buňku = rozsah ("A1")„Pravidelné, kurzíva, tučné písmo a tučné písmocell.Font.FontStyle = "Tučné kurzíva"' Stejný jakocell.Font.Bold = Truecell.Font.Italic = True„Nastavit písmo na Couriercell.Font.FontStyle = "Courier"'Nastavit barvu písmacell.Font.Color = vbBlue“nebocell.Font.Color = RGB (255, 0, 0)'Nastavit velikost písmacell.Font.Size = 20

Kopírování a vkládání

Vložit vše

Rozsahy/buňky lze kopírovat a vkládat z jednoho místa na druhé. Následující kód zkopíruje všechny vlastnosti zdrojového rozsahu do cílového rozsahu (ekvivalent CTRL-C a CTRL-V)

1234567 „Jednoduchá kopieRozsah („A1: D20“). ZkopírujtePracovní listy („List2“). Rozsah („B10“). Vložit'nebo'Kopírovat z aktuálního listu na list s názvem' List2 'Rozsah ("A1: D20"). Cíl kopírování: = Pracovní listy ("List2"). Rozsah ("B10")

Vložit speciální

Vybrané vlastnosti zdrojového rozsahu lze zkopírovat do cíle pomocí možnosti PASTESPECIAL:

123 „Rozsah vložte pouze jako hodnotyRozsah („A1: D20“). ZkopírujtePracovní listy („List2“). Rozsah („B10“). PasteSpecial Paste: = xlPasteValues

Zde jsou možné možnosti pro možnost Vložit:

12345678910111213 „Vložte speciální typyxlPasteAllxlPasteAllExceptBordersxlPasteAllMergingConditionalFormatsxlPasteAllUsingSourceThemexlPasteColumnWidthsxlPasteCommentsxlPasteFormatsxlPasteFormulasxlPasteFormulasAndNumberFormatsxlPasteValidationxlPasteValuesxlPasteValuesAndNumberFormats

Obsah AutoFit

Velikost řádků a sloupců lze změnit tak, aby odpovídala obsahu, pomocí níže uvedeného kódu:

12345 'Změňte velikost řádků 1 na 5, aby odpovídaly obsahuŘádky („1: 5“). Automatické přizpůsobení„Změňte velikost sloupců A na B, aby odpovídaly obsahuSloupce („A: B“). Automatické přizpůsobení

Další příklady rozsahu

Při provádění požadované akce prostřednictvím grafického uživatelského rozhraní doporučujeme používat záznam makra. Pomůže vám to pochopit různé dostupné možnosti a jejich použití.

Pro každého

Je snazší procházet rozsah pomocí Pro každého sestrojte podle obrázku níže:

123 Pro každou buňku v dosahu („A1: B100“)„Udělejte něco s celouDalší buňka

Při každé iteraci smyčky je jedné buňce v rozsahu přiřazena proměnná c a pro tuto buňku jsou provedeny příkazy ve smyčce For. Po zpracování všech buněk se smyčka ukončí.

Seřadit

Sort je metoda objektu Range. Rozsah můžete seřadit zadáním možností pro řazení do Range.Sort. Níže uvedený kód seřadí sloupce A: C podle klíče v buňce C2. Pořadí řazení může být xlAscending nebo xlDescending. Záhlaví: = xlAno by mělo být použito, pokud je prvním řádkem řádek záhlaví.

12 Sloupce ("A: C"). Klíč řazení1: = Rozsah ("C2"), _order1: = xlAscending, Header: = xlYes

Nalézt

Find je také metoda Range Object. Najde první buňku s obsahem odpovídajícím kritériím vyhledávání a vrátí buňku jako objekt Range. Vrací se to Nic pokud neexistuje shoda.

Použití Najdi další metoda (nebo FindPrevious) k nalezení dalšího (předchozího) výskytu.

Následující kód změní písmo na „Arial Black“ pro všechny buňky v rozsahu, které začínají na „John“:

12345 Pro každé c v rozsahu („A1: A100“)Pokud c jako „John*“ Pakc.Font.Name = "Arial Black"Konec IfDalší c

Následující kód nahradí všechny výskyty „Testovat“ na „Prošel“ v uvedeném rozsahu:

12345678910 S rozsahem ("a1: a500")Nastavit c = .Find ("Testovat", LookIn: = xlValues)Pokud ne c není nic, pakfirstaddress = c. AdresaDělatc.Value = "Prošlo"Nastavit c = .FindNext (c)Smyčka, i když ne c není nic, a c. Adresa první adresaKonec IfKonec s

Je důležité si uvědomit, že pro použití FindNext musíte určit rozsah. Také musíte zadat podmínku zastavení, jinak se smyčka spustí navždy. Normálně je adresa první buňky, která byla nalezena, uložena v proměnné a smyčka se zastaví, když znovu dosáhnete této buňky. Musíte také zkontrolovat případ, kdy není nalezeno nic, co by smyčku zastavilo.

Adresa rozsahu

K získání adresy ve stylu A1 použijte Range.Address

123 Rozsah MsgBox ("A1: D10"). Adresa“neboRozsah ladění.tisku ("A1: D10"). Adresa

K získání adres ve stylu R1C1 použijte xlReferenceStyle (výchozí je xlA1)

123 Rozsah MsgBox ("A1: D10"). Adresa (ReferenceStyle: = xlR1C1)“neboRozsah Debug.Print ("A1: D10"). Adresa (ReferenceStyle: = xlR1C1)

To je užitečné, když pracujete s rozsahy uloženými v proměnných a chcete zpracovávat pouze pro určité adresy.

Rozsah do pole

Je rychlejší a snazší přenést rozsah do pole a poté zpracovat hodnoty. Pole byste měli deklarovat jako Variant, abyste se vyhnuli výpočtu velikosti potřebné k naplnění rozsahu v poli. Rozměry pole jsou nastaveny tak, aby odpovídaly počtu hodnot v rozsahu.

123456789 Dim DirArray jako varianta'Uložte hodnoty v rozsahu do poleDirArray = Rozsah ("a1: a5"). Hodnota„Smyčka ke zpracování hodnotZa každé c In DirArrayDebug.Print cdalší

Pole na dosah

Po zpracování můžete pole zapsat zpět do rozsahu. Chcete -li zapsat pole ve výše uvedeném příkladu do rozsahu, musíte zadat rozsah, jehož velikost odpovídá počtu prvků v poli.

Pomocí níže uvedeného kódu zapište pole do rozsahu D1: D5:

123 Rozsah ("D1: D5"). Hodnota = DirArrayRozsah ("D1: H1"). Hodnota = Application.Transpose (DirArray)

Pokud pole zapisujete do řádku, musíte ho transponovat.

Rozsah součtů

12 SumOfRange = Application.WorksheetFunction.Sum (rozsah ("A1: A10"))Debug.Print SumOfRange

V kódu VBA můžete použít mnoho funkcí dostupných v Excelu zadáním Application.WorkSheetFunction. před názvem funkce jako v příkladu výše.

Rozsah počítání

1234567 'Spočítejte počet buněk s čísly v rozsahuCountOfCells = Application.WorksheetFunction.Count (rozsah ("A1: A10"))Debug.Print CountOfCells'Spočítejte počet neprázdných buněk v rozsahuCountOfNonBlankCells = Application.WorksheetFunction.CountA (rozsah ("A1: A10"))Debug.Print CountOfNonBlankCells

Autor: Vinamra Chandra

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave