重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

クエリで抽出した同じフィールドの名前をコンマで区切って
TEXTかWordに出力する方法が知りたいです。

たとえば、社員名のフィールドを選択クエリで抽出し、
「伊藤, 佐藤, 田中, 橋本・・・」のように全てのデータを
コンマで区切って結合して1つのデータにし、TEXTかWordに
コピーしたいんです。
レポートに出力するのでもかまいません。

普通にエクスポートすると、行になって出てきてし
まいます。

素人の質問で済みません。
どなたかお知恵をお貸しください。

A 回答 (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

こういう方向性でも良いのであれば参考にされてください。
なお、・・・・・部は、丸回答というルール違反を避けるためで他意はありません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/06/11 05:35

DBが何なのか書かれていませんが・・



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

すみません。ACCESS 2003です。

現在は、EXCELにエクスポートしてから、CONCATENATE関数で地道に繋げています。
簡単なマクロを作って処理してますが、行数が一定していないので、かなり大変な作業です。
CONCATENATE関数のような関数があれば、簡単に繋げられるのではないか、と思ったのですが…。

>テキストファイル処理で改行コード→カンマの変換をかける
素人なもので、処理の方法が分かりません。
自分でも調べてみますが、よければご教授願います。

お礼日時:2008/05/23 21:54

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

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