VBAでのCSVの読み込み方法を検索するとたくさん出てきますが,それぞれ一長一短があります。この記事でまとめてみます。使うまとめ以下,VBAを書いたExcelブックのカレントディレクトリのemployee.csvを読み込むとします.Workbooks.Openで開くWorkbooks.OpenでCSVを開くのは、一番簡単なCSVの読み込み方法でしょう。Subただし、Excelによって勝手にデータが解釈されて変換されてしまうので、数値の頭のゼロが落ちるなどの問題が起きることも多いです。このデータが、こうなります。A列の頭の0が無くなっています。(勝手に開いた年が入る),(1)➡-1などと勝手に変わります.なので,読み込むデータ形式が不定の場合はあまりこの方法を使わないほうが良いです.テキストファイルとして読み込む(単純Split版)また、よくCSV読み込みサンプルとしてあるのが、テキストファイルとしてCSVを読み込んで、改行とカンマで分割するというものです。Subテキストファイルとして読み込むので、セルに入れるデータ形式などの融通が利くのがメリットです。文字コードがUTF8のテキストファイルを読み込むには、下記のサイトのようにADODB.Streamを使用します。ファイルの操作[UTF-8形式のテキストファイルから読み込む]CSV内のデータにカンマや改行などが絶対に入ってこないのであればこの方法で問題無いです。実際にはそうでない場合が多いので、実業務ではあまり使えないです。データにカンマや改行が入ると、読み込むセルがズレたりします。テキストファイルとして読み込む(独自にパース)単純にSplitでカンマで分割せずに、1文字ずつ見ていって解析すれば、理論上データに改行やカンマなど含まれていても正確にCSVを読み込めます。独自で実装するのはなかなか大変です。検索すると、下記のサイトでコードが見つかりました。データに改行、カンマ、ダブルクォーテーションが含まれるCSVも取り込めました。(上記サイトにも解説がありました).ADODB.Connectionで読み込むADODBを使って、CSVファイルに接続して読み込む方法もあります。読み込み」などで検索すると出てきます。ファイル名がテーブル名になります。ピリオドは#になります。Subこの方法はかなり優秀で、カンマや改行がデータに含まれていてもきちんと読み込むことができます。デフォルト(上記のコード)では列のデータ型が自動判別されて、Workbooks.Openで開くときと同様に数値の頭の0が落ちたりします。これを防ぐには、下記のようなschema.iniファイルをCSVと同じフォルダに置き、データ型(ここではtext)を指定します。ArcGISブログ実装の手間はかかりますが、schema.iniもプログラムで自動生成すれば、任意のCSVファイルを頭の0を落としたりせずに取り込めます。注意点もあり、列数は255までしか取り込めません。同じ列名があると、Fieldsで列名を取得したときに勝手に変更されています。「氏名」列を2つにすると、下記のようになります。列名を取得したいけど,列名の重複があるような場合は,別途ファイルの先頭行から列名を取り込むなどの工夫が要ります.Workbooks.OpenTextで開くWorkbooks.OpenTextは、テキストファイルやCSVファイルを開くことに特化したメソッドです。下記ページにまとまっていました。Sub使う上での注意点は、ファイルの拡張子によって挙動が変わることです。ファイルの拡張子がtxtだと、Originによる文字コードの指定、FieldInfoによるデータ型の指定がともに効きます。セル内改行に対応していません。(カンマやダブルクォーテーションは対応しています。)一方、ファイルの拡張子がcsvだと、Originによる文字コードの指定、FieldInfoによるデータ型の指定が効きません。(正確には、UTF8ファイルを開くときは、ファイル先頭にBOMがついているときのみOriginによる指定が効きます。)しかし、セル内改行に対応しています。まとめると以下のようになります。○データに応じて拡張子を返る必要があり,使いづらいです.クエリーテーブルで読み込むExcelのクエリーテーブルの機能を使ってCSVを読み込めます。SubTextFileColumnDataTypesで指定する定数値は下記に記載があります。Docsデータ型の指定ができ、セル内のカンマやダブルクォーテーションに対応していますが、セル内改行に未対応です。※蛇足ですが、「CSVが空のときにエラーになる」と記載があるページがありましたが、データが空でも取り込めました。ヘッダすらない0バイトのファイルだとエラーになります。使ってCSVを取り込めます。PowerQueryをVBAから使う方法はネット上に情報が少ないですが、マクロの記録を使って,VBAから呼び出すメソッドなどが特定できます。下記にサイトなどにやり方が書いてありました。Subこのコードは、以下の流れで実行しています。CSVの一時読み込み先の新たな空のワークブックを作成wb.Queries.Add(で、新たな取得と変換クエリを追加。ここで、引数Formula:=に、CSVを読み込むM言語のコードを指定しています。一時作成したワークブックを閉じるセル内のカンマやダブルクォーテーション、改行に対応しています。注意点は、以下の2つがあります。月別アーカイブはてなブログをはじめよう!kamocycさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。