Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
Označit buňku pomocí SELECT, ale jak na to, čtěte dále.
Nově doplněno 13.12.2018 - dynamicky jiný list
V tomto článku jsou představeny tyto kódy:
V našem případě potřebujeme označit buňku B3
ActiveSheet.Range("B3").Select
nebo
ActiveSheet.Cells(3, 2).Select
Poznámka: při vybíraní přes Cells je nejprve řádek a poté sloupec.
Nejednoduši je využít toho co víme. Takže se do sešitu (v našem příkladě List5) přepneme a použijeme příkazy dle předchozího odstavce.
Sheets("List5").Activate
a pak je to jasné pro buňku B3
ActiveSheet.Range("B3").Select
´ nebo
ActiveSheet.Cells(3, 2).Select
Nebo využít Application.Goto
Application.Goto ActiveWorkbook.Sheets("List2").Cells(3, 2)
nebo pomocí Range
Application.Goto (ActiveWorkbook.Sheets("List2").Range("B3"))
Napřiklad sešit pokus.xls na listě "List2"
Workbooks("pokus.xls").Sheets("List2").Activate
a klasicky co je jasné, pro buňku B3
ActiveSheet.Range("B3").Select
´ nebo
ActiveSheet.Cells(3, 2).Select
Nebo využít Application.Goto
Application.Goto Workbooks("Sešit2.XLS").Sheets("List1").Cells(3, 2)
´ nebo
Application.Goto Workbooks("Sešit2.XLS").Sheets("List1").Range("B3")
Budeme vybírat oblast C3:E11 na aktivním listě, lze použít:
ActiveSheet.Range(Cells(3, 3), Cells(11, 5)).Select
´ nebo
ActiveSheet.Range("C3:E11").Select
´ nebo
ActiveSheet.Range("C3", "E11").Select
Sepsáno v článku: Range objekt - oblast buněk
Budeme vybírat oblast C3:E11 na listu "List5"
Application.Goto ActiveWorkbook.Sheets("List5").Range("C3:E11")
´ nebo
Application.Goto ActiveWorkbook.Sheets("List5").Range("C3", "E11")
Nebo se přepnout do Listu5 a použít předchozí příklad (List5 bude aktivním listem)
Sheets("List5").Activate
Vybereme na v sešitu muj.xls na listě List3 oblast C3:E11.
Application.Goto Workbooks("muj.xls").Sheets("List3").Range("C3:E11")
´ nebo
Application.Goto Workbooks("muj.xls").Sheets("Listt3").Range("C3", "E11")
Nebo se přepnout do sešitu muj.xls na List3 a použít předchozí příklad (List3 bude aktivním listem)
Workbooks("muj.xls").Sheets("List3").Activate
Potřebuji dynamicky označovat oblast na jiném listě. Například pro kopírování atd.
Range("B10:C13").Select
Range("B10", "C13").Select
Range(Cells(10, 2), Cells(13, 3)).Select
Klasika je jasná ale při použití Cells musí Excel vědět na kterém listě. Což je možno provést:
Sheets("Jiny").Activate
' problém nebude vědět, kde je Cells (2,2)
' Sheets("Jiny").Range(Cells(2, 2), Cells(13, 3)).Select
Pokud uvedeme kde, zafunguje:
Sheets("Jiny").Activate
Sheets("Jiny").Range(Sheets("Jiny").Cells(2, 2), Sheets("Jiny").Cells(13, 3)).Select
Sheets("Jiny").Activate
ActiveSheet.Range(ActiveSheet.Cells(2, 2), ActiveSheet.Cells(7, 4)).Select
' řádky a sloupce lze zadávát dynamicky
Dynamicky
Radek_zacatek = 2
Sloupec_zacatek = 2
Radek_konec = 7
Sloupec_konec = 4
Sheets("Jiny").Activate
ActiveSheet.Range(ActiveSheet.Cells(Radek_zacatek, Sloupec_zacatek), _
ActiveSheet.Cells(Radek_konec, Sloupec_konec)).Select
A doplnění o nasetování daného listu:
Dim sht As Worksheet
Set sht = Sheets("Jiny")
sht.Activate
sht.Range(sht.Cells(2, 2), sht.Cells(7, 4)).Select
A případně ještě dynamicky pozici...
Máme oblast pojmenovanou Test. A tuto chceme vybrat.
Range("Test").Select
Podobně můžeme pojmenovanou oblast vybírat na jiném listě, či v jiném sešitu. Což předpokládám není potřeba rozvádět. Pokud tyto požadavky budou v komentářích doplním do článku.
Zjistit, které buňky jsou označeny a vypsat je nebo uložit do proměné.
Dim Bunka As Range
For Each Bunka In Selection
MsgBox "Vybraný řádek je " & Bunka.Row
MsgBox "Vybraný sloupec je " & Bunka.Column
'uloz do promene: pokus = Bunka.Row
Next Bunka
Do označených buněk zapiš požadovaný text. Například: http://office.lasakovi.com
Dim Bunka As Range
For Each Bunka In Selection
Bunka.Value = "http://office.lasakovi.com"
Next Bunka
Jak zapisovat data do buněk je popsáno v samostatném článku:
Soubor Select - Jak vybrat označit buňky - praktické příklady - Excel VBA ke stažení zdarma. Soubor využívá makra. Pro Excel 2007 a vyšší.
Pokud už máte buňku (oblast) označenou můžete s ními dále pracovat například
Máte nějaké zajímavé kódy, týkající se tématu označování buněk (oblastí) v Microsoft Excelu pomocíc VBA? Můžete se pochlubit v komentářích.
Článek byl aktualizován: 19.09.2020 11:06
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.
Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.
Přidáno: 20.02.13 13:56
Zdravím, potřeboval bych udělat makro pro tvorbu kontingeční tabulky z libovolně vybraných dat. Pokud zaznamenám makro při tvorbě tabulky, tak dostanu toto: ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "Sheet1!R1C1:R8C3", Version:=xlPivotTableVersion12).CreatePivotTable _ TableDestination:="Sheet1!R8C14", TableName:="PivotTable3", DefaultVersion _ :=xlPivotTableVersion12 Sheets("Sheet1").Select Cells(8, 14).Select ActiveWorkbook.ShowPivotTableFieldList = True atd. Předpokládám, že bude potřeba upravit tuto část kodu - SourceData:= _ "Sheet1!R1C1:R8C3" - ale nevím správnou syntaxi pro libovolný výběr dat. Prosím, můžete mě navézt, jak na to?
Přidáno: 20.02.13 15:56
Tak nakonec vyřešeno ;) Dim rozsah As Excel.Range Set rozsah = Selection ..... SourceData:= _ rozsah .....
Přidáno: 21.02.13 15:02
Narazil jsme však na jinou věc - je možné, abych po spuštění makra dostal nějaké dialogové okno, které by mi umožnilo vybrat oblast buněk, ze kterých se kontingeční tabulka vytvoří? Možnost InputBox fungovat nebude, ale je nějaká jiná možnost, jak toho docílit?
Přidáno: 21.02.13 16:11
To Filip: Spustit průvodce pomocí Application Dialogs, nevyhovuje?
Application.Dialogs(xlDialogPivotTableWizard).Show
Více http://office.lasakovi.com/excel/vba-application/excel-vba-application-dialogs-/
Přidáno: 21.02.13 18:20
Funguje to, jen se musí vždy nadefinovat samotná tabulka. Je to možné i jinak? Aby mi stačilo jen zadat vstupní data a zbytek už mám nadefinováno a udělá se automaticky? Plně mi stačí původní verze, tohle je čistě jen ze zájmu :)
Přidáno: 14.07.13 15:09
Dobrý den, resim automaticke zpracovani sjetiny z vetsiho objemu dat(databaze vykonu), cca 10 sloupcu a 1000radku a nemuzu si poradit s nasledujici situaci: Cela oblast je jako tabulka, kde dle jednoho sloupce setridim data vzestupne, z druheho vyberu disciplinu, a jde mi o to at se do tabulky pridaji jakekoliv dalsi data, aby se vzdy z tohoto vyberu vykopirovalo prvnich 10 radku nekam jinam. Ovsem narazim na problem jak excelu vysvetlit ze mi je jedno jake cisla maji bunky. Prosim o radu Dekuji
Přidáno: 14.07.13 20:12
To Míra: Pokud máte výbranou buňku přečíst požadovaný údaj z buňky a poté zapiš údaj do buňky .
Přidáno: 15.07.13 16:03
Omlouvam se, asi jsem se nepresne vyjadril...jde mi spise o to ze pomoci filtru pokazde jine radky - pro nazornost jednou to budou radky 1-10 po druhe treba 1,5,12-20..a potreboval bych aby kopirovani fungovalo vzdy na prvnich 10 radku dle filtru, tj nikdy nebudu vedet presne jake budou bunky ktere budu chtit kopirovat.
Přidáno: 15.07.13 16:09
To Mira: Excel nějak potřebuje vědět, které buňky, musí být splněna nějaká podmínka. Pokud vyhovuje podmínce, která se dá do cyklu pro i= 1 to 10, ať nakopíruje prvních 10 řádku vyhovujících podmínce.
Přidáno: 22.10.13 16:37
není v posledním programu chyba v cyklu for bunka next c?
Přidáno: 26.10.13 19:51
To Leo: Byla tam chyba. Správně má být Next Bunka, už je opraveno. Díky za upozornění.
Přidáno: 14.01.14 13:32
Dobrý den, chtěl bych se zeptat, chci od makra, aby mi vykopírovalo buňky po filtru (filtrem vyřadím pouze hodnoty s nulou). Makro bohužel při dalším použití vyfiltruje jen některé nenulové hodnoty. Když makro otevřu (nejsem programátor), tak vidím, že v něm jsou vypsány konkrétní hodnoty, ale já potřebuji, aby se jednalo vždy o všechny nenulové. Zápis vypadá takto: ActiveSheet.Range("$J$1:$P$113138").AutoFilter Field:=3, Criteria1:=Array( _ "1.17954", "1.18064", "1.18196",.... "1.28655", "="), Operator:= _ xlFilterValues Lze jej změnit na výběr všech nenulových? Díky
Přidáno: 28.05.14 13:05
Dobrý deň, snažím sa vytvoriť makro na generovanie objednávok. V jednom sheete sa do tabuľky zapisujú potrebné údaje, ktoré obsahuje objednávka, no nemôžem prísť na to ako v kóde zabezpečím aby mi vždy generovalo objednávku z posledného zapísaného riadku v tabuľke. Už som fakt zúfalý
Přidáno: 10.07.14 08:50
To Lukáš: Ak je v poslednom riadku vždy vyplnená bunka v stĺpci "A", tak: -- rwLast = Range("A" & Rows.Count).End(xlUp).Row
Přidáno: 24.10.14 21:47
To Lukáš: Více o práci s řádky sloupci v samostatném článku: práce s řádky a sloupci VBA kody
Přidáno: 03.03.15 09:27
Dobrý den, pročetl jsem vaše návody, co se týče maker v oblasti výběru buněk. Možná jsem to přehlédl, ale nenašel jsem tam výběr a označení buněk s nenulovou hodnotou. Mám seznam o počtu 5-ti sloupců a x-řádků (ty se mění ). Chtěl bych, aby se automaticky označila oblast těch 5-ti sloupců a x řádků (tj. vybrat oblast s neprázdnými bunkami, kde neznám přesnou oblast). Je to vůbec možné? Za odpověd předem děkuji.
Přidáno: 03.03.15 09:39
už jsem to našel, omlouvám se, ale i tak jste pro mě super napověda......
Přidáno: 11.01.16 09:20
Ahoj Pavle,
vytvořil jsem si makro na rychlé vkládání a ořezávání obrázků (pomocí printscreenu) do sloučené buňky přizpůsobené velikosti:
Sub Makro9()
'
' Makro9 Makro
'
'
ActiveSheet.Unprotect Password:="123"
Range("G10:N38").Select
ActiveSheet.Paste
Selection.ShapeRange.ScaleHeight 0.64, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.PictureFormat.CropTop = 100
Selection.ShapeRange.PictureFormat.CropBottom = 100
Selection.ShapeRange.PictureFormat.CropLeft = 290
Selection.ShapeRange.PictureFormat.CropRight = 290
Selection.Cut
ActiveSheet.Paste
Range("F10").Select
ActiveSheet.Protect Password:="123"
End Sub
Vše funguje k mé spokojenosti, ale pokud pošlu soubor k využití kolegům, mají rozhozené měřítko.
Musím jim ho nastavit jinak a nemůžeme tak sdílet stejné makro.
Proč k tomu dochází? A lze to nějak ošetřit, aby se měřítko v makru nemuselo nastavovat pro každý počítač extra?
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
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 - 2024 |