VBAでExcelシートのデータをCSV出力する方法|サンプルコード付きで解説

vbacsv出力アイキャッチ

今回はVBAを使ってExcelのデータをcsvファイルに出力する方法をご紹介します。本記事のコードをコピペするだけで簡単にcsvファイルにExcelのデータを出力できます。

csvの出力自体はExcelの機能でもできますが、他の作業と一緒にマクロで自動化したいとき(例:「データをcsv形式で出力してメールを送る」という作業をマクロで自動化したい)にVBAでcsv出力するコードを書く必要があるので、ぜひマスターしましょう。

目次

今回実行したい動作:ExcelのデータをCSVファイルに自動出力

以下の表がExcelシートに入力されているとき、その内容をVBAを用いてボタン一つでCSV形式で別ファイルに出力します。

サンプルデータ

サンプルファイルはこちらからご利用ください。

※こちらのファイルはOneDrive下に置くと実行できない場合があります。その場合はローカルフォルダにファイルを保存してください。

本記事で解説するVBAのコードを実行すると、Excelファイルと同じフォルダに「sample.csv」というファイルが作成されます。

「sample.csv」をメモ帳で開いてみると・・・

実行結果csv

Excelのテーブルの内容が、そのままCSV形式で出力されました。

CSVファイルに出力するコード

さっそくExcelのデータをcsvファイルに出力するコードを見ていきましょう。

スクロールできます

少し複雑なコードになっていますが、ステップに分けて解説していくのでご安心ください。

step1 変数の定義

スクロールできます

まず3~5行目で必要な変数を定義しています。

step2 csvファイルに書き込む準備

スクロールできます

8行目はcsvに出力したいデータのあるシートをSetステートメントを使ってwsという変数に格納しています。数値や文字ではなく、ブックやシートなどのオブジェクトを代入するときはSetステートメントを使います。

11行目は出力するファイルのパスとファイル名を定義し、csvFileという変数に代入しています。ActiveWorkbook.Pathで開いているExcelファイルと同じパスを、csvファイルのパスに指定しています。csvファイル名は適宜決めてください。今回はsample.csvというファイル名にしています。

14行目でファイル番号を割り当てています。FreeFileで使用可能なファイル番号を取得しています。既に使われているファイル番号を指定すると、実行時エラーが発生します。FreeFileを使うことで、ファイル番号の重複を避けることができます。

step3 最終行・最終列の取得

スクロールできます

17・18行目で最終行、最終列を取得しています。

Rows.Countはシートの行数です。Excel 2007以降の形式のブックならワークシートの行数は1048576です。(Excel 2003なら65536です。)つまり最終行の1048576行1列目のセルからEnd(xlUp)で上方向に探索し、データの最終行のセルの行数を.Rowで取得しています。.End(xlUp)はCtrl+↑と同じ操作です。

最終列の取得も同様で、シートの最終列から.End(xlToLeft)で左方向に探索して、.Columnでデータの最終列を取得しています。.End(xlToLeft)はシートの右端からCtrl + ←でデータの最終列にたどり着くのと同じ操作です。

今回は起点となるセルをA1セルとしているので、(最終行, 1列)、(1行, 最終列)から探索していますが、データに合わせて基準となるセルは変更してください。(Cells(Rows.Count, 1)やCells(1, Columns.Count)の1を起点となるセルの列・行に変更)

step4 ファイルへの書き出し

スクロールできます

21行目のOpenメソッドでファイルを開きます。指定したファイルが存在しない場合新規作成されます。
23~32行目でFor文を使って書き出しています。書き出しにはPrint#ステートメントを使用します。

【構文】 Print # ステートメント

Print #filenumber, [ outputlist ]

outputlistがファイルに出力する内容です。通常、Print #ステートメントを使ってデータを出力した場合、改行コードが含まれます。改行されないようにするためにはステートメントの最後に「;(セミコロン)」を入力します。

19行目のif文は、データが最終列“でないとき”はセルの内容と「,(カンマ)」を出力します。最終列のときはセルの内容とカンマのかわりに改行コード(vbCr)で改行し、それを最終行まで繰り返しファイルに出力していきます。

step5 ファイルを閉じる

スクロールできます

最後に出力したファイルを閉じて完了です。

まとめ

今回はVBAでExcelのデータをCSVファイルに出力する方法を解説しました。ぜひコードの内容を理解して使用してみてください。

ユースフルではオンライン動画講座ExcelPro(エクセルプロ)講座を提供しています。

「実務でVBAを使っている」
「無料でVBAを学びたい」

という方は、元伊藤忠商事経理でExcel実務のプロ、長内孝平(おさ)のExcel技を無料で8時間分も学習できる【無料体験版】ExcelPro講座をぜひご利用ください!

気に入ったらシェア!
  • URLをコピーしました!
目次