電子書籍の厳選無料作品が豊富!

ACCESS 2010を使用しています。

テーブルのレコードで、同じ種類のレコードを1行に纏め、最終的にCSVに出力したいのですが、
マクロなどで自動的におこなうことはできないでしょうか?


例.
テーブル名:test

【テーブルのイメージ】
通番 種類 金額
1 A 100
2 A 150
3 A 130
1 B 200
2 B 150
3 B 350
1 C 100
2 C 500
3 C 250


【CSVの出力イメージ】
 1,A,100,2,A,150,3,A,130
 1,B,200,2,B,150,3,B,350
 1,C,100,2,C,500,3,C,250

補足)◎通番についてですが、上記例だと1~30ですが、実際は1~30まであります。
    なお、通番はどの種類も1~30まであります

   ◎項目の数ですが、上記例だと3項目ですが、実際は30項目ほどあります。 

   ◎種類の数ですが、上記例だと3種類(A~C)ですが、実際は150種類あります。

   ◎CSV保存場所は、できれば都度、指定できるといいのですが、固定でもかまいません。


VBAの知識はほとんどありませんが、VBAによる回答でも構いません。

よろしくお願いいたします。

A 回答 (1件)

サンプルです。



Sub Sample()
  Dim i As Integer
  Dim strSQL As String
  Dim dbs As DAO.Database
  Dim rst As DAO.Recordset
  Dim OutData As String
  Dim kind As String

  strSQL = "SELECT * from test ORDER BY 種類, 連番"
  Set dbs = CurrentDb
  Set rst = dbs.OpenRecordset(strSQL, dbOpenForwardOnly)

  kind = ""
  OutData = ""

  Open "C:\Sample\output.csv" For Output As #1 ' 出力モードで開きます。

  With rst
    Do While Not .EOF ' レコードが無くなるまで繰り返します。
      If !種類 <> kind Then
        If OutData <> "" Then
          Print #1, Mid(OutData, 2)
        End If
        kind = !種類
        OutData = ""
      End If
      For i = 0 To .Fields.Count - 1
        OutData = OutData & "," & .Fields(i)
      Next
      .MoveNext
    Loop
    If OutData <> "" Then
      Print #1, Mid(OutData, 2)
    End If
  End With
  Close #1 ' ファイルを閉じます。
End Sub
    • good
    • 0
この回答へのお礼

bonaronさん、親切丁寧にありがとうございます。
おかげさまでできました。

勉強のため、教えてください。
Open "C:\Sample\output.csv" For Output As #1 ' 出力モードで開きます。

とありますが、これはどのようなことを行っているのでしょうか?

お礼日時:2016/07/13 08:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す