» Poradna » Programy

Výběr buněk Excelu ve VBA

 |   | 

Triviální věc (ale ne pro mě)Mám oblast buněk. Např B6:Gn na listu 2. Nyní potřebuji vybrat oblast buněk na jednom řádku (a postupně na všech obsazených), překopírovat do zvolených buněk na listu 1. Na tomto listu probíhají výpočty a výsledky se překopírují na list 2 vedle vybraných buněk na tomtéž řádku.Postup:1, výpočet počtu obsazených řádků oblasti a zvolení počátečního řádku s první oblastí.2, výběr oblasti buněk na 1. obsazeném řádku a překopírování do listu 1.3, Překopírování výsledku do listu 2 a zvýšení čísla řádku o 1. Pak opět body 2 a 3 až k dosažení poslední oblasti.Body 1 a 3 mám v pořádku. Problém je s bodem 2. Pokud by šlo použít Range, byl by zápis asi něco jako:   Range("B č.řádku : G č.řádku").Select  . Nevím ale, jak zadat č. řádku.Objevil jsem v jedné knize způsob výběru od zvolené buňky až k poslední obsazené buňce vpravo, což má vypadat asi nějak takhle:  Range("B6,Range("B6").End(xlToRight)).Select Bohužel jako samouk nejsem schopen si s tím poradit. Vhodnější by asi bylo použít Cells(*,*) - jenom vědět jak...Prosím o doslovný zápis a ne jenom o slovní doporučení. Díky.

Mohlo by vás také zajímat

Odpovědi na otázku

 |   | 

Těžko radit - málo vstupních údajů (co je pevně dané, co se může měnit, co je před výpočtem, co po výpočtu)Ale aspoň něco.U slovíčka RANGE ve VB mám zkušenost, že nemá rád jako parametr proměnnou.Ale u CELL už to tolik nevadí.Příklad:zadefinuješ NBuď zapíšeš CELLS(N, 1).Select - pro buňkunebo Range(Cells(N, 1), Cells(N, 5)).Select - pro oblastN se dá výhodně přiřadit příkazem pro pozdější tvoje využitíN = Selection.Row (adresa řádku označené buňky)Potom třeba výběr oblasti (asi jen řádku - z tvého zadání není zřejmé) by bylo:Range(Cells(N, 6), Cells(N, ?)).SelectOtazník mám, protože zase nevím ze zadání, jestli je vždy výběr stejně "široký" - má konstantní počet sloupců.A teď k tvému bodu 2 a jeho řešení:sice chceš přesně zápis a ne doporučení - stejně ti dám jen doporučení,(není nad pocit vyřešeného problému vlastní pílí a dal jsi málo informací)Silně záleží při řešení na tom, zda výsledky předchozího řádku ovlivňují vstupy dalšího řádku, nebo data na 2.listě jsou jen vstupní neměnné a vedle nich budou výsledky ovlivněné vzorci z 1. listu.Zatím pro tu jednodušší verziV zadání píšeš, že znáš počet řádků oblasti na 2.listě (třeba to bude X)a pozici počátečního řádku (bude třeba N)Část těla makra:na PRVNÍM listě označit pozici, kam se bude vkládat 1. oblastna druhém listě označit pozici 1. vybrané oblastiN = Selection.Rowaktivace listu 2z výše uvedených příkladů označíš a zkopíruješ na 2. listě "svoji" oblast příkazemRange(Cells(N, ?), Cells(N+X, ?)).Copy (otazníky si doplň sám)aktivace listu 1vložení nakopírované oblasti (.PASTE) 

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Doplnění:Obsah buněk v oblasti na listu 2 je pevný a napravo od vybrané oblasti na témže řádku se ukládají výsledky získané ze vzorců na listu 1. Na list 1 se kopírují vybrané oblasti vždy na stejné místo. Funkce kterou požaduji bych přirovnal k rozšířenému filtru, kde se výsledky kopírují jinam. Protože je ale spousta "šablon" podle kterých se "filtruje" potřebuji proces automatizovat, tak aby se porovnal obsah na 1. řádku oblasti, vyhodnotil na listu 1 a výsledek z listu 1 překopíroval na list 2 napravo od testované oblasti. Poté má prvověřit vybrané oblasti buněk na všech zbývajících řádcích Myslím, že  navrhované řešení  Range(cells(N,?),cells(N+X,?)) by mělo být to co potřebuji. Vyzkouším.  Díky.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   | 

Ty chceš kopírovat celé ŘÁDKY nějaké oblasti. Celý řádek dostaneš přes Rows(index). Když chceš tedy zkopírovat PRVNÍ řádek nějaké oblasti (třeba B6:G13), tak to vypadá takto:Dim oblast As RangeSet oblast = Worksheets("list_s_daty").Range("b6:g13")oblast.Rows(1).Copy Worksheets("jiny_list").Cells(5, 5)Pro druhý řádek tam bude oblast.Rows(2) atd. Chňápeš?

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Oblast, Dosažení, Samouk