Přeskočit navigaci | Přeskočit na novinky

Nový videokurz na Seduo: Excel pro začátečníky

     

Jste zde: Úvodní stránka » excel » vba-listy-bunky » vba-exce-objekt-range-oblast-bunek

Range objekt - oblast buněk - Excel VBA


Co umí objekt Range, k čemu jej lze využít ve VBA Excel

Naposled doplněno: 24.10.2014

Objekt Range - úvod

Microsoft Excel logo

Jeden z nejpoužívanějších objektu ve VBA Excel. Objekt definuje buňku či oblast buněk, které potřebujeme označit (vybrat). Pro přehlednost je článek rozdělen na jednotlivé kapitoly:

V ukazkových kódech ukážu jak se odkazovat na požadované buňky, oblasti buněk.


Range - syntaxe

Objekt vratí rozsah, který představuje buňku nebo oblast buněk.

Range(bunka_start [,bunka_konec])

Popis argumentů

  • bunka_start - povinná - pro jednu buňku
  • bunka_konec - volitelná - konečná buňka (pro oblast)

Jak může vypadat

Range("A1") Range(ActiveCell) Range("A1:B5") Range("A1", "B5") Range("A1", ActiveCell) Range(ActiveCell, ActiveCell.Offset(5, 2))

Podrobněji je popsáno v dalších kapitolách.

Range - jedna buňka

V aktivním listě označím buňku A1:

Dim MojeRange As Range Set MojeRange = Range("A1")

nebo

Set MojeRange = ActiveSheet.Range("A1")

Odkaz na buňku v definovaném listě

Set MojeRange = Worksheets("List23").Range("A1")

Budeme-li chtít buňku označit

Range("A1").Select

nebo

Dim MojeRange As Range Set MojeRange = Range("A1") MojeRange.Select

Range - Celý řádek

Set MojeRange = Range("1:1")

nebo

Set MojeRange = ActiveSheet.Rows(1)

Variabilní proměná

Potřebujeteli dynamicky vybírat několik souvislých řádků:

radek1 = 1 radek2 = 5 Rows(radek1 & ":" & radek2).Select

Range - Celý sloupec

Set MojeRange = Range("A:A")

Označit první sloupec

ActiveSheet.Columns(1).select

Několik sloupců

ActiveSheet.Range(Columns(2), Columns(4)).Select nebo ActiveSheet.Range("B:D").Select

Range - souvislá oblast buněk

Set MojeRange = Range("A1:D5")

Tady už to začíný být zajimavé, protože Range lze předat dva parametry. Takže předchozí můžeme zapsat i takhle

Set MojeRange = Range("A1", "D5")

No a jelikož oba argumenty mohou mít rozsah lze provést i třeba tuto fintu. Stále se jedná o stejnou oblast.

Set MojeRange = Range("A1:B2", "C4:D5")

Range - Nesouvislá oblast buněk

Stačí oddělovat čárkou a máme jednotlivé buňky, oblasti

Set MojeRange = Range("B3, B6, B8")

Pro dvě oblasti

Set MojeRange = Range("A1:B2 , C4:D5")

Možné komplikace

Pozor na uvozovky sloučené buňky!

Uvozovky

Pozor na zapomenuté uvozovky. Následující kódy vypadájí podobně, ale nejde o stejnou oblast A1:D5.

Jednou jde o oblast A1:D5 v druhém případě jde o dvě oblasti A1:2 a C4:D5

' A1:D5 Set MojeRange = Range("A1:B2" , "C4:D5") ' A1:2 a C4:D5 Set MojeRange = Range("A1:B2 , C4:D5")

Poznámka: Takhle to vypadá velice jednoduše, ale když oblast buněk vypisuje nějaký skript, už to tak jednoduché není a nalézt chybu je těžší...

Sloučené buňky

Pokud budete provádět range nad sloučenými buňkami můžete obdržet jinou oblast než se kterou počítate.

Adresa parametrem

pokud je adresa buňky v parametru.

Dim MojeRange As Range Dim Bunka As String Bunka = ("B3") Set MojeRange = Range(Bunka) MojeRange.Select

Označit oblast vyfiltrovaných dat

Jak označit oblast pouze vyfiltrovných dat. Řádky 2 až 20.

Range("2:20").SpecialCells(xlCellTypeVisible).Select
Microsoft Excel VBA - stahuj logo

Ke stažení

Soubor Range - praktické příklady - Excel VBA soubor ve formátu *.xlsm ke stažení zdarma. Soubor využívá makra.


Range - Excel VBA - ukázka šablony

Další související články:

Pokud už máte buňku (oblast) označenou můžete s ními dále pracovat například

Závěrem

Pokud Vás něco napadne k Range, můžete přispět do komentářů. V dalším článku proberu Cells, Offset, atd.

Článek byl aktualizován: 01.11.2014 14:18

Odměna

Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.


Pavel Lasák

Pavel Lasák - autor webu

Microsoft Office (Word, Excel, PowerPoint) se věnuji od roku 2006. Své vědomosti a zkušenosti dávám k dispozici na různých školeních a konzultacích, ale také na tomto webu. K dispozici na tomto webu je mnoho návodu, tipů a triků včetně desítek různých šablon.

   Pavel Lasák LinkedIn Profil    Pavel Lasák Google+ Profil    Pavel Lasák facebook Profil    Pavel Lasák twitter Profil

Doporučte tento článek přátelům

Pokud vám článek pomohl, případně si myslíte, že může pomoci i někomu dalšímu, budu rád když jej sdílením doporučíte přátelům - děkuji:



Komentáře


Lukas

Přidáno: 13.03.12 10:50

Ahoj, prosim ta, je mozne do Range dat aj premennu? Nieco ako je tento priklad: Do While I <= 8 ActiveCell.Offset(1, 0).Select I = I + 1 If ActiveCell = "" Then J = ActiveCell.Address() Exit Do End If Loop Application.Goto ActiveWorkbook.Sheets("visitor").Range("A20:J") Vdaka

Pavel Lasák

Přidáno: 13.03.12 17:07

To Lukas: Range("ProdejData") nebo Range("A1",Range("PosledniBunka"))

Lukas

Přidáno: 14.03.12 09:02

Super, funguje. Vdaka Ale aj tak som to nedomyslel :) Je mozne do toho Range pridat nieco take ako Range(A20:A20+"x") Kde x bude hovorit, aby sa ta bunka nastavila na A23 ak to x bude napr. 3? :)

Pavel Lasák

Přidáno: 15.03.12 18:10

To Lukas: Spočítal bych předem a vložil výsledek.

MZ

Přidáno: 09.03.13 01:05

Ahoj, snažím se udělat jeden graf, do kterého se budou zobrazovat vždy jen výsledky z měsíce, který vyberu ze seznamu (ten jsem zaindexoval do "strList". Když se snažím aby mi VBA vyhodilo vzorec, hodí mi chybu - funguje mi jen když z něj udělám textový řetězec (FormulaR1C1 = "=SUMA(" změním na FormulaR1C1 = " =SUMA(". . . s mezerou před = tady to je: Dim strList, List As Variant Dim strKusyD, strKusyH As String ' strList = Cells(2, 38) strKusyH = "E1002" strKusyD = "E1003" List = strList & "!" Range("AL5").FormulaR1C1 = "=SUMA(" & List & strKusyH & strKusyH & ")" Kdyby tě něco napadlo, budu ti vděčný - vážně si nevím rady :-(

Arny

Přidáno: 31.05.13 13:06

Ahoj, pokusam sa urobit makro na skopirovanie dat z jedneho zosita to ineho s tym, ze chcem ulozit len hodnoty a formaty. Chcel by som sa spytat, preco "Select" pre vlozenie nefunguje. Dakujem. Dim OblastZdroja As Excel.Range, OblastCiela As Excel.Range Dim Wbi As Workbook, Wbo As Workbook Set Wbi = Workbooks ("Book1.xls") Set Wbi = Workbooks ("Book2.xls") Wbi.Activate Set OblastZdroja = Sheets(1).Cells OblastZdroja.Copy Wbo.Activate Set OblastCiela = Sheets(1).Cells OblastCiela.Select Selection.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, _ SkipBlanks:=False, _ Transpose:=False Selection.PasteSpecial Paste:=xlPasteFormats, _ Operation:=xlNone, _ SkipBlanks:=False, _ Transpose:=False Application.CutCopyMode = False

Pavel Lasák

Přidáno: 31.05.13 14:41

To Arny: není problem v: Set Wbi = Workbooks ("Book1.xls") Set Wbi = Workbooks ("Book2.xls") nemá být: Set Wbi = Workbooks ("Book1.xls") Set Wbo = Workbooks ("Book2.xls") nejsem u Excelu abych otestoval. Google našel http://www.vbforums.com/showthread.php?510652-RESOLVED-Copy-From-One-WorkBook-To-Another-Excel-VBA/page2&s=189531c9d1ba7b6110cd12961440d29a

Arny

Přidáno: 01.06.13 08:57

Nie, to bol len preklep v mojom kode na tejto stranke. V Exceli to mam ako pises. Ked dam apostrof pred "OblastCiela.Select" tak to funguje, akurat ze skopirovanu oblast z listu povodneho zosita mi dava do posledneho listu cieloveho zosita a nie do vybraneho listu cieloveho zosita. Tiez som googlil, ale nejde to.

Pavel Lasák

Přidáno: 01.06.13 14:16

To Arny: Zkoušel jsem a funguje (Excel 2010 CZ), jen se musí soubory otevřít (mám je zavřeny) Workbooks.Open, kód mám v Book1.xlsm Dim OblastZdroja As Excel.Range, OblastCiela As Excel.Range Dim Wbi As Workbook, Wbo As Workbook Set Wbi = Workbooks.Open("Book2.xlsx") Set Wbo = Workbooks.Open("Book3.xlsx") Wbi.Activate Set OblastZdroja = Sheets(1).Cells OblastZdroja.Copy Wbo.Activate Set OblastCiela = Sheets(1).Cells OblastCiela.Select Selection.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, _ SkipBlanks:=False, _ Transpose:=False Nebo z mé sbírky kódu (není moje řešení - jen upraven nalezený ukázkový kód): ' kopie vybraného listu jednoho sešitu na list jiného sešitu Dim Zdrojovy As Workbook Dim Cilovy As Workbook Dim ProKopii As Worksheet Set Zdrojovy = Workbooks.Open("D:\book2.xlsx") Set Cilovy = Workbooks.Open("D:\book3.xlsx") Set ProKopii = Zdrojovy.Sheets("List1") ProKopii.Copy Cilovy.Sheets(1)

Václav

Přidáno: 23.07.13 09:51

Chtěl bych zkopírovat souvislou i nesouvislou oblast z jednoho listu do druhého pomocí CELLS. Prosím poraďte.

Aneta

Přidáno: 09.01.14 16:56

Měla bych bych prosbu jak napsat kod ve VBA excel - potřebuji smazat vyfiltrovaná data a musí mi zůstat 1 řádek hlavička, nevím jak označit oblast vyfiltrovaných dat.

Jojo

Přidáno: 10.07.14 07:51

To Václav: shZdroj = "List1" shCiel = "List2" oblasti = Array("A1:A3", "B5", "C4") For rng = LBound(oblasti) To UBound(oblasti) Sheets(shZdroj).Range(oblasti(rng)).Copy Sheets(shCiel).Range(oblasti(rng)) Next rng

Pavel Lasák

Přidáno: 22.10.14 22:54

To Aneta: Označit oblast vyfiltrovaných dat: Range("2:20").SpecialCells(xlCellTypeVisible).Select

Pavel Lasák

Přidáno: 22.10.14 23:00

To Jojo: Díky za zodpovídání dotazů.

Zuzza

Přidáno: 09.01.15 14:10

Ahoj, zasekla som sa ne jednej veci a neviem ci je to vobec mozne urobit.. Mam 3 prikazove tlacitka, ktore kazdé predstavuje jedno cislo (1,2,3) a potrebovala by som aby sa mi vo formulari po ich stlaceni vypisali do TextoBoxu za sebou tak ako sa budú stlacat prikazove tlacitka(cize len cisla bez medzier, ciarok a podobne). mne ich totizto zatial len po stlaceni prikazoveho tlacitka prepisuje v TextBoxe. ďakujem

Jojo

Přidáno: 12.01.15 09:09

To Zuzza: -- Platí nasledujúci princíp:Private Sub CommandButton1_Click() TextBox1.Text = TextBox1.Text + CommandButton1.Caption End Sub

Jirka

Přidáno: 07.07.15 10:46

Ahoj, je možné vybrat souvislou oblast buněk, když není znám její přesný rozsah? Resp. počet sloupců je daný. Proměnlivý je počet řádku (u každého zpracovaného souboru je jiné množství dat). Takto vybraná data potřebuji předat pro vytvoření kontingenční tabulky. Děkuji za radu. J.

Pavel Lasák

Přidáno: 26.07.15 17:00

To Jirka: Počet řádku umí VBA zjistit viz: http://office.lasakovi.com/excel/vba-listy-bunky/radky-sloupce-excel-vba-kody/

Jirka

Přidáno: 30.07.15 12:48

Ahoj, předně děkuji za nakopnutí. Posunulo mě to o kus dál. Jsem nyní schopen vybrat tu část tabulky, která mě zajímá: Dim PosledniRadek As Long, t As Long Dim OznacOblast As Range Sheets(1).Name = "List1" With Sheets("List1") PosledniRadek = .Range("A" & .Rows.Count).End(xlUp).Row For t = 1 To PosledniRadek If Range("H" & t).Value = 11 Or Range("H" & t).Value = "Druh pohybu" Then If OznacOblast Is Nothing Then Set OznacOblast = .Rows(t) Else Set OznacOblast = Union(OznacOblast, .Rows(t)) End If End If Next If Not OznacOblast Is Nothing Then OznacOblast.Select End If End With Tedy mám vybrány tu oblast tabulky, kde je na řádku v určitém sloupci "11" a zároveň záhlaví. Pořád se mi ale nedaří předat tuto vybranou oblast pro vytvoření KT: ActiveWorkbook.PivotCaches.Create SourceType:=xlDatabase, SourceData:= _ OznacOblast, Version:=xlPivotTableVersion14).CreatePivotTable TableDestination:="List2!R3C1", TableName:="Kontingenční tabulka", _ DefaultVersion:=xlPivotTableVersion14 Sheets("List2").Select Cells(3, 1).Select Můžu požádat ještě o jednu radu? Dík J.

Radee

Přidáno: 23.10.15 19:35

Zdravím, prosím o radu :-) Mám tento problém: mám nějaké hodnoty ve sloupci "D". Jak udělat aby se mi vybralo range podle nějaké proměnné? Například chci range prvních tří hodnot D1,D3 - tak abych zadal např: do "A1" tu proměnnou hodnotu např. 3 a tím pádem by se vybralo právě range těch tří hodnot (D1:D3) Pokud bych zadal do proměnné "A1" např číslo 4, tak by se vybralo range 4 hodnoty tj D1:D4 atd. Děkuji za případnou odpověď.

Jojo

Přidáno: 27.10.15 07:12

To Radee: -- Výber oblasti podľa zadaného čísla v A1:Sub Test() pocet = Range("A1") Range("D1:D" & pocet).Select End Sub

Přidáno: 29.10.15 04:03

To JoJo: Funguje perfektně. Moc děkuju!

Radee

Přidáno: 05.11.15 12:18

Mohl bych se prosím ještě zeptat, jak udělat, aby se mi range (například sloupec D, ve kterém je pod sebou pokaždé jiné množství hodnot/řádků) rozdělilo na práve určený počet řádků (takové podrange v range) Příklad: potřebuji vypočítat Maximální hodnoty ve 4 po sobě jdoucích řádcích ve sloupci D- tedy sloupec D rozdělit na několik menších range a tyto range mají hodnotu např 4 řádky. Tyto menší range mají velikost buď 4 nebo 5 nebo 6 řádků, ale v celém sloupci D. Prostě měnit si číslicí jen počet řádků, jak velké bude to podrange ve range D. Předem MOC děkuji !

Ondřej

Přidáno: 10.11.15 22:03

Zdravím, měl bych dotaz ke kombinaci: zamknutý list + makro, které vybere viditelné buňky. Mám tabulku o mnoha sloupcích, uživatel má každý čtvrtý sloupec vyplnit, 3 mezi nimi jsou pro informaci. Jednoduchým makrem si může skrýt ty informativní sloupce. Aby si nepřepsal ty skryté sloupce, je tam ještě makro které vybere jen viditelné buňky a do nich se hromadně zapisuje. Potud vše funguje správně. Pak jsem ale pro jistotu chtěl zamknout všechny buňky, do kterých se nezapisuje. Makro Selection.SpecialCells(xlCellTypeVisible).Select pak skončí chybou run-time error 1004 "Tento příkaz nelze použít v zamknutém listu". Předem děkuji za radu.

Jirka

Přidáno: 28.02.16 12:55

Dobry den, chtel bych Vas poprosit o radu. Jsem zacatecnik ohledne vba. Spustim makro, pomoci ktereho oteviram nejaky sesit, tam potrebuji udelat ve 2. a 3. listu vyber slupcu(6),ktere maji ruznou delku a tyto hodnoty nacist do sesitu ve kterem to spustim. Delam to pomoci: ActiveSheet.Range("n18", ActiveSheet.Range("n18").End(xlDown)).Select ActiveSheet.Range("p18", ActiveSheet.Range("p18").End(xlDown)).Select atd. Bohuzel nevim jak dal, protoze se mi do noveho sesitu kopiruje jen posledni sloupec. Muzete mi prosim poradit jak dal?

Jirka

Přidáno: 04.03.16 22:42

To:Jirka treba se to nekomu bude hodit Set a = ActiveSheet.Range("n19", ActiveSheet.Range("n19").End(xlDown)) Set b = ActiveSheet.Range("q19", ActiveSheet.Range("q19").End(xlDown)) Union(a, b).Select Selection.Copy


Přidání nového komentáře

Poznámka: Z časových důvodu není v mých sílách zodpovědět všechny dotazy. Děkuji za pochopení.




(vlož číslo padesátpět)

Z bezpečnostních důvodu dočasně nemůžete použít HTML značky, kromě <code> a </code> (pro vkládání VBA kódu). Děkuji za pochopení.
Děkuji, za Vaše komentáře.

Za obsah komentářů neodpovídám, jelikož jsou komentáře publikovány ihned po jejich napsání čtenářem. Toto nemohu nijak ovlivnit. Přesto si vyhrazuji možnost jakýkoli neslušný komentář smazat bez udání důvodu. V komentářích si tykáme. ;-)






Sdílejte

Pomohl Vám návod?
Sdílejte na Facebooku, G+
LinkedIn...

Nové články


Newsletter

Přihlaste se odběru novinek a získejte:
Ebook zdarma -
10 kroků ke zvládnutí (Word, Excel, PowerPoint)
Šipka Kniha 3D Více o ebooku ...

TOPlist Licence Creative Commons webarchiv rss XML

Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2016 | 42774

Tento web zatím neprošel jazykovou korekturou. Beta verze redakčního systému.