• ベストアンサー

クエリで抽出した行をコンマで区切って1つの表に出力したい

クエリで抽出した同じフィールドの名前をコンマで区切って TEXTかWordに出力する方法が知りたいです。 たとえば、社員名のフィールドを選択クエリで抽出し、 「伊藤, 佐藤, 田中, 橋本・・・」のように全てのデータを コンマで区切って結合して1つのデータにし、TEXTかWordに コピーしたいんです。 レポートに出力するのでもかまいません。 普通にエクスポートすると、行になって出てきてし まいます。 素人の質問で済みません。 どなたかお知恵をお貸しください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.2

Employee: ID_EName _1_伊藤 _2_佐藤 _3_田中 [イミディエイト] ? FileWrite("C:\Temp\Test.txt", DBSelect("SELECT EName FROM Employee")) True これは、Access2003 のイミディエイトウインドウでの実行結果です。 テーブル[Employee]の列[EName]を C:\Temp\Test.txt に出力しています。 C:\Temp\Test.txt: 伊藤;佐藤;田中 データがコンマでは区切られていません。 [イミディエイト] ? FileWrite("C:\Temp\Test.txt", DBSelect("SELECT EName FROM Employee", ",")) True C:\Temp\Test.txt: 伊藤,佐藤,田中 今度は、列データの区切り子にコンマ(,)を指定しているので目的が達成されています。 このように、FileWrite関数、DBSelect関数の類を開発すれば目的は容易に達成されます。 この2つの関数は、別に特段に難しいものではありません。 プログラマでもない素人の私が書ける程度のもんです。 ちょっと、サワリを示せば次のようです。 Public Function FileWrite(ByVal FileName As String, _              ByVal Text As String) As Boolean On Error GoTo Err_FileWrite   Dim fso As Object   Dim txs As Object      Set fso = CreateObject("Scripting.FIleSystemObject")   Set txs = fso.CreateTextFile(FileName, True)   txs.Write Text   FileWrite = True Exit_FileWrite:   Exit Function Err_FileWrite:   MsgBox Err.Description & "(FileWrite)", vbExclamation, " 関数エラーメッセージ"   Resume Exit_FileWrite End Function Public Function DBSelect(ByVal strQuerySQL As String, _              Optional ByVal strSeparator1 As String = ";", _              Optional ByVal strSeparator2 As String = "") As String On Error GoTo Err_DBSelect   Dim I   As Integer   Dim J   As Integer   Dim R   As Integer   Dim C   As Integer   Dim M   As Integer   Dim N   As Integer   Dim rst  As ADODB.Recordset   Dim fld  As ADODB.Field   Dim Datas As String      Set rst = New ADODB.Recordset   With rst      .Open strQuerySQL, _         CurrentProject.Connection, _         adOpenStatic, _         adLockReadOnly      If Not .BOF Then       M = .RecordCount - 1       N = .Fields.Count - 1       .MoveFirst       For R = 0 To M         For C = 0 To N           ・・・・・         Next C         ・・・・・         .MoveNext       Next R       ・・・・・      End If   End With Exit_DBSelect:   DBSelect = Replace(Datas, strSeparator1 & strSeparator2 & strSeparator1, "")   Exit Function Err_DBSelect:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSelect)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBSelect End Function こういう方向性でも良いのであれば参考にされてください。 なお、・・・・・部は、丸回答というルール違反を避けるためで他意はありません。

milky2222
質問者

お礼

お礼が遅くなってすみません。 格闘してみましたが、やっぱり私には無理みたいです…。 ご親切にありがとうございました。

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

DBが何なのか書かれていませんが・・ 一般的なDBだと何行になるかわからないものをカンマ区切りで出力するようなオプションはないと思います。普通にエクスポートしておいてから、テキストファイル処理で改行コード→カンマの変換をかける方がいいと思います。

milky2222
質問者

お礼

すみません。ACCESS 2003です。 現在は、EXCELにエクスポートしてから、CONCATENATE関数で地道に繋げています。 簡単なマクロを作って処理してますが、行数が一定していないので、かなり大変な作業です。 CONCATENATE関数のような関数があれば、簡単に繋げられるのではないか、と思ったのですが…。 >テキストファイル処理で改行コード→カンマの変換をかける 素人なもので、処理の方法が分かりません。 自分でも調べてみますが、よければご教授願います。

関連するQ&A