フォームから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は「書き込みモード(上書き)」。 - ヘッダー行を最初に書き込む。
- 第2引数
テンプレ3:複数行をまとめて出力(ListBoxから)
UserFormに ListBox1 と CommandButton1 を配置。
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ファイルを作成し、外部システムや他のアプリケーションと連携できる便利な仕組み を簡単に作成できます。
