【便利】VBAでEXCELシートの内容をCSVファイルに出力する方法|サンプルコード付きで解説

  • URLをコピーしました!

EXCELで編集したデータをCSVファイルに出力したいとき、どうやっていますか?

手動で保存すると間違いも起こりやすいですよね。 そんなときはVBAでサクッとコーデイングすれば、CSVファイルを簡単に出力することができます。

この記事では、EXCELのシートの内容をCSV(テキストファイル)に出力する方法をご紹介します。

 現場でプログラムのテストを実施する際に、テストデータを作成するツールとしても使えるノウハウになりますので、ぜひ最後までお読みください。

目次

VBAでコーディングしてみよう

VBAでコーディングしてみよう

初めてVBAマクロを操作する方は画面上に「開発」タブが表示されていません。

EXCELに「開発」タブが表示されない方は、こちらの記事を参考に設定してみてください。

>>VBAの事前準備①をご覧ください

ステップ1:VBAコントロールでデザイン

今回は、EXCELのシート上に簡単な画面デザインとしてボタンを配置してみます。

「挿入」をクリックしてフォームコントロールから左上にある「ボタン」を選択してみてください。

VBAコントロールでデザインする方法

ボタンが配置できたら、次は、ボタンに対してオブジェクトのプロパティを設定します。

ボタンを右クリックして「プロパティ」を選択してください。

下記のとおりプロパティを設定できる画面が起動します。

オブジェクトのプロパティを設定

ここまで設定できたら、1ステップ目は完了です。

ステップ2:VBAソースコードを書いてみよう

次は、VBE(Visual Basic Editor)にソースコードを書いてみましょう。

では、下記の図のとおり、「CSV出力」ボタンをダブルクリックしてください。

デザインモードでボタンを配置する方法

「CSV出力」のオブジェクトをクリックすると、下記画面のとおり、ソースコードを記入するためのVBE(Visual Basic Editor)が起動します。

VBEエディタの説明

下記のソースコードを参考にコーディングしてください。

Private Sub CSV_OUTPUT_Click()

'出力対象シートを定義
Dim csvSh As Worksheet
Set csvSh = ThisWorkbook.Worksheets("サンプル")

'対象シートの1列目の最終行を取得
Dim csvLastRow As Long
csvLastRow = csvSh.Cells(csvSh.Rows.Count, 1).End(xlUp).Row

'1列目から13列目の1行目から最終行までを定義
Dim csvRng As Range
Set csvRng = csvSh.Range(csvSh.Cells(1, 1), csvSh.Cells(csvLastRow, 13))

'対象範囲の値を配列に格納
Dim outputAry As Variant
outputAry = csvRng.Value

'保存ファイル名を定義
Dim outputFile As String
outputFile = "C:\work\CSV出力\outputSample.csv"

'空番号を取得
Dim csvNum As Long
csvNum = FreeFile

'書き込みのためにファイルを開く(ファイルがなければ作成される)
Open outputFile For Output As #csvNum

    Dim i As Long
    Dim j As Long
    Dim csvVal  As String
    
    csvVal = ""

    '行方向の要素数分ループ
    For i = LBound(outputAry, 1) To UBound(outputAry, 1)
        '列方向の要素数分ループ
        For j = LBound(outputAry, 2) To UBound(outputAry, 2)
            'シートの値を配列から定義
            csvVal = """" & outputAry(i, j) & """"

            '値をファイルに書き込み
            If j = UBound(outputAry, 2) Then
                '最終列なら、「;」をつけない(デフォルトで改行コードが付与される)
                Print #csvNum, csvVal
            Else
                '最終列でなければ、値の後に「","」をつける必要がある。そして末尾に「";"」を付与し改行なしで書き込む
                Print #csvNum, csvVal & ",";

            End If
        Next
    Next

Close #csvNum

MsgBox ("CSVが出力されました。")

End Sub

ソースコードの説明
 13行目:EXCELデータ(サンプルシート)の横と縦のセルの範囲を定義しています。
 21行目:出力するファイル名、格納場所を指定しています。ご自身の環境に合わせて変更してください。
 41行目:1セルずつ値をダブルクォーテーションで囲って、変数csvValに編集しています。

ファイル出力イメージ
 CSVファイルに出力される編集イメージは次のとおり。
 まず、1行目のA1セル、B1セル、・・・M1セルまで、1セルずつファイル出力
 次に、2行目のA2セル、B1セル、・・・M2セルまで、1セルずつファイル出力
 次に、3行目のA3セル、B1セル、・・・M3セルまで、1セルずつファイル出力
 と繰り返し、最終行のM13のセルに到達するまで順にファイル出力しています。

※printステートメントについて(46行、49行目)
 printステートメントはデフォルトで改行コードが挿入されます。
 printステートメントの文末に「;(セミコロン)」をつけると、デフォルトの改行コードが付与されません。

EXCEL・VBAを実行してみよう

EXCEL・VBAを実行してみよう

CSV出力するためのEXCELデータを準備

実際にCSVファイルに出力するためのEXCELデータを下記図のとおりに準備してください。

その際、コーデイング例と合わせて、シート名を「サンプル」としてください。

(注)今回のプログラムではM列(13列分)まで、CSV出力するようにコーディングしています。

レコード数(行数)は、何行あっても大丈夫です。

プログラムで判定し、設定したレコード数分、繰り返しCSV(テキストファイル)を出力します。

VBAで出力するテストデータの説明

CSV出力ボタンをワンクリックでOK

配置した「CSV出力」ボタンをクリックして、VBAを実行してみましょう。

(注)ボタンを押す前に、もう一度、「デザインモード」をクリックして、デザインモードを解除してくださいね。

VBAが正常に終了するとメッセージボックスが画面に表示されます。

VBAでメッセージ出力するイメージ画像

出力されたCSVファイルの結果はこちらです。カンマ区切りでファイル出力されました。

VBAでCSV出力したイメージ画像

CSVの出力方法をカスタマイズ

CSVの出力方法をカスタマイズする方法

ダブルクォーテーションをつけずにCSV出力する方法

ご紹介したプログラムは、CSVファイルの各項目は、ダブルクォーテーション(””)で囲まれて出力する編集仕様です。

ダブルクォーテーションを出力しないようにCSV編集するには、以下の方法で簡単に行えます。

41行目を変更します

(変更前)
csvVal = “””” & outputAry(i, j) & “”””

(変更後)
csvVal = outputAry(i, j)

CSVファイル出力結果はこちらです。各項目の間に、ダブルクオーテーションが付与されなくなりました。

CSVファイル出力結果の画像
CSVファイル出力結果

まとめ

まとめ

VBAでCSVファイルを出力する方法について、本記事で解説しました。

当EXCEL・VBAを参考に改良すれば、簡単にプログラムのテストデータを作成することができます。

ご自分の環境に合わせていろいろカスタマイズしてみてください。

始めは完成までに時間がかかってしまうかもしれません。

実践中に分からないことが出てきたら、またこの記事を読んでみてください。

最後までご覧いただきありがとうございました。

⇒UDEMYの講座についてはこちらで詳しく解説しています。

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次