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 » precti-udaj-do-bunky-excel-vba

Excel VBA - přečti údaj z buňky


... jak přečíst údaj z buňky ... - doplněno 31.7.2015

Úvodem - co se naučíte

Microsoft Excel logo

Jak z konkrétní buňky přečíst hodnotu? V následujících příkladech jsou uvedeny možnosti, kterými lze provést. Ať už jde o přečtení požadované hodnoty z buňky na uktuálním listu v právě otevřeného sešitu. Až po načítaní dat z jiných sešitů. Pro přehlednost je článek rozdělen na jednotlivé kapitoly:

Ukázka

Excel VBA - přečti úudaj z buněk

Možnosti načtení pomocí VBA

Pro přečtení údajů z buňky lze použít:

  • Value - může docházet ke ztrátě přesnosti, jelikož přebíra formátování (datum, měna, čas,...).
  • Value2 - přesnějším u data a měny zobrází číslo, bez ztráty přesnosti
  • Text - zobrazí přesně co je v buňce

Dále lze přečíst vzorec pomocí Formula.

Praktické použití načtení

Víc než slova pomohou příklady, takže tady jsou:

a = Range("A1").Value

Nebo:

a = Range("A1").Value2

Nebo:

a = Range("A1").Text

Pro textování lze použít výpis do dialogového okna: V buňce B3 stačí měnit hodnoty a po spuštění kódu pozorovat jak se mění v závislosti na Value, Value2, Text. Zluste na datumu 31.12.2012, kdy tento bude v buňce mít formát "mm.ddd.rrrr" tj. 12.po.2012

' v B3 je 31.12.2012 formátováno "mm.ddd.rrrr" tj. 12.po.2012 MsgBox "Hodnota Value B3 = " & Range("B3").Value '31.12.2012 MsgBox "Hodnota Value2 B3 = " & Range("B3").Value2 '41247 MsgBox "Hodnota Text B3 = " & Range("B3").Text '12.po.2012

Cells / Range

Využití Cells místo Range

b = Cells(2, 2).Value

Využití Cells v Range

b = Range("B2:C3").Cells(1, 1).Value

aneb pokud je potřeby vybrat buňku z oblasti. Lze využít napřílad v cyklech For.

Načítaní z pojmenované buňky

Pokud je nějaká buňka pojmenována pokus

c = Range("pokus").Value

Opět místo Value, lze podle požadavku využít Value2, Text, Formula....

Načítaní z jiných listů

Praktické načítaní z dalších listů

a = Worksheets(2).Range("A1").Value b = Worksheets(2).Cells(2, 2).Value c = Worksheets(2).Range("pokus").Value

Případně podle názvu listů:

a = Worksheets("List2").Range("A1").Value b = Worksheets("List2").Cells(2, 2).Value c = Worksheets("List2").Range("pokus").Value

Přečíst údaj z jiného sešitu

Předpolad sešit existuje. Nejprve jej otevřete, přečtete hodnotu a zase zavřete.

Application.Workbooks.Open ("D:\test.xlsx") Hodnota = Workbooks("test.xlsx").Worksheets("List1").Range("A1").Value Workbooks("test.xlsx").Close MsgBox (Hodnota)

Podrobněji jak otvírat sešity pomocí VBA (například zaheslované) v článku: Otevřít soubor s heslem - Excel VBA.

Přečíst vzorec

Přečte vzorec uvedený v buňce

MsgBox "Hodnota Formula B15: " & Range("B15").Formula

Poznámka: zobrazený vzorec bude s anglikými názvy funkcí!


Pokud chcete dostat vzorec s českým (lokálním) názvem funkce.

MsgBox "Hodnota Formula B27: " & Range("B27").FormulaLocal
Microsoft Excel VBA - stahuj logo

Ke stažení

Soubor Přečíst údaje v buněk - praktické příklady - Excel VBA soubor ve formátu *.xlsm ke stažení zdarma. Soubor využívá makra.


Závěrem

Máte nějaký zajímavý kód na čtení z buněk? Můžete doplnit do komentářů. Souvisecicí téma dolním opět do článku.

Článek byl aktualizován: 31.07.2015 10:16

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


xlnc

Přidáno: 07.01.12 16:15

V článku jde spíš o to, jak přistupovat k buňce. K tématu čtení by bylo vhodnější uvést vlastnosti Value, Value2 a Text.

Pavel Lasák

Přidáno: 07.01.12 17:32

To xlnc: Děkuji doplněno. PS: Ještě doplnim o excelovský soubor s příklady ať je jasnější.

George

Přidáno: 24.04.12 08:48

Ahoj, řeším následují problém: Mám dva excel soubory (Excel1.xls a Excel2.xls). Oba soubory otevřu a v souboru Excel1 spouštím makro, které provádí výpočty nad Excel1. Problém je, že cca v půlce té výpočetní funkce potřebuji načíst hodnotu ze souboru Excel2 a zase se vrátit k výpočtům nad Excel1. Windows("Excel2").Activate Promenna = Range("A1").Offset(0, I).Value Windows("Excel1").Activate Problém je, že Excel2.xls se mi sice aktivuje, ale do proměnné se mi stále načístá buňka z Excel1. Poradíte mi, jak na to? Už jsem z toho šedivý... (pozn. nechci si vytvářet speciální funkci, kterou bych zavolal uvnitř této funkce a ta by sloužila pouze k načtení této proměnné z druhého excel souboru). Děkuju moc

Marek

Přidáno: 04.01.13 15:40

Dobrý den, prosím o pomoc s následujícím problémem. Potřebuji sečíst sloupec hodnot, u kterého neznám konečný počet buněk (řádků). Hodnoty jsou textové, protože obsahují kladné i záporné časy (5:00; -2:30;...). Představu mám takovou, že ty časy převedu na minuty a ty poté přičtu či odečtu od konečného výsledku a ten opět převedu na formát hh:mm. Bohužel nevím, jakým způsobem vybrat ty buňky a aplikovat na ně tuto funkci. Děkuji za nápovědu.

Pavel Lasák

Přidáno: 04.01.13 21:31

To George: Například: Application.Workbooks.Open("D:\slozka\file.xls") Hodnota = Workbooks("file.xls").Worksheets("List1").Range("A1").Value Workbooks("file.xls").Close MsgBox (Hodnota)

Pavel Lasák

Přidáno: 04.01.13 21:43

To Marek: Například počet buněk zjistít funkcí POČET viz http://office.lasakovi.com/excel/funkce/ms-excel-funkce-statisticke/ oblast poté vybrat funkcí POSUN http://office.lasakovi.com/excel/funkce/posun-offset-funkce-excel/

Richard Hrdlička

Přidáno: 23.01.13 14:28

Ahoj, prosím o pomoc. mám sloupec vypadající následovně název sloupce hodnota A1 PROxxxx1 A2 SPPxxxx1 A3 SPPxxxx1 A4 PROxxxx2 potřeboval bych napsat makro, které na dalším listě vyhledá hodnotu PROxxxx1 a následně jí zapíše. Pak skočí o buňku níž a zapíše hodnotu PROxxxx2. Pokud tedy narazí na hodnotu SPP nic neudělá a zůstane v dané buňce. Výsledek tedy bude: A1 PROxxxx1 A2 PROxxxx2

Richard Hrdlička

Přidáno: 23.01.13 15:59

název sloupce A1.....Ax a v nich hodnoty PROxxxx a SPPxxxx

Jana

Přidáno: 09.08.13 07:36

Dobrý den, prosím o radu. Mám excel soubor, do kterého si vygeneruji data na 3000 řádků. Ta mají podobu jedné dlouhé směsi různých znaků, nejen písmen (představte si celou dlouhou větu zapsanou pouze v buňce A1). Potřebuji z tohoto shluku zjistit, zda se někde v řádku nevyskytuje určité slovo a v případě, že ano, chci celý řádek smazat. Na každém řádku se toto slovo může vyskytovat na odlišné pozici v textu. swkuji

Pepan

Přidáno: 16.09.13 22:33

Dobrý den, s makry začínám a rád bych poprosil o pomoct s následujícím: zapsat odkaz na buňku, která je definována pozicí řádky a sloupce - pokouším se to definovat následovně: RadekBunky = 3 SloupecBunky = 4 Buňka = Workbooks("file.xls").Worksheets("List1").Cells(RadekBunky, SloupecBunky) (makro je samozřejmě zjednodušené) Bohužel, v tomto příkazu se mi proměnná "Buňka" zobrazuje jako chybná. Poradíte mi, prosím, kde dělám chybu? Děkuji.

Špacír

Přidáno: 07.02.14 09:47

Ahoj, Potřebuji poradit s následujícím problémem. Chci získat součet hodnot v daném sloupci. Tyto hodnoty ovšem nejdou souvisle za sebou. Uvedu na příkladu. Ve sloupci "C" jsou uvedeny různé druhy ovoce a zeleniny Ve sloupci "D" je uvedeno prodané množství jednotlivých komodit. Ve sloupci "B" je označení, že se jedná o "Ovoce" a "Zelenina". Mým cílem je získat součet prodané zeleniny a zvlášť prodaného ovoce. díky za radu

Pavel Lasák

Přidáno: 08.02.14 11:49

To Špacír: Doporučuji funkce countif, nebo COUNTIFS http://office.lasakovi.com/excel/funkce/countifs-funkce-statisticke-excel/

Špacír

Přidáno: 12.02.14 13:35

Pavle, děkuji za radu. Měl jsem ale na mysli vyřešit to v prostředí VBA. Když vezmu v úvahu, že tento seznam (tabulka) nemá konstantní velikost, ale že se průběžně (denně i několikrát) doplňuje a to v průběhu celého roku a tím se mění počet řádků, tak by se buňka s touto funkcí musela posouvat a neustále aktualizovat oblast, se kterou se pracuje. Je možné to vyřešit nějakým makrem tak, aby se uvedená oblast automaticky aktualizovala? Výstup může být prostřednictvím nějakého formuláře ve VBA, nebo pomocí MsgBox, nebo může být umístěn někam na libovolný list, nebo ... Díky

Pavel Lasák

Přidáno: 12.02.14 17:42

To Špacír: Lze, budu-li mít chuť tak napíšu nějaký článek.

Špacír

Přidáno: 13.02.14 10:59

Pavle, mohu Tvojí chuť k vypracování řešení něčím podpořit?

Pavel Lasák

Přidáno: 16.02.14 06:54

To Špacír: Zajistit aby den měl 26 hodin.

Martin

Přidáno: 02.04.14 20:16

Dobrý den, prosím moc o pomoct. Nikde sem nenašel příbuzný článek a nebo jsem to nepochopil :) tak píši sem. Potřebuji si vytvořit makro pro vyhledávání z databáze o předem neznámém počtu řádku. v životě jsem v VBA (makra pro Excel) nedělal po přečtení vašich stánek jsem vytvořil všechna ostatní makra jen tohle mi chybí. Teoreticky by to šlo nějak takto: Sub vyhledej () z = 2 x = 2 zacni: x = x + 1 Worksheets ("databáze").select Activesheet.Range ("B" & x).Select If Active cell = "" Then End Else GoTo porovnej End If porovnej: Worksheets("databáze").Select Activesheet.Range("B" & x : "S" & x) .select Nevím jak udělat tento výběr If Activecell = ("A2") Then ("A2") je z Listu ("vyhledávání") tak co s tím? GoTo uloz Else GoTo zacni End If Nevím jestli takto porovná celou oblast ("B" & x : "S" & x) s ("A2") a nebo buňku po buňce. Já potřebuji Buňku po buňce. uloz: z = z + 1 Worksheets ("databáze").Select Range ("B" & x : "S" & x).Copy Worksheets ("vyheldávání").Select Activesheet.Range ("B" & z : "S" & z).select Activesheet.Paste GoTo zacni End Sub potřeboval bych to do školy (na BC práci)

CernyDuch

Přidáno: 02.04.14 21:18

TO Martin: Jelikož jsem řešil něco podobnýho, tak bych doporučil nejdříve udělat vyhledávání v rámci jednoho řádku a pak to aplikovat na celou tabulku, respetive pak pouzijes cyklus for kde bude figurovat konecny pocet radku, ktery bude v promenne

Martin

Přidáno: 03.04.14 13:21

Aha dík, jen jak to udělám ? :D a hlavně nevím jak porovnat obsah vybraných buněk z jednoho listu s údajem z buňky z druhého listu. Nevíte co s tím ?

Špacír

Přidáno: 13.08.14 12:25

Ahoj Pavle, Nenápadně se připomínám s dotazem, který jsem měl 7.2. 2014. Týká se to součtu hodnot v nesouvislé oblasti pomocí VBA. Chci se zeptat, zda už je chuť napsat nějaký článek na toto téma? :-) díky

Pavel Lasák

Přidáno: 13.08.14 20:12

To Špacír: Chuť by byla, ale více zájmu je o jiné oblasti a čas který mám vymezen Excelu je omezený.

Jojo

Přidáno: 18.08.14 07:56

To Špacír: V bunkách bude treba treba dodržať veľkosť písma alebo doplniť tento kód Sub Test() Dim rw, druh, mn, Ovoce, Zelenina, Ine For rw = 1 To 10 druh = Cells(rw, "B") mn = Cells(rw, "D") If druh = "Ovoce" Then Ovoce = Ovoce + mn ElseIf druh = "Zelenina" Then Zelenina = Zelenina + mn Else Ine = Ine + mn End If Next rw MsgBox "Ovoce: " & Ovoce & vbCrLf & "Zelenina: " & Zelenina & vbCrLf & "Iné: " & Ine End Sub

Láďa

Přidáno: 22.09.14 15:39

Ahoj, prosím o radu. Mám vytvořen soubor a do něj potřebuju vložit jednu hodnotu z tří různých sešitů. Každý sešit nese název měsíce a já potřebuju, aby se data nahrávala pouze z posledních tří měsíců. To znamená, když bude měsíc září, tak aby se data vkládala ze sešitů červen, červenec, srpen. Je to vůbec možné? Děkuji

Jojo

Přidáno: 23.09.14 12:11

To Láďa: -- Sub Read_3Month() 'Načíta údaje zo súborov 3 mesiace dozadu 'Názov načítaných súborov: "MesiacROK.prípona" napr. "092014.xls" (Mesiac+Rok sú čísla) Dim myDir, fn, Datum, M, Y myDir = ThisWorkbook.Path ' adresár ak je súbor s týmto makrom umiestnený spoločne so súbormi "MesiacRok" Datum = Now M = Month(Datum) ' mesiac (číslom) Y = Year(Datum) ' rok (iba posledné dve číslice) For i = 1 To 3 ' počet načítaných mesiacov M = M - 1 If M = 0 Then M = 12 - M: Y = Y - 1 ' pre mes = 1,2,3 zmeniť aj rok End If If M < 10 Then M = "0" & M ' ak mes < 10 doplniť "0" fn = M & Y ' FileName Range("A" & i).Formula = "='" & myDir & "\[" & fn & "]List1'!A1" ' "List1" zmeniť podľa potreby Next i End Sub

Kája

Přidáno: 26.11.14 19:01

Ahoj, řeším následující: vytvářím VBA aplikaci pro evidenci cd a knih potřeboval bych vytvořit makro pro vyhledání řádku a překopírování z listu DATA do listu HLEDAT. CD a knihy by měly být evidovány pod ID v listu DATA. za jakoukoliv radu předem děkuji. PS: můžete i na mail karel@honsig.eu

Jojo

Přidáno: 01.12.14 09:04

To Kája: -- rwID = Application.Match(ID, Sheets("DATA").Range("a1").EntireColumn, 0)

Stoupa

Přidáno: 11.02.15 19:47

Zdravím, řešil jsem menší problém - přečíst údaj z jiného sešitu (ale bez jeho otevření). Řešení jsem nalezl na http://spreadsheetpage.com Využití vlastní funkce GetValue. Tedy snad se bude někomu hodit: Přečte údaje z vybrané oblasti a zapíše je do aktivního listu Private Function GetValue(path, file, sheet, ref) Dim arg As String If Right(path, 1) <> "\" Then path = path & "\" If Dir(path & file) = "" Then GetValue = "File Not Found" Exit Function End If arg = "'" & path & "[" & file & "]" & sheet & "'!" & _ Range(ref).Range("A1").Address(, , xlR1C1) GetValue = ExecuteExcel4Macro(arg) End Function Sub TestGetValue() p = "C:\Users\xxxx\Desktop" f = "Sešit1.xls" s = "List1" Application.ScreenUpdating = False For r = 3 To 3 For c = 3 To 3 a = Cells(r, c).Address Cells(r, c) = GetValue(p, f, s, a) Next c Next r Application.ScreenUpdating = True End Sub Případně jen přečte údaje z vybrané buňky a a zobrazí je v MsgBoxu: Sub TestGetValue1() p = "C:\Users\xxxx\Desktop" f = "Sešit1.xls" s = "List1" a = "C3" MsgBox GetValue(p, f, s, a) End Sub

Karel

Přidáno: 24.02.15 14:11

Dobrý den, chtěl bych Vás požádat o radu. Snažím se filtrovat položky v jedné buňce, které jsem si s pomocí funkce rozhodil po jedné do různého počtu sloupců. V tomto stavu se snažím použít for cyklus pro filtrování. Ten For cyklus nepracuje jak má, bere v úvahu jen hodnoty v prvním sloupci ze všech nově vzniklých. Prozatím se snažím zprovoznit samotný for cyklus. Zde je můj kód: Sub PraceSProdukty() Dim rng As Range, cellSloupec As Range, cellRadek As Range Set rng = Range("I18:U22") For Each cellRadek In rng.Rows For Each cellSloupec In cellRadek.Cells If cellSloupec.Text = "S_CRM" Then Range("G5").Value = "???" End If Next cellSloupec Next cellRadek End Sub

Marcel

Přidáno: 29.03.15 14:55

Dobrý den, chtěl bych Vás požádat o radu. Potřebuji vytvořit .pdf dokument, který se bude jmenovat podle textu v buňce. k čemuž jsem použil toto:

'přiřazení hodnot' a = Range("B54").Text soubor = "c:\Users\Uživatel\Downloads\excel\test pdf\" & a & ".pdf" 'vytvoření pdf' ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ soubor, Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False

jenže teď do toho ještě potřebuji, aby se mi hodnota ve fci Range("B54").text zvyšovala o jedna do hodnoty X.

Jarda

Přidáno: 26.05.15 08:36

To Karel Kod jsem upravil takto Sub PraceSProdukty() Dim rng As Range Range("I18:U22").Select Set rng = Selection.Find(What:="S_CRM") If Not rng Is Nothing Then Range("G5").Value = "???" rng.Select End If End Sub Pokud nebude vyhovovat dal by se upravit vas puvodni jeste jinak. Vas kod jsem upravil podle odkazu http://office.lasakovi.com/excel/vba-listy-bunky/find-hledej-excel-vba/

Jarda

Přidáno: 27.05.15 23:23

To Marcel Jelikož nevím co máte v buňce B54 za text, tak předpokládám, že to bude číslo, když ho chcete zvyšovat o jedničku. For x = 1 To 10 a = Range("B54").Text a = a + 1 Range("B54").Value = a soubor = "c:\Users\Uživatel\Downloads\excel\test pdf\" & a & ".pdf" 'vytvoření pdf' ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= soubor, Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=False Next x Ve smyčce For To Next mužete max hodnotu 10 změnit podle uvážení, kolikrát se má celá smyčka opakovat.

Roman

Přidáno: 05.10.15 19:35

Hezký den, prosím o radu a pomoc s následujícím problémem. V jedné buňce mám vložený hypertextový odkaz a do vedlejší buňky bych potřeboval vložit URL adresu tohoto odkazu jako prostý text. Děkuji

Tomáš

Přidáno: 06.04.16 15:15

Dobrý den, chtěl bych vás poprosit o radu na odkazování. Potřebuji vytvořit makro, v němž se mimo jiné v průběhu odkáži na buňku, pod kterou jsem pracoval. Například jsem v A1(něco se zde stane) a potřebuji přepnout do A2(a zde se opět v rámci makra něco stane. Chtěl bych, aby však odkaz z prvotní buňky na buňku pod ní byl proměnnou, aby se dal uplatnit kdekoliv. Když aktuálně vybraná oblast je Selection, lze nějak obecně zapsat jak označím buňku nacházející se hned pod Selection? Děkuji

Zbyněk Škoda

Přidáno: 01.08.16 08:15

Zdravím, prosím o radu, jak napsat zorec ve VBA, když potřebuji: Z jednoho sloupce vybrat nenulové hodnoty a překopírovat je do sloupce o jeden vlevo. Děkuji

Kamil

Přidáno: 11.10.16 12:36

Dobrý den. Umí někdo poradit prosím? Jakým způsobem (vzorcem) je možno rozdělit číslo, aby zustala zachována jeho funčnost, tj. aby jej nadále akceptovalo při vyhledávaní pomocou vzorce mezi jednotlivými listy. Příklad: Naskenuji čárový kód, v bunce se zobrazí 545 333 666 BB APC 02X00000. Potřebuji to oddělit tak, aby zůstalo 545 333 666 BB APC (vše další za C nepotřebuji) a mezery byly zachovány i v připadě, že odststraním jedno, nebo obě B. Tz. když nebude pismeno, nahradí jej prázne místo. Zkoušel jsem ZLEVA, ZPRAVA... a moc mně to nefungovalo. Děkuji


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 | 44128

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