#365 | 配列データからカンマ区切りの文字列を形成する方法 | VBA | |
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 ※Join関数では、2つ目の引数で区切り記号を指定します。これを省略した場合には、スペースが区切り記号として使われます。 ※各フィールドのデータ型によっては、あるいはデータそのものの書式を変えて出力したいような場合には、上記のようなFieldsコレクションは使わず、配列の添え字1つ1つに特定のフィールドの値を代入していくようにするとよいでしょう。 例: varData(0) = rst!社員コード varData(1) = Format$(rst!誕生日, "yyyy年mm月dd日(aaa)") |
|||
|
Copyright © T'sWare All rights reserved |