Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 7 Professional : Access 2010)
複数レコードを結合する
投稿日時: 18/05/07 22:58:39
投稿者: seint-takemaru

テーブルから特定のフィールドを選択し、クエリにて以下のような結果が得られたとします。
ここでやりたいことは、番号のフィールドで、同じ番号があったら、そのレコード同士をを結合
させて、集計したいのです。
下の例1で具体的に説明しますと、番号の「5144002」が同一番号なので結合させて、使用数の
合計を返したい。
※結合の時に仕様のフィールドの長さを上書きするのではなく、後ろに追加したい。
 
当然ですが、単純な集計を行っても思った通りの結果になりませんでした。
思っていることは、例2のようにしたいのです。
 
うまく説明できず、恐縮ですが、皆様のお力を貸していただきたくお願いいたします
 
≪例1≫

記号	名称	            番号     仕様	      使用数
A	皿小ねじ	    5144002    長さ 7mm	        3
A	皿小ねじ(ウィット)      5144002     長さ 9mm	        2
B	トラスねじ	       5180001	     長さ 4mm	        1
C	なべねじ	     4930001	     長さ 5mm           7

≪例2≫
記号	名称	      番号   仕様	           使用数
A	皿小ねじ	 5144002  長さ 7mm,長さ9mm	      5  
B	トラスねじ	 5180001    長さ 4mm	              1
C	なべねじ	 4930001    長さ 5mm	              7

回答
投稿日時: 18/05/08 09:51:46
投稿者: hatena
投稿者のウェブサイトに移動

下記のリンク先の私(hatena19)の回答のDJoin2関数を利用すれば可能です。
 
クエリの重複する出力結果を一行にまとめたい。 - マイクロソフト コミュニティ
https://answers.microsoft.com/ja-jp/office/forum/office_2010-access/%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%AE%E9%87%8D/e2ff1168-7bfe-45cf-9150-bf97541c2b6d
 
最終目的がレポートならば、下記の方法が高速です。
 
グループ内のデータを横連結する - hatena chips
https://hatenachips.blog.fc2.com/blog-entry-12.html

投稿日時: 18/05/08 14:32:10
投稿者: seint-takemaru

hatena19さん、早速ご教示くださいまして、ありがとうございます。
 
 ご紹介頂きましたYU-TANG's 様のURLにアクセスしましたが、ページエラーが発生し、
内容の閲覧ができませんでした。
==============================================================
現状のクエリからDJoin関数で副担当を結合した結果を出力する。
DJoin関数 - リスト文字列を取得する方法|YU-TANG's MS-Access Discovery
==============================================================
 
とても図々しいことを承知でお願いをしたいのですが、具体的なやり方を
ご教示いただければ幸いです。
 
よろしくお願いいたします。
 
 
  

回答
投稿日時: 18/05/08 15:14:08
投稿者: Moko

こちらからどうぞ。
 
DJoin 関数 - リスト文字列を取得する方法
https://web.archive.org/web/20150517052733/http://www.f3.dion.ne.jp/~element/msaccess/AcTipsVbaDJoin.html

回答
投稿日時: 18/05/08 15:31:47
投稿者: hatena
投稿者のウェブサイトに移動

前回紹介した マイクロソフト コミュニティ のスレッドの最後の方にコードが提示してあります。
 
一応、コピーして貼り付けおきますね。
 

Function DJoin2( _
         fieldname As String _
         , tablename As String _
           , Optional wherecondition As String _
             , Optional maxlength As Integer = 255 _
               , Optional delimiter As String = "," _
                 , Optional isdistinct As Boolean = False _
                   , Optional orderby As String _
                     ) As String
    On Error GoTo ErrorHandler

    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim strData As String
    Dim strSql As String
    Dim strResult As String

    If maxlength <= 0 Then Exit Function

    strSql = "SELECT " & IIf(isdistinct, "DISTINCT ", "") & fieldname & " " _
             & "FROM " & tablename & " " _
             & IIf(Len(wherecondition) > 0, "WHERE " & wherecondition, "") & " " _
             & IIf(Len(orderby) > 0, "ORDER BY " & orderby, "")

    Set cnn = CurrentProject.Connection
    Set rst = New ADODB.Recordset

    With rst
        .Open strSql, cnn, adOpenForwardOnly, adLockOptimistic, adCmdTableDirect
        If Not .EOF Then '対象レコードがある場合のみ(2015/12/01 hatena追加)
            strResult = .GetString(adClipString, , , delimiter)
            strResult = Left(strResult, Len(strResult) - 1)
        End If
        .Close
    End With

    If Len(strResult) > maxlength Then
        strResult = Left(strResult _
                         , InStrRev(strResult, delimiter, maxlength - 2, vbBinaryCompare) - 1) _
                         & "..."
    End If

ExitProcedure:
    On Error Resume Next
    Set rst = Nothing
    cnn.Close: Set rst = Nothing
    DJoin2 = strResult    ' 戻り値をセットします。
    Exit Function

ErrorHandler:
    ' クエリー内での使用を考慮して、エラーのダイアログ表示は
    ' 行なわず、エラーをそのまま戻り値に入れます。
    strResult = Err & ":" & Err.Description
    Resume ExitProcedure

End Function

 
Mokoさんの回答のリンク先のものでもいいですが、
こちらの方は、その高速版です。
使い方はどちらも同じです。

投稿日時: 18/05/08 22:53:56
投稿者: seint-takemaru

Moko,hatenaさん、ありがとうございます。
 
ご教示頂きましたVBAを理解するには、相当の時間がかかると思われますが、頑張ります。
取り急ぎ、お礼まで...
ちなみにですが、コードを単純にコピペしただけでは意図した結果は得られないですよね?
知識不足で大変恐縮です。

回答
投稿日時: 18/05/17 23:16:16
投稿者: hatena
投稿者のウェブサイトに移動

seint-takemaru さんの引用:
ご教示頂きましたVBAを理解するには、相当の時間がかかると思われますが、頑張ります。
取り急ぎ、お礼まで...
ちなみにですが、コードを単純にコピペしただけでは意図した結果は得られないですよね?

 
上の回答のコードをコピーして、標準モジュールに貼り付けます。
 
テーブルから集計クエリを作成して、
 
フィールド: 記号 名称 番号    仕様: ※1  使用数
集計:        先頭 先頭 グループ化 演算    合計

※1には下記の式
 
DJoin2("仕様","テーブル名","番号=" & First([テーブル名].[番号]))

トピックに返信