まえきんブログ

*文系出身SEが綴る、日常・趣味・体験談・スキルアップについての雑記ブログ*

【事例で学ぶExcel VBA #5】CSVデータを書き出す


まえきんです!

このシリーズでは私が普段実務で手作業の自動化ツールを作成する中で実装している

処理の一部を取り上げ、ブログ掲載用にカスタマイズしたものをご紹介しています。

全て私の実務ベースで使っているものなので、使いこなすことが出来れば、

必ずや手作業の自動化に一役買ってくれる内容ばかりと勝手に自負しています笑 😁

「本だけじゃなくてExcel VBAを実践的に勉強してみたい!」「ハードル高くて苦手

だったけどもう一度VBAを勉強してみたい!」「実務で役に立つVBAを学びたい!」

そんな方々の学習意欲向上の一助になればと思っております😊

👇さて、今回のテーマはコチラ

#5:CSVデータを書き出す

以前にご紹介した#1のマクロでは、CSVデータをエクセルシートに取り込むマクロの

事例をご紹介しました。今回はその逆、エクセルシートからCSVデータを書き出す

マクロを見ていきましょう。#1の詳細について知りたい方は是非下記の記事も

ご覧下さい!
maekinblog.com

ツールの全体像

まずは任意のエクセルシートに、CSVを書き出すための一覧を作成しておきます。

本ツールのVBAコードは以下の通りです。

VBAコード ※パソコンでの閲覧推奨
Option Explicit
'===================================================
'ツール名:CSVデータ書込ツール(まえきんブログ掲載用にカスタマイズ)
'作成日:2022/03/26
'処理概要:CSVデータ書込
'付属機能:なし
'作成者:まえきん
'===================================================

'===================================================
'定数宣言
'===================================================
Const kakikomi As String = "CSV書込シート"

'===================================================
'関数名 :メイン関数(CSVデータ書込ボタン)
'処理内容:CSVデータ書込
'トリガー:CSVデータ書込ボタンを押下した際にコールされる
'引数  :なし
'戻り値 :なし
'===================================================
Private Sub CommandButton1_Click()
     '----------
    '変数宣言
    '----------
    'CSV書き出し用変数宣言
    Dim filePath As String 'CSV出力先ファイルパス変数
    Dim i As Long
    Dim fileNo As Integer 'ファイル番号

    '----------
    '初期値設定(ツールと同じ階層にCSV出力)
    '----------
    filePath = ActiveWorkbook.Path & "\読者様へメッセージ.csv"
    
    'FreeFile関数で使用可能なファイル番号取得
    fileNo = FreeFile

    '----------
    'CSVデータ出力処理
    '----------
    'ファイルオープン(存在しない場合は自動生成)
    Open filePath For Output As #fileNo

    'データレコード書き込み
    For i = 1 To 5
        With Worksheets(kakikomi)
            Print #fileNo, .Cells(i, 1) & ","; .Cells(i, 2)
        End With
    Next i
    
    '書き込み用CSVファイルを閉じる
    Close #fileNo
    
    '----------
    '処理完了通知
    '----------
    MsgBox "CSVデータを作成しました!"
End Sub
VBAコード解説

'----------
'初期値設定(ツールと同じ階層にCSV出力)
'----------
まずは書き出し対象のCSVファイル名と書き出し先を指定する処理を記述します。

私はいつも「ActiveWorkbook.Path」を使用しています。

こうしておくと、どの階層にファイルを置いていてもマクロ実行時に現在地の

ファイルパスをきちんと判断して拾い、マクロブックと同階層に作成されるように

指定できるので大変重宝しています。次にFreeFile関数で使用可能なファイル番号を

取得しておきます。これはCSVファイルを書き出す時のお決まりの下準備になります。

'----------
'CSVデータ出力処理
'----------
さて、ここからは実際にCSVデータを書き出す処理を記述していきます。

OpenメソッドCSVファイルオープン、②PrintステートメントCSV書き出し、

CloseメソッドCSVファイルクローズの手順を踏みます。

ちなみに、②のPrintステートメントにて、For文を使って1行ずつループで書き出しを

行うわけですが、今回のケースではMAX5行分のレコードを書き込むのでループの

終わりは「5」になります。もう少し汎用性を持たせる高度なマクロになってくると、

このループの終わりを動的に設定する必要も出てくることになるでしょう。

この応用版マクロのお話は、またいずれ😊

マクロ実行結果

処理完了通知

CSV保存 ※マクロブックと同じ階層に保存されている

CSVの中身

上記の通り、結果が得られましたでしょうか😊

私は実務でCSV→エクセル取込、エクセル→CSV書き出しいずれのケースも

扱うことが多く、このツールの出番も多いです😁

このシリーズも今回で早5回目を迎えましたが、いかがでしょうか。

役に立ちそうだ!!と思えた事例に出会えたでしょうか。

一度ノウハウを得ると、その応用やイデア次第で色んなツールが作れてしまう

のでそれもExcel VBAの醍醐味の一つだと私は捉えています。

当ブログの読者様はもちろん、偶然この記事に辿り着いて下さった皆さまとも今後も

この素晴らしさを楽しく共有し、スキルアップもしていけたらと思っています👍✨

今後とも、本シリーズをよろしくお願いいたしますm(_ _)m

今回はこれで以上です😊
最後まで読んで頂きありがとうございました!ではまた!