Přeskočit navigaci | Přeskočit na novinky

Jste zde: Úvodní stránka » excel » vba-soubory » importovat-nacist-csv-soubor-excel-vba
Microsoft Excel logo

Jak načíst importovat csv soubor - VBA Excel

Videokurzy Excel

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

Úvodem

Excel VBA logo

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?

Přehled kapitol:


Trocha teorie

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:

  • 1) otevřít jako textový soubor
  • 2) importovat jako oblast externích dat

Obě možnosti jsou popsány v tomto článku.

Načtení csv souboru

Oddělovač čárka

CestaAdresare = ThisWorkbook.Path Workbooks.Open Filename:=CestaAdresare & "\csv-oddelovac-carka.csv"

Načtení csv souboru

Oddělovač středník

CestaAdresare = ThisWorkbook.Path Workbooks.Open Filename:=CestaAdresare & "\csv-oddelovac-strednik.csv", Local:=True

do Excel 2003

Řešením je kód:

Workbooks.Open C:\dokument.csv

Načtení csv do aktuálního sešitu

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

Načtení csv pomocí QueryTables

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

Ke stažení

csv načítání- stahuj logo

K dispozici soubory ke stažení zdarma:

csv pro testy

Soubory s příponou *.xlsm využívají VBA makra. Pro správnou funkci je třeba tyto makra povolit.


Související články

Související články pro práci se soubory pomocí VBA v Excel:

Závěrem

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

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 - autor webu

Pavel Lasák

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ů.

   Pavel Lasák LinkedIn Profil    Pavel Lasák Google+ Profil    Pavel Lasák facebook Profil    Pavel Lasák twitter Profil


Komentáře


Petr Pecháček

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.

Pavel Lasák

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.

Petr

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

Petr

Přidáno: 24.04.15 15:03

Tak problém jsem již vyřešil.

Špageta

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

Špageta

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

Špageta

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.

Jiří Beran

Přidáno: 10.12.15 00:02

Super, pomohlo mi zrovna když jsem to hodně potřeboval :)

Pája

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 :-)






Excel


Sdílejte

Pomohl Vám návod?
Sdílejte na Facebooku, G+
LinkedIn...

Nové články


Reklama


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