• 締切済み

Access VBAで複数行を1行にする方法

いつも参考にさせていただいています。 今回、新規の注文を受けることになり、データフォーマットを見せてもらったのですが、 ヘッダーと明細情報の1:Nになっていました。 これを1行づつにしたいのですが、明細行にヘッダー行とのキーになる項目がありません。 いろいろ試してみましたが、うまくいきませんでした、ご教授していただければ幸いです。 データ 項目1 項目2 項目3    項目4  項目5 1   会社名 送付先住所 担当者名 連絡先 2   品名  数量    備考 上記をこうしたいです。 項目1 項目2 項目3    項目4  項目5   項目6  項目7  項目8 1   会社名 送付先住所 担当者名 連絡先   品名   数量  備考  

みんなの回答

回答No.2

 普通は、DAOとかADODBなどで添付図のようなテーブル構造の二つのテーブルにインポートすると思います。もちろん、[発注台帳].[ID]、[発注明細].[発注台帳_ID]、[発注明細].[行番号]はVBAで生成する必要があります。[発注明細].[発注台帳_ID]+[発注明細].[行番号]は、複合キーとなります。また、[発注明細].[行番号]を列に設けない向きもありますが、それでは[発注明細]の並びを制御することはできません。 >Access VBAで複数行を1行にする方法  以上の全手続きを、ここで回答することはちょっと難しいと思いますよ。

kapa0919
質問者

お礼

f_a_007さん ありがとうございます。 私には、難しそうですね。(プロの方の考え方になるんですね。) 1回の注文は1、000件もなく、その都度クリアするので、単純に1と2を繋げれば よいと思っています。 別の方法を検討してみます。

kapa0919
質問者

補足

f_a_007さん 昨日1日考えて邪道かもしれませんが、項目1にヘッダー・明細の区分があるので、 項目1がヘッダー:1ならば、項目2の注文番号を取得し、次行に移動し項目5に 書き込むを最終行まで繰り返すで希望が叶いました。 ちなみにコードは  Dim rs As Recordset Dim add As String Set rs CurrentDb.OpenRecordset("テーブル名") Do Until rs.EOF If rs!項目1= 1 Then add = rs!項目2 rs.MoveNext rs.Edit rs.!項目5 = add rs.Update Else rs.Edit rs.!項目5 = add rs.Update EndIf rs.MoveNext loop rs.Close Set rs = Nothing

回答No.1

>Access VBAで複数行を1行にする方法 1、やり方は、幾らでもある。問題は、どこで躓いているのか? 2、その前に、なぜ?そんな無意味なことをするのか? >ヘッダーと明細情報の1:Nになっていました。 普通は、そのままにテーブルに反映するのでは?

kapa0919
質問者

補足

f_a_007さん レスありがとうございます。 説明不足ですみません。 f_a_007さんの疑問ですが、 1.やり方について 私の思いでは、1のヘッダー部と2の明細部に共通のキーがないので、 紐づけができないのでどうすればよいかと迷っています。 データにも不備がありましたが、1ヘッダー部には注文番号があります。 2明細部には注文番号はありません。 2.無意味なことについて 基幹システムの取り込み口が1行ごとで並びが違うのでその為の変換です。 言われています、「普通はそのままテーブルに反映」はテーブルの正規化と 言われているものだと思いますが、その為1のやり方に戻ると思うのですが 考え方がおかしいのでしょうか。 修正したデータ       項目1  項目2  項目3  項目4   項目5  項目6 ヘッダー部  1   注文番号 会社名 送付先住所 担当者名 連絡先 明細部    2   品名   数量  備考 ヘッダー部  1   注文番号 会社名 送付先住所 担当者名 連絡先 明細部    2   品名   数量  備考 明細部    2   品名   数量  備考 明細部    2   品名   数量  備考 明細部    2   品名   数量  備考