エクセルVBAでエクセルシート上のデータをCSVファイルに書き出す


write

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルのデータを様々なファイルに書き出してみています。

前回はこちらの記事です。

エクセルVBAでテキストファイルに書き出す最も簡単なプログラム
エクセルVBAでは様々なテキストファイルを生成できますが、今回はその中でも最も簡単な拡張子txtのテキストファイルをエクセルシートのデータを元に出力する方法についてお伝えしています。

エクセルシートに記述された内容をテキストファイル「data.txt」に書き出すプログラムを紹介しました。

以外と簡単でしたよね。

さて、異なるアプリケーション間でデータを交換する際にはCSV形式がよく使われます。

CSVとは何か?そしてエクセルでCSVファイルを扱うときの注意点
初心者向けエクセルVBAでCSVファイルを取り込む方法丁寧に解説をしていきたいと思います。初回は準備編としてそもそもCSVファイルとは何か、エクセルで開く際の注意点についてお伝えします。

今回は、エクセルVBAでエクセルシートのデータをCSVファイルとして出力する方法についてお伝えしていきます。

スポンサーリンク

前回のおさらい:エクセルシートの内容をテキストファイルで書き出す

前回のプログラムはこちらでした。

Sub makeText()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)

Dim datFile As String
datFile = ActiveWorkbook.Path & "\data.txt"

Open datFile For Output As #1

Dim i As Long
i = 1
Do While ws.Cells(i, 1).Value <> ""
    Print #1, ws.Cells(i, 1).Value
    i = i + 1
Loop

Close #1

MsgBox "data.txtに書き出しました"

End Sub

流れとしては

  1. 「data.txt」というファイル名でテキストファイルをオープン
  2. エクセルシートの終わりまで一行ずつ繰り返し
    • テキストファイルにA列を一行で出力
  3. 「data.txt」をクローズ

となります。

エクセルシートの内容をCSVファイルとして書き出す

まず今回お題とするエクセルシートのデータは以下のような作りにします。

エクセルシートのデータ

さて、出力をCSVにするためには前述のプログラムをどう変更すればよいでしょうか?

まず、書き出すファイルの拡張子をcsvにします。

前述のプログラムでは一行ずつ縦に走査して順番に書き出していけばよかったのですが、今度はセル一つずつ横方向へ走査する必要がありますね。その際にデータとデータの間はカンマで区切ります。

それで、最後の列であるL列までいったら改行を入れます。

以上を踏まえたプログラムはこのようになります。

Sub writeCSV()

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)

Dim csvFile As String
csvFile = ActiveWorkbook.Path & "\data.csv"

Open csvFile For Output As #1

Dim i As Long, j As Long
i = 1

Do While ws.Cells(i, 1).Value <> ""

    j = 1
    Do While ws.Cells(i, j + 1).Value <> ""

        Print #1, ws.Cells(i, j).Value & ",";
        j = j + 1

    Loop

    Print #1, ws.Cells(i, j).Value & vbCr;
    i = i + 1

Loop

Close #1

MsgBox "data.csvに書き出しました"

End Sub

全体の流れとしては

  1. 「data.csv」というファイル名でテキストファイルをオープン
  2. エクセルシートの終わりまで一行ずつ繰り返し
    2-1. その行の終わりまで1セルずつ繰り返し
    – テキストファイルに該当セルとカンマを出力
    2-2. 改行コードを出力
  3. 「data.csv」をクローズ

となります。

ポイントについて以下解説をしていきますね。

改行をせずにCSVファイルに書き出す

19行目でPrintでセル一つとカンマ一つをセットでCSVファイルに出力をしているのですが

Print #番号, 変数;

というように最後にセミコロンをつけると改行をせずに書き出しをします。

セル一つ一つでいちいち改行をされちゃったら困りますからね。

17行目のDo Whileループはj+1が空白かどうかを見ていますから、24行目にたどりついたときは最後の列です。

ここではカンマの代わりに「vbCr」つまりキャリッジリターンの改行コードを追加することでCSVファイルに改行を書き込んでいます。

実行結果

上記プログラムを実行して出力されたCSVファイルを見てみますと

エクセルVBAで出力したCSVファイル

このように正しくCSVファイルとして出力されていますね。

まとめ

エクセルシートをCSVファイルに出力するVBAプログラムを作成しました。

ポイントはPrint命令で最後にセミコロンをつけるということにつきますね。

あとはカンマやvbCrなどCSVファイルのルールに合わせて適宜出力してあげればOKです。

次回はエクセルの表をHTML形式で出力する方法です。

エクセルの表をHTMLのtableタグに変換して出力するVBAマクロ
HTMLファイルを作るときにtrやtdタグでテーブルを構成するの…面倒ですよね?今回はエクセルVBAでエクセルシート上の表をHTML形式のテーブルに変換して出力する方法をお伝えしたいと思います。

お楽しみに!

連載目次:エクセルVBAでCSVや様々なテキストファイルを出力する

多くの企業では様々なデータをエクセル形式で保持しています。そのデータ群をCSVやHTMLなどで有効利用できたら便利ですよね?このシリーズでは、エクセルデータをテキストをはじめ様々な形式のファイルに出力する方法についてお伝えしています。
  1. エクセルVBAでテキストファイルに書き出す最も簡単なプログラム
  2. エクセルVBAでエクセルシート上のデータをCSVファイルに書き出す
  3. エクセルの表をHTMLのtableタグに変換して出力するVBAマクロ
  4. エクセルVBAでセルが結合されているかどうか、またそのセルの数を判定する方法
  5. エクセルVBAで文字コードUTF-8のCSVファイルを書き出す方法
  6. エクセルVBAでBOM無しのUTF-8でCSVファイルなどを出力する方法


タイトルとURLをコピーしました