VBAでCSV読み込みする方法|文字化け防止の基本も解説

ようこそ♪ささぽんのExcel教室へ。
今回は VBAにおける「CSV読み込みの方法と文字化け防止の基本」 をお届けします!
業務でCSVファイルを扱うとき、VBAを使って自動で読み込めるととても便利です。
ですが「文字化けしてうまく表示できない…」という壁にぶつかる方も多いのではないでしょうか。
この記事では、VBAでCSVを読み込むための基本コードから、文字化けを防ぐためのポイントまでを初心者向けにわかりやすく解説していきます。

この記事は以下のような方におすすめです!
・VBAでCSVを読み込みたいけれどやり方がわからない方
・読み込んだCSVが文字化けして困った経験がある方
・実務で安定したCSV処理をマクロで実現したい方
このブログは「基礎からExcelマクロを学びたいと考えている方」や、
「独学での習得に壁を感じた方」に向けて、やさしく、わかりやすく、丁寧に解説しています。
読み終わるころにはきっと、
「Excelマクロって意外と簡単かも!」「もっとやってみたい!」と思えるはず。
一緒に楽しく学びながら、Excelマクロ使いを目指しましょう!
目次
1.VBAでできるCSV処理の代表例
VBAを使うと、CSVファイルを自由に操作できるようになります。Excelに直接読み込むだけではできない処理も、自動化によって効率的に行えます。
ここでは「どんな処理が可能なのか」を代表的な例を挙げて紹介していきましょう。
◼︎手作業では大変なCSV操作
CSVはそのままExcelで開けますが、列幅の調整や不要な列の削除、複数ファイルの統合などは毎回手作業になります。
特にデータ量が多い場合や定期的に繰り返す場合、これらの操作は大きな負担です。
VBAを使えば、列幅の自動調整や特定列の削除、複数ファイルの一括読み込みといった処理を一度に実行できます。
結果として、作業時間の短縮と入力ミスの削減につながり、業務全体の効率が大幅に改善されるのです。
◼︎VBAで自動化できる処理のパターン
VBAを活用すると、CSVに対してさまざまな処理を自動化できます。
例えば、指定フォルダ内のすべてのCSVを順番に読み込む、特定の条件を満たす行だけを抽出する、読み込んだデータを自動で整形して別シートに出力するといったパターンです。
これらは手作業で行うと時間がかかり、ミスの原因にもなりがちです。
マクロにしておけば一度の実行で完了して作業負担の軽減になるだけでなく、オペレーションミスを防止することができます。
日常業務で繰り返すCSV作業があれば、ぜひ積極的に自動化を検討してください!
2.VBAでCSVを読み込む基本コード
VBAでCSVを扱うためには、まず「どのように読み込むか」を理解することが大切です。
Excelにはいくつかの方法がありますが、基本となるのはWorkbooks.Openを使う方法と、Openステートメントを使う方法の2つです。
ここでは、それぞれの特徴と使い方を紹介していきます。
◼︎Workbooks.Openを使ったシンプルな読み込み
最も簡単にCSVを開く方法は、Workbooks.Openを使う方法です。
この命令は指定したCSVファイルをそのままExcelで開くイメージで、ファイルのパスを与えるだけで利用できます。
基本形は以下のようになります。
Sub CSV_Open()
Workbooks.Open Filename:=“C:\Users\Sample\test.csv”
End Sub
この方法の特徴は、とにかく手軽であることです。数行のコードでCSVを読み込めるため、初心者でも扱いやすいでしょう。
ただし、文字コードが異なるCSVでは文字化けが起きたり、区切り文字が正しく認識されなかったりする場合があります。
まずはこの方法で仕組みを理解し、必要に応じて次の方法を検討してください。
◼︎Openステートメントを使った行単位の読み込み
CSVをより柔軟に扱いたい場合には、Openステートメントを使う方法があります。
この方法はファイルをテキストとして開き、1行ずつ読み取って処理します。
基本のコードは次の通りです。
Sub CSV_ReadLine()
Dim f As Integer
Dim line As String
f = FreeFile
Open "C:\Users\Sample\test.csv" For Input As #f
Do While Not EOF(f)
Line Input #f, line
Loop
Close #f
End Sub
この方法の利点は、1行を文字列として取得できる点です。
たとえばカンマ区切りで分割して配列に格納すれば、任意の列を取り出すことも可能になります。
つまり読み込みと同時にデータ加工をしたい場合に非常に有効です。
その一方でコードはやや複雑になりがちなので、単純な読み込みならWorkbooks.Open、柔軟な処理が必要ならOpenステートメントと使い分けるのがおすすめです。
◼︎紹介したコードを詳しく解説
今回のコードでまず押さえておきたいのはFreeFile関数です。
これは「現在使われていないファイル番号」を返す仕組みで、最初に呼び出すと通常は1が返ります。
VBAはファイルを番号で管理するため、以後の操作では「#番号」で対象を指定します。
難しい仕組みはここでは気にせず、テンプレートとして覚えておきましょう。
Dim f As Integer
f = FreeFile() ’ 空いている番号を取得(通常は1)
Open “C:\test.csv” For Input As #f ’ #f番で開く
次に重要なのがEOFです。EOFは「End Of File」の略で、「ファイルの最後に達したかどうか」を確認します。
これを条件に使うことで、最後の行まで確実に読み取ることができます。
こちらも定番の書き方なので、まずはテンプレとして使ってみてください。
Do While Not EOF(f) ’ 最後に到達するまで繰り返す
Line Input #f, line ’ 1行ずつ読み込む
Loop
このように、FreeFileで番号を割り当て、EOFで終わりを確認するという流れがCSV読み込みの基本構造になります。
3. 文字化けを防ぐためのポイント
CSVをVBAで読み込むときに多いトラブルが「文字化け」です。
特に日本語を含むデータでは、正しく表示できないことがよくあります。
これは主に文字コードの違いによって起こります。
この章では、文字化けを防ぐために押さえておきたい基本知識と、実際の対策方法を紹介します。
◼︎文字コード(Shift-JISやUTF-8)の違い
CSVの文字化けの多くは、文字コードの不一致が原因です。
文字コードとは「文字を数値で表現するルール」のことで、日本語では主にShift-JISとUTF-8が使われます。
Excelは標準でShift-JISを想定しているため、システムから出力されたUTF-8のCSVをそのまま開くと、漢字やカタカナが文字化けしてしまうのです。
VBAでCSVを扱う場合も同じで、Excelの想定とファイルの文字コードが合っていないと文字化けします。
そのため、まずは「CSVがどの文字コードで保存されているか」を確認することが大切です。
特にWebシステムやクラウドサービスから出力されるCSVはUTF-8が多いので注意が必要です。
◼︎ADODBを利用した文字コード対応の読み込み
VBAで文字化けを避けたいときに便利なのが、ADODB(ActiveX Data Objects Database)を使う方法です。
これは本来データベース接続のための仕組みですが、CSVもテーブルのように扱えるため、文字コードを指定して読み込めるのが特徴です。
以下、サンプルのコードです。
Sub CSV_ADODB()
Dim cn As Object, rs As Object, sql As String
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Users\Sample;" & _
"Extended Properties=""text;HDR=Yes;FMT=Delimited;CharacterSet=65001"""
sql = "SELECT * FROM test.csv"
Set rs = cn.Execute(sql)
End Sub
ここで注目すべきはCharacterSet=65001という部分です。
65001はUTF-8を意味しており、これを指定すればUTF-8のCSVも正しく読み込めます。
少し高度な方法ですが、文字化けで悩んでいるときには非常に強力な選択肢になります。
◼︎紹介したコードの使い方
先ほど紹介したコードは上級者向けなので、初めはテンプレートとして使ってください。
このコードを使うときに、変更するのは次の2点だけです。
- Data Source:CSVが入っているフォルダのパスを指定します。
例:”C:\Users\Sample” → 自分のパソコンのフォルダに変更。 - FROM test.csv:読み込むファイル名を指定します。
例:”test.csv” → 実際に読み込みたいCSVの名前に変更。
このように「フォルダの場所」と「ファイル名」だけ差し替えれば、自分の環境でも動きます。
難しい部分は一旦スルーして「UTF-8ならこのテンプレ」と覚えておくのが最初の一歩です。

4. 実務で役立つCSV処理の応用例
CSVをVBAで読み込めるようになったら、次のステップは「どう活用するか」です。
実務では単に開くだけでなく、複数のCSVをまとめたり、特定の場所に整形して出力したりするニーズがよくあります。
ここでは代表的な応用例を紹介します。
◼︎読み込んだデータを特定シートに配置する
CSVを開いたら終わりではなく、所定のシートに貼り付けて保存まで行うと更なる作業削減につながります。
以下は読み込んだCSVの内容をDataシートのA1起点に配置し、元CSVブックは閉じるテンプレです。
Sub ImportToData()
Dim wb As Workbook, ws As Worksheet
Set ws = ThisWorkbook.Worksheets(“Data”)
ws.Cells.Clear
Set wb = Workbooks.Open(Filename:="C:\data\sales.csv") 'CSV名を指定する
wb.Sheets(1).UsedRange.Copy ws.Range("A1")
wb.Close SaveChanges:=False
End Sub
処理の流れは「開く→全データ取得→貼り付け→閉じる」。貼り付け前にCells.Clearでクリアしておくと確実に貼り付けられます。
CSV名と貼り付け先は環境に合わせて差し替えてください。
◼︎複数CSVをまとめて読み込む方法
実務では毎日や毎月、同じ形式のCSVが複数出力されることがあります。これを手作業で1つずつ開いてコピーしていると大変です。VBAならフォルダ内のCSVを順番に開いて、1つのシートにまとめることができます。
Sub ImportAllCSV()
Dim f As String, ws As Worksheet, lastRow As Long
Set ws = ThisWorkbook.Sheets(“Data”)
ws.Cells.Clear
f = Dir("C:\data\*.csv") 'CSVの保存先を指定する
Do While f <> ""
With ws
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
Workbooks.Open Filename:="C:\data\" & f
ActiveSheet.UsedRange.Copy .Cells(lastRow, 1)
ActiveWorkbook.Close False
End With
f = Dir()
Loop
End Sub
ポイントはDir関数を使って「フォルダ内のCSVを順番に取得」しているところです。
コピー先の最終行を探して追記していくので、複数ファイルを一つに集約できます。
Dir関数や繰り返し処理のファイル処理について詳しく学びたい方は、併せて以下の記事をご覧ください!
5.まとめ|VBAでCSVを快適に扱うために
ここまで、CSVをVBAで読み込む方法を基礎から応用まで見てきました。
最後に全体を振り返り、どんな場面でどの方法を使えばよいか整理してみましょう。
CSVを読み込む方法にはいくつかあり、場面に応じて使い分けることがポイントです。
◼︎CSVを読み込む方法のおさらい
CSVを読み込む方法にはいくつかあり、場面に応じて使い分けることがポイントです。
方法 | 特徴 | 注意点 |
Workbooks.Open | 一番手軽に開ける | 文字化けや区切りに弱い |
Openステートメント | 行ごとに読み込み可能 | コードがやや長め |
ADODB(CharacterSet指定) | UTF-8対応で文字化けに強い | 仕組みは難しいがテンプレでOK |
このように「まずはWorkbooks.Openで試す」「細かく扱うならOpenステートメント」「UTF-8ならADODBをテンプレで使う」と覚えておけば十分です。
◼︎文字化け防止のチェックリスト
CSVを扱うときに最も多いトラブルが文字化けです。
次のチェックリストを確認するだけで、多くの場合は解決できます。
- CSVの文字コードを確認する(Shift-JISかUTF-8か)
- Shift-JISなら通常のWorkbooks.OpenやOpenステートメントで読み込み可能
- UTF-8ならADODBのテンプレコードを利用し、CharacterSet=65001を指定する
- 自分の環境に合わせて「フォルダパス」と「ファイル名」だけ修正する
この流れを押さえておけば、文字化けへの対応もバッチリです!
◼︎実務に生かすヒント
CSVの読み込みをVBAで自動化できると、日常の作業効率が一気に上がります。
特に定型的な処理では、手作業をなくすだけで大きな効果があります。
例えば、以下の業務を手作業で行なっている場合には自動化を検討してみてください。
- 読み込んだCSVを特定シートに配置して保存する
- 複数のCSVをまとめて1つのシートに集約する
- 定期的に実行する処理をテンプレコードとして準備しておく
最初は紹介したテンプレートをそのまま動かし、自分の業務に合わせて少しずつ調整していくのがおすすめです。
煩雑でミスが発生しがちな業務こそ、少しずつ自動化して行きましょう!
\ Excelマクロ制作も承っています /
各種クラウドソーシングサイトにて業務効率化ツールの作成・カスタマイズを承っております。
ご相談・お見積もりは無料ですので、まずはお気軽にご覧ください!