EXCELで編集したデータをCSVファイルに出力したいとき、どうやっていますか?
手動で保存すると間違いも起こりやすいですよね。 そんなときはVBAでサクッとコーデイングすれば、CSVファイルを簡単に出力することができます。
この記事では、EXCELのシートの内容をCSV(テキストファイル)に出力する方法をご紹介します。
現場でプログラムのテストを実施する際に、テストデータを作成するツールとしても使えるノウハウになりますので、ぜひ最後までお読みください。
VBAでコーディングしてみよう
初めてVBAマクロを操作する方は画面上に「開発」タブが表示されていません。
EXCELに「開発」タブが表示されない方は、こちらの記事を参考に設定してみてください。
ステップ1:VBAコントロールでデザイン
今回は、EXCELのシート上に簡単な画面デザインとしてボタンを配置してみます。
「挿入」をクリックしてフォームコントロールから左上にある「ボタン」を選択してみてください。
ボタンが配置できたら、次は、ボタンに対してオブジェクトのプロパティを設定します。
ボタンを右クリックして「プロパティ」を選択してください。
下記のとおりプロパティを設定できる画面が起動します。
ここまで設定できたら、1ステップ目は完了です。
ステップ2:VBAソースコードを書いてみよう
次は、VBE(Visual Basic Editor)にソースコードを書いてみましょう。
では、下記の図のとおり、「CSV出力」ボタンをダブルクリックしてください。
「CSV出力」のオブジェクトをクリックすると、下記画面のとおり、ソースコードを記入するためのVBE(Visual Basic Editor)が起動します。
下記のソースコードを参考にコーディングしてください。
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を実行してみよう
CSV出力するためのEXCELデータを準備
実際にCSVファイルに出力するためのEXCELデータを下記図のとおりに準備してください。
その際、コーデイング例と合わせて、シート名を「サンプル」としてください。
(注)今回のプログラムではM列(13列分)まで、CSV出力するようにコーディングしています。
レコード数(行数)は、何行あっても大丈夫です。
プログラムで判定し、設定したレコード数分、繰り返しCSV(テキストファイル)を出力します。
CSV出力ボタンをワンクリックでOK
配置した「CSV出力」ボタンをクリックして、VBAを実行してみましょう。
(注)ボタンを押す前に、もう一度、「デザインモード」をクリックして、デザインモードを解除してくださいね。
VBAが正常に終了するとメッセージボックスが画面に表示されます。
出力されたCSVファイルの結果はこちらです。カンマ区切りでファイル出力されました。
CSVの出力方法をカスタマイズ
ダブルクォーテーションをつけずにCSV出力する方法
ご紹介したプログラムは、CSVファイルの各項目は、ダブルクォーテーション(””)で囲まれて出力する編集仕様です。
ダブルクォーテーションを出力しないようにCSV編集するには、以下の方法で簡単に行えます。
41行目を変更します
(変更前)
csvVal = “””” & outputAry(i, j) & “”””
(変更後)
csvVal = outputAry(i, j)
CSVファイル出力結果はこちらです。各項目の間に、ダブルクオーテーションが付与されなくなりました。
まとめ
VBAでCSVファイルを出力する方法について、本記事で解説しました。
当EXCEL・VBAを参考に改良すれば、簡単にプログラムのテストデータを作成することができます。
ご自分の環境に合わせていろいろカスタマイズしてみてください。
始めは完成までに時間がかかってしまうかもしれません。
実践中に分からないことが出てきたら、またこの記事を読んでみてください。
最後までご覧いただきありがとうございました。