MS Access

Accessで複数レコードを1レコードにまとめる(運送会社送り状作成のため

投稿日:

Accessに入れてある楽天の注文データをもとに、運送屋さんの送り状伝票を作ろうと思い立った。
しかし、楽天の注文データは、同一の受注番号で複数の商品に分かれている。
例えば一人の人が3点買い物をしたら、レコードは3つできている。
このレコードを一つにまとめて、商品1、商品2・・・商品9というフィールドにそれぞれ入れたい。
やりたいことはそういうことなのだが、WEBでいろんな知恵をあさっても、なかなか自分のやり方にマッチするものが出てこなかったので、自分で作ってみた。

以下、コード。

Public Function ProdHolizon(ORDERNO As String, NO As Integer)
'
'[受注番号] と表示位置(1-10)をキーに商品名を取得し横展開

  Dim dbs As Database
  Dim rst As Recordset
  Dim strSQL As String

    Set dbs = CurrentDb
    strSQL = "SELECT TOP 1 temp1.[商品名] FROM (select top " & NO & " [商品名] from [楽天販売TBL] WHERE [受注番号] = '" & ORDERNO & "' order by [商品名])  AS temp1 ORDER BY temp1.商品名 DESC;"
    Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset, dbSeeChanges)
    r = DCount("ID", "楽天販売TBL", "[受注番号] = '" & ORDERNO & "'")
    If NO > r Then
      ProdHolizon = Null
    Else
      ProdHolizon = rst!商品名
    End If
    rst.Close
End Function

上記のコードを、クエリの列にセットする。
例えば、以下のように。

商品が1から10までなら、10列分、作る。
引数は、受注番号と注文された商品名のレコード数の2つ。

実行結果は、以下。

結構、簡単にできたかな。

-MS Access

執筆者:

関連記事

no image

Accessで、見積書のような「サブフォームつきフォームを丸々コピー」する方法・・・見つけるのに、四苦八苦。

最初、複雑でかつ読み取り専用のクエリを元にしたフォームをコピーしようとしていたために、 acCmdPasteAppendのラインで「コマンドまたはアクション”追加貼り付け”は無効です」のエラーが出て、 …

no image

ドメインのDNSの管理会社を移転したら、BASP21でSMTP送信がエラー

CPIも、BASP21も、どちらもマイナー(笑)なので、誰の役にも立たないかもしれないけど、自分の備忘録として、残します。 これまでCPIでWebもメールも動かしていたが、WebのみをShopifyに …

no image

AccessでコンボボックスのリストをVBAで行番号で選択する

こんな方法があるのは知らなかった。 メモメモ。 ‘コンボボックスの1行目を選択する ‘Forms!見積請求書F.cbo銀行振込先 = Forms!見積請求書F.cbo銀行振込先.ItemData(0) …

Access「実行時エラー3061 パラメータが少なすぎます。2を指定してください」で意外な決着

クロス集計クエリをVBAで読むときで、かつパラメータクエリを使う場合には、クエリのパラメータパネルで、別途、パラメータを指定しなくてはならない(VBAで使わないなら不要) 本日のトラブルは、その後、W …

Accessのフォームをデザインしようとすると固まる

タイミングとしては、フォームをデザインビューにした直後、プロパティシートをクリックしたとき。それだけで数十秒待たされる。 原因は、なんとなく、気が付いている。 ついさっき、フォームで使っているクエリに …