#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)")
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved