Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
... jak přečíst údaj z buňky ... - doplněno 31.7.2015 a 29.11.2018
Opravdu víte co potřebujete přečíst (na první pohled jednoduchý dotaz, na druhý zjistíte, že na údaje v buňce se můžete divat různými způsoby).
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 aktuálním listu z právě otevřeného sešitu. Až po načítaní dat (hodnota, vzorec, ...) z jiných sešitů. Pro přehlednost je článek rozdělen na jednotlivé kapitoly:
Víc než teoretická slova pomohou praktické příklady, takže tady jsou:
V buňce A1 může být vzorec například =DNES()+A5 a buňka naformátovaná vlastní formátem.
Value: Základní načtení dat (pokud jde o datum načte se základní lokální nastavení Excel pro ČR mm.ddd.rrrr:
a = Range("A1").Value
' nebo úplně bez udané vlastnosti
a = Range("A1")
' případně si přímo zobrazit v MsgBoxu
MsgBox ([B9])
Value2: co vidí Excel například pro datum zobrazí číslo, které datumu odpovídá
a = Range("A1").Value2
Text: to co vidíte v buňce
a = Range("A1").Text
Formula: Funkce/vzorec v EN
a = Range("A1").Formula
FormulaLocal: Funkce/vzorec v lokálním jazyce (např. čeština)
a = Range("A1").FormulaLocal
FormulaR1C1: Funkce/vzorec v EN v režimu R1C1
a = Range("A1").FormulaR1C1
FormulaR1C1Local: Funkce/vzorec v lokálním jazyce (např. čeština) v režimu R1C1
a = Range("A1").FormulaR1C1Local
FormulaArray - využije se spíše pro zapsání maticového vzorce, ale jako poznámku mám uchováno i zde:
a = Range("B9").FormulaArray
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
MsgBox "Hodnota Text B3 = " & Range("B3").Formula
'=TODAY()+A2
MsgBox "Hodnota Text B3 = " & Range("B3").FormulaLocal
'=DNES()+A2
Využití Range
b = Range("B2").Value
Využití Cells
b = Cells(2, 2).Value
Využití Cells v Range
' nebo-li vezme buňku v prvním řádků/sloupci v oblasti B2:C3
' neboli buňka B2
b = Range("B2:C3").Cells(1, 1).Value
Využití [] - hranaté závorky
b = [B2].Value
Využití [] - hranaté závorky a odkaz na ID názvu listu
b = List1.[A1].Value
' případně můžete rovnou otestovat
MsgBox (List1.[A1].Value)
aneb pokud je potřeby vybrat buňku z oblasti. Lze využít napřílad v cyklech For.
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....
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řípadně přes ID listu:
a = List2.Range("A1").Value
b = List2.Cells(2, 2).Value
c = List2.Range("pokus").Value
d = List2.[A1].Value
' pokud je člověk úplně líný ;)15:43 30.11.2018
f = List2.[A1]
MsgBox (List1.Cells(1, 1).Value)
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)
Opět můžete využít předchozí způsoby odkazování a vybrat si kterou vlastnost chtete zobrazit (Value, Text ...).
Podrobněji jak otvírat sešity pomocí VBA (například zaheslované) v článku: Otevřít soubor s heslem - Excel VBA.
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
FormulaR1C1: Funkce/vzorec v EN nebo lokální řeči v režimu R1C1
a = Range("A1").FormulaR1C1
b = Range("A1").FormulaR1C1Local
FormulaArray - poznámka pro pokročilé:
a = Range("B9").FormulaArray
Soubor Přečíst údaje v buněk - praktické příklady - Excel VBA ke stažení zdarma. Soubor využívá makra.
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: 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: 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.
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ší.
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
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.
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)
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/
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
Přidáno: 23.01.13 15:59
název sloupce A1.....Ax a v nich hodnoty PROxxxx a SPPxxxx
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
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.
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
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/
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
Přidáno: 12.02.14 17:42
To Špacír: Lze, budu-li mít chuť tak napíšu nějaký článek.
Přidáno: 13.02.14 10:59
Pavle, mohu Tvojí chuť k vypracování řešení něčím podpořit?
Přidáno: 16.02.14 06:54
To Špacír: Zajistit aby den měl 26 hodin.
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)
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
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 ?
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
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ý.
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
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
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
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
Přidáno: 01.12.14 09:04
To Kája: -- rwID = Application.Match(ID, Sheets("DATA").Range("a1").EntireColumn, 0)
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
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
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.
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/
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.
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
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
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
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
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 |