• ベストアンサー

ACCESS 一つのフィールドに複数レコードの値をセットしたい

どなたか教えて下さい。 Aテーブルに、(1)コード (2)No というフィールドがあります。 例) (1)   (2) 1111  1 1112  2 1113  3 1111  4 この内容を、別テーブルに、 (1)コード (2) 1111   1,4 1112 2 1113 3 と、同一コードであれば、(2)フィールドにカンマ付きで全て 表示したいのです。 どなたか、お知恵をお貸し下さい。 よろしくおねがいいたします。

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

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

データベース関数などと命名した標準モジュールに以下の関数をコピペして保存して下さい。 次に、イミディエイトウインドウでテストして頂ければ幸いです。 [イミディエイト] ? DBSelect("SELECT F2 FROM A WHERE F1=1111") 1;4 ? DBSelect("SELECT F2 FROM A WHERE F1=1111", " And ") 1 And 4 And Public Function DBSelect(ByVal strQuerySQL As String, _              Optional ByVal strSeparator 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   ' =================   ' Begin With: rst   ' -----------------   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           Datas = Datas & .Fields(C) & strSeparator         Next C         .MoveNext       Next R      End If   End With   ' ---------------   ' End With: rst   ' =============== Exit_DBSelect:   DBSelect = Left(Datas, Len(Datas) + (Len(Datas) > 0))   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

その他の回答 (3)

noname#140971
noname#140971
回答No.3

No1 さんの回答を具体化すれば・・・。 <A> ID___F1_____F2 1____1111__1 2____1112__2 3____1113__3 4____1111__4 <クエリ2> F1_______F2_New 1111____1,4 1112____2 1113____3 このクエリを SQLビューで見れば、割と簡単なものです。 SELECT A.F1, DBSELECT("SELECT F2 FROM A WHERE F1=" & F1, ",") AS F2_New FROM A GROUP BY A.F1; まあ、課題は、DBSelect関数を用意できるか否かです。 <続く>

回答No.2

VBA ( DAO 使用 ) で作ってみました。( このプログラムのまま使用するのであれば参照設定で Microsoft DAO X.X Object Library を設定してください。) Aテーブル→Table1 別テーブル→Table2 としました。 また、Table2 は空であることが前提です。 Private Sub コマンド0_Click() Dim rsCode As Recordset Dim strWhere As String Dim rsNo As Recordset Dim rsDst As Recordset Dim strNos As String Set rsCode = CurrentDb.OpenRecordset("SELECT DISTINCT Table1.コード FROM Table1", dbOpenForwardOnly) Set rsDst = CurrentDb.OpenRecordset("SELECT * FROM Table2", dbOpenDynaset) Do Until rsCode.EOF strWhere = "WHERE Table1.コード=""" & rsCode.Fields("コード").Value & """" Set rsNo = CurrentDb.OpenRecordset("SELECT Table1.No FROM Table1 " & strWhere, dbOpenForwardOnly) strNos = "" Do Until rsNo.EOF If strNos <> "" Then strNos = strNos & "," End If strNos = strNos & rsNo.Fields("No").Value rsNo.MoveNext Loop Set rsNo = Nothing With rsDst .AddNew .Fields("コード") = rsCode.Fields("コード").Value .Fields("NO").Value = strNos .Update End With rsCode.MoveNext Loop Set rsCode = Nothing End Sub

noname#44485
noname#44485
回答No.1

こんばんは! ご質問を読んで、 横もちに替えるためにクロス集計して、 カンマで結合させるユーザー定義関数を作って文字連結させる方法 があるかなぁって思いました。 カンマつきではありませんが、 文字連結部分のSQLのご参考になれば。。。 SELECT T.コード, [1] & [2] & [3] & [4] AS 番号 FROM [ TRANSFORM Min(番号) SELECT コード FROM Aテーブル GROUP BY コード PIVOT 番号 In(1,2,3,4);]. as T

関連するQ&A