Excel VBA 逆引き集 | フォームからCSV出力

Excel VBA
スポンサーリンク

フォームからCSV出力の基本

Excel VBAで「フォームに入力したデータをCSVファイルとして保存したい」という場面では フォームからCSV出力 を組み込むと便利です。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。


基本の考え方

  • CSVファイルとは?
    「Comma Separated Values(カンマ区切り)」の略で、テキスト形式でデータを保存するファイル。Excelや他のソフトでも読み込める。
  • 用途:
    • フォーム入力データを外部システムに渡す
    • データを軽量なテキスト形式で保存
    • 他のアプリケーションとの連携

テンプレ1:フォーム入力をCSVに書き出す

UserFormに TextBox1(氏名)TextBox2(年齢)TextBox3(住所)CommandButton1(CSV出力ボタン) を配置。

Private Sub CommandButton1_Click()
    Dim fso As Object
    Dim ts As Object
    Dim filePath As String
    
    ' 保存先のパス(例:デスクトップ)
    filePath = Environ("USERPROFILE") & "\Desktop\output.csv"
    
    ' FileSystemObjectを使ってCSVファイルを開く
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' 既存ファイルがあれば追記、なければ新規作成
    Set ts = fso.OpenTextFile(filePath, 8, True)
    
    ' CSV形式で書き込み(カンマ区切り)
    ts.WriteLine TextBox1.Value & "," & TextBox2.Value & "," & TextBox3.Value
    
    ts.Close
    
    MsgBox "CSVファイルに出力しました!" & vbCrLf & filePath
End Sub
VB
  • ポイント:
    • Environ("USERPROFILE") & "\Desktop\" でユーザーのデスクトップに保存。
    • OpenTextFile の第2引数 8 は「追記モード」。
    • WriteLine で1行ずつ書き込む。

テンプレ2:ヘッダー付きCSVを出力

Private Sub CommandButton1_Click()
    Dim fso As Object, ts As Object
    Dim filePath As String
    
    filePath = Environ("USERPROFILE") & "\Desktop\output.csv"
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' 新規作成(上書きモード)
    Set ts = fso.OpenTextFile(filePath, 2, True)
    
    ' ヘッダー行
    ts.WriteLine "氏名,年齢,住所"
    
    ' データ行
    ts.WriteLine TextBox1.Value & "," & TextBox2.Value & "," & TextBox3.Value
    
    ts.Close
    
    MsgBox "CSVファイルを作成しました!"
End Sub
VB
  • ポイント:
    • 第2引数 2 は「書き込みモード(上書き)」。
    • ヘッダー行を最初に書き込む。

テンプレ3:複数行をまとめて出力(ListBoxから)

UserFormに ListBox1CommandButton1 を配置。
ListBoxに複数行のデータがある場合、それをCSVに出力。

Private Sub CommandButton1_Click()
    Dim fso As Object, ts As Object
    Dim filePath As String
    Dim i As Long
    
    filePath = Environ("USERPROFILE") & "\Desktop\list_output.csv"
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.OpenTextFile(filePath, 2, True)
    
    ' ヘッダー
    ts.WriteLine "氏名,年齢"
    
    ' ListBoxの内容をCSVに書き込み
    For i = 0 To ListBox1.ListCount - 1
        ts.WriteLine ListBox1.List(i, 0) & "," & ListBox1.List(i, 1)
    Next i
    
    ts.Close
    
    MsgBox "ListBoxの内容をCSVに出力しました!"
End Sub
VB
  • ポイント:
    • ListBox1.List(i, 0) は1列目、ListBox1.List(i, 1) は2列目。
    • 複数行をループで書き込む。

テンプレ4:保存場所を選べるようにする(SaveAsダイアログ)

Private Sub CommandButton1_Click()
    Dim filePath As Variant
    Dim fso As Object, ts As Object
    
    ' 保存ダイアログを表示
    filePath = Application.GetSaveAsFilename( _
        InitialFileName:="output.csv", _
        FileFilter:="CSVファイル (*.csv), *.csv")
    
    If filePath = False Then Exit Sub
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.OpenTextFile(filePath, 2, True)
    
    ts.WriteLine "氏名,年齢,住所"
    ts.WriteLine TextBox1.Value & "," & TextBox2.Value & "," & TextBox3.Value
    
    ts.Close
    
    MsgBox "CSVファイルを保存しました!" & vbCrLf & filePath
End Sub
VB
  • ポイント:
    • Application.GetSaveAsFilename で保存場所を選べる。
    • ユーザーが自由に保存先を指定可能。

例題で練習

'例1:フォーム入力をCSVに追記保存
'例2:ヘッダー付きCSVを新規作成
'例3:ListBoxの内容をCSVに出力
'例4:保存場所を選べるダイアログ付きCSV出力
VB

初心者向けポイント

  • FileSystemObjectを使う → VBAでテキストファイル操作の基本。
  • 追記モードと上書きモードを使い分ける → 新規作成か追加保存かを選べる。
  • ヘッダー行を付けると親切 → CSVを開いたときにわかりやすい。
  • 保存ダイアログを組み合わせると柔軟 → ユーザーが保存場所を選べる。
  • ListBoxやフォーム入力をそのままCSVに書き込める → 実務でよく使う。

👉 この「フォームからCSV出力テンプレ」を覚えておけば、Excel VBAで 入力フォームから直接CSVファイルを作成し、外部システムや他のアプリケーションと連携できる便利な仕組み を簡単に作成できます。

タイトルとURLをコピーしました