和風スパゲティのレシピ

日本語でコーディングするExcelVBA

43本目:CSV出力

Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、
VBA100本ノック」に対する私の回答と解説のページです。

100本ノックの出題リストはこちらから
excel-ubara.com

出題:CSV出力

#VBA100本ノック 43本目
表範囲をCSV出力してください。
・A列:yyyy-mm-dd
・B列:カンマなし整数
・C列:カンマなし小数2桁
・D列:文字列 (適宜ダブルクォートで囲む)
※画像はあくまで1例です。
CSVファイルはブックと同一フォルダに出力(SJIS)。
※出力ファイルおよびブック・シートの指定は任意

◇ 出題ページはこちら

ソースコード

Option Explicit

' 100本ノック043:CSV出力
Sub CSVファイルを出力する()

    WS_CSV.Copy
    Dim ws出力シート As Worksheet
    Set ws出力シート = ActiveSheet

    ' データの表示書式を設定
    ws出力シート.Columns(1).NumberFormatLocal = "yyyy-mm-dd"
    ws出力シート.Columns(2).NumberFormatLocal = "0"
    ws出力シート.Columns(3).NumberFormatLocal = "0.00"

    ' CSV形式で保存
    Dim 保存ファイル名 As String
    保存ファイル名 = Replace(ThisWorkbook.Name, ".xlsm", "csv")
    
    Dim wb保存ブック As Workbook: Set wb保存ブック = ws出力シート.Parent
    wb保存ブック.SaveAs ThisWorkbook.Path & "\" & 保存ファイル名, xlCSV
    wb保存ブック.Close False
    
End Sub

解説

CSVファイルを出力する問題です。

CSVファイルの出力にはいろいろな種類と方法がありますが、
今回は最も簡単なShift-JIS形式の出力でした。


Shift-JIS形式の場合はFileSystemObjectやADODBを使わなくても、
「名前を付けて保存⇒.csv形式」での保存で目的を達成できます。


この場合は表示書式がそのまま反映されますので、
各列を目的の書式にしてから保存するだけでうまくいくことが多いです。

CSV処理は複雑になってしまうことも多いため、だからこそ一旦この方法を試し、
うまくいったらそれでよしというスタンスも良いと思います。