【便利】VBAでEXCELシートの内容をCSVファイルに出力

  • URLをコピーしました!

VBAを使って具体的にどんなプログラムコードを書けばいいんだろう?

おそらくプログラミングを始めたばかりの方はそのような疑問を頭の中に抱いているのではないでしょうか。

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

システム開発の現場でプログラムのテストを実施する際に、テストデータを作成するツールとしても使えるノウハウになりますので是非マスターしてくださいね。

目次

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

CSVファイル出力を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に編集しています。

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

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

EXCEL・VBAを実行してみよう

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

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

(注)今回のプログラムではM列(13列分)まで、CSV出力するようにコーディング
   しています。レコード数は、何行用意していただいても大丈夫です。
   プログラムで判定し、設定したレコード数分、繰り返し処理を行います。

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

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

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

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

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

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

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

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

⇒プログラミング学習方法「写経」のやり方

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

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

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

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

41行目を変更します

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

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

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

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

まとめ

VBAでCSVファイルを出力する方法のまとめ

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

システム開発では、実際に入力ファイルを処理して実行するプログラムを作成・設計することは多々あります。

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


ご自分の環境に合わせていろいろカスタマイズしてみてください。
現場で応用が利くプログラムですので、是非、マスターして使ってください。

始めは完成までに時間がかかってしまうかもしれません。
慣れるまで、何度も実践していきましょう。

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

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

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