Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
Jak pomocí VBA v Microsoft Excel otvírat *.csv soubory. Jak na středníky, čárky, lokální prostředí, atd.
Vytvořeno: 25.1.2015
Jak otevřít / načíst *.csv soubor pomocí VBA makra v Excel? Jak na různé oddělovače (středník, čárka)? Proč někdy nefunguje středník? Jak zajistit ať se načítané csv neotvírá v samostatném sešitu, ale přímo v sešitu s makrem?
Na první pohled se zdá import *.csv souborů jednoduchý, na ten druhý už to tak jednoduché není. Existuje několik verzí jak mohou být *.csv soubory zapsány (uloženy), když se k tomu připočte několik druhů kodování a navíc dvě možnosti jak v Excelu lze tato data načíst začíná v tom být zmatek.
Ve svém důsledku import / načítání není složité, stačí jen použít správnou metodu, Excel nabízí dva druhy importu:
Obě možnosti jsou popsány v tomto článku.
Oddělovač čárka
CestaAdresare = ThisWorkbook.Path
Workbooks.Open Filename:=CestaAdresare & "\csv-oddelovac-carka.csv"
Oddělovač středník
CestaAdresare = ThisWorkbook.Path
Workbooks.Open Filename:=CestaAdresare & "\csv-oddelovac-strednik.csv", Local:=True
Řešením je kód:
Workbooks.Open C:\dokument.csv
Načítat se bude do listu csv. Csv soubor se sice načte do samostatného listu, tento soubor zkopírujeme a vložíme do požadovaného listu. Nově otevřený soubor pak pomocí VBA kódu zavřeme - Close. Abychom nemuseli odpovídat na zobrazené dialogové hlášení, zobrazování těchto hlášek dočasně vypneme (DisplayAlerts).
CestaAdresare = ThisWorkbook.Path
Workbooks.Open Filename:=CestaAdresare & "\csv-oddelovac-strednik.csv", Local:=True
Windows("csv-oddelovac-strednik.csv").Activate
Selection.CurrentRegion.Select
Selection.Copy Workbooks("nacteni-csv-excel.xlsm").Worksheets("csv").Cells
Application.DisplayAlerts = False
'vypnutí dialogového okna na zachování dat ve schránce
ActiveWindow.Close ' zavře dočasné csv
Application.DisplayAlerts = True
Pokud ručně načítáte přes kartu Data - Načíst externí data - Z textu, využíva Excel vkládaní přes QueryTables. Toto můžete využít a nastavit si požadované oddělovače, kódování, upřesnit umístění na požadovaném listu, atd.
Importovat jako oblast externích dat
CestaAdresare = ThisWorkbook.Path & "\csv-oddelovac-strednik.csv"
Set query_table = Sheets("csv").QueryTables.Add( _
Connection:="TEXT;" & CestaAdresare, _
Destination:=Sheets("csv").Range("A1"))
With query_table
.Name = "strednik"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1250
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.Refresh BackgroundQuery:=False
End With
K dispozici soubory ke stažení zdarma:
Soubory s příponou *.xlsm využívají VBA makra. Pro správnou funkci je třeba tyto makra povolit.
Související články pro práci se soubory pomocí VBA v Excel:
Máte nějaký oblíbený kód pro načítání csv? Můžete zmínit v komentářích.
Článek byl aktualizován: 19.09.2020 11:07
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: 26.01.15 23:19
Klasické otvírání přes Soubor (Open) nebo přetažením do okna je nebezpečná věc právě třeba kvůli kódování. Ukázka načtení CSV do aktuálního sešitu je docela tfujtajblová. Proč kolekce Windows, zbytečné metody Activate, Select, ... Proč není komentovaný kód u QueryTables? A chybí tu zásadní způsob načítání přes VBA - ADO a schema.ini.
Přidáno: 29.01.15 18:33
To Petr: Děkuji Petře za doplnění. Holt byl důvod proč to tfujtajblově načítat (nechci zabíhat do podrobností). Kód u QueryTables bude okomentován spolu s dalšími příklady. Načítání přes ADO a schema.ini jsem nikdy nepoužil, děkuji už mám v Everynote a mám se ještě hóóódně co učit. Jen co dostuduji také doplním.
Přidáno: 10.04.15 15:32
Dobrý den, mohl byste mi zkusit poradit? Importuji soubor, jehož část názvu se každý den mění. Např: Nazev_01.csv další den Nazev_02.csv atd.. Rád bych věděl jak modifikovat proměnlivou část z názvu souboru jež importuji, doted jsem to řešil ručním odmazáním a omezením názvu pouze na Nazev.csv Děkuji
Přidáno: 24.04.15 15:03
Tak problém jsem již vyřešil.
Přidáno: 29.05.15 09:40
Dobrý den, Výborné stránky, díky kterým se mi podařilo vytvořit spoustu užitečných nástrojů v excelu. Mám ale jeden dotaz. Použil jsem uvedený postup na převos csv do Axcelu pomocí Query Tables, ale potřebuju ještě zadat = jako další oddělovač. Jak je to možné zadat do Makra? Předem díky za moji, možná hloupou, otázku:) Děkuji
Přidáno: 29.05.15 13:38
+ ještě by mě zajímalo, jestli je možné zapsat příkaz tak, aby e natáhli data vždydo čistého listu, resp. se list vymazal před importem dat. Děkuji
Přidáno: 29.05.15 13:40
Tak vyřešeno, tady se dá najít opravdu všechno. Smažte prosím moje otázky, ať to tady nestraší:) Díky.
Přidáno: 10.12.15 00:02
Super, pomohlo mi zrovna když jsem to hodně potřeboval :)
Přidáno: 07.04.16 08:45
QueryTables: Zdravíčko funguje to i takto : With query_table = Sheets("csv").QueryTables.Add( _ Connection:="TEXT;" & CestaAdresare, _ Destination:=Sheets("csv").Range("A1")) .... je to pohodlnější v tom, že netřeba "With query_table" a píšou se rovnou podmínky. Já ještě používám :".TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1)" počet jedniček je počet sloupců. a na konec :".TextFilePlatform = xlWindows" Krásný den :-)
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 |