VBA上で取り扱っている1まとまりのデータ、例えばテーブルやクエリのレコードセットから取得した1レコード分のデータをCSVファイル(カンマ区切り記号付きテキストファイル)に出力するような場合、1つ1つのデータ項目をカンマで区切る(というよりカンマで繋げる)必要があります。
各データがそれぞれ別の変数に格納されている場合には、単純な文字列の結合で区切り記号を付加しますが、データ項目が配列に格納されている場合には、VBAの組み込み関数「Join関数」を使うことによって一発でカンマ記号を付加することができます。
次のサンプルコードでは、「社員」テーブルの全レコードをループで読み込み、1件ごとにJoin関数でカンマを付け、それをCSVファイルに出力しています。テーブル名の部分と出力先CSVファイル名の部分を引数に設定したプロシージャにすれば、レコードの読み込み+CSV書き出しの部分のコードはかなり汎用性のある使い方ができると思います。
Public Sub JoinTest()
Dim dbs As Database
Dim rst As Recordset
Dim varData() As Variant
Dim iintLoop As Integer
Dim lngFileNum As Long
'出力先CSVファイルを開く
lngFileNum = FreeFile()
Open "c:\test\社員.CSV" For Output As #lngFileNum
'テーブルを開く
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("社員")
With rst
'テーブルのフィールド数に合わせて配列サイズを定義
ReDim varData(rst.Fields.Count)
'テーブルを読み込むループ
Do Until .EOF
'1レコード分の全フィールドの読み込みループ
For iintLoop = 0 To rst.Fields.Count - 1
'1フィールド分の値を配列に代入
varData(iintLoop) = Nz(rst.Fields(iintLoop))
Next iintLoop
'配列をカンマで結合してCSVに出力
Print #lngFileNum, Join(varData, ",")
.MoveNext
Loop
.Close
End With
Close #lngFileNum
End Sub
|