Microsoft Access 掲示板

レポート出力用のテーブル(クエリ?)を作りたい

5 コメント
views
4 フォロー

お世話になります。

ID 社名   〒  住所   TEL  りんご  梨  ぶどう みかん
1 A社 000-0000 東京 00-0000   1   2   2   1
2 B社 000-0001 京都 00-0001   1   1   1   1
3 C社 000-0002 大阪 00-0002   1   1   1   1
上記のようなテーブルをExcelからインポートしてきたとして、発送用のレポートのレコードソースにするために
1 A社 000-0000 東京 00-0000 りんご
2 A社 000-0000 東京 00-0000 梨
3 A社 000-0000 東京 00-0000 梨
4 A社 000-0000 東京 00-0000 ぶどう
5 A社 000-0000 東京 00-0000 ぶどう
6 A社 000-0000 東京 00-0000 みかん
7 B社 000-0001 京都 00-0001 りんご
8 B社 000-0001 京都 00-0001 梨



のようなテーブル(クエリ?)を作成したいです。
社名ID、社名、住所、TELフィールドを持つ社名マスター
商品ID、商品名フィールドを持つ商品マスターは作成しましたが、ここからどうしたらいいのか分かりません。
助けて頂きたいです。

My Car Bomber
作成: 2023/12/07 (木) 17:16:34
最終更新: 2023/12/08 (金) 13:27:28
通報 ...
1

できるだけクエリのみで解決したいのか、VBAを使用してもよいかによって
提示される解決方法は異なります。

上記のようなテーブルをExcelからインポート

大元のデータがExcelワークシート上のテーブルなのであれば、
先に Power Query によってそのような形に変換されたテーブルを
Access データベースにインポートする、という選択肢もあるでしょう。

2
My Car Bomber 2023/12/08 (金) 13:58:40 7fdfc@46fae >> 1

Excelファイル自体は加工を行わず、インポート時に必要なフィールドだけを取り込み、それを加工してレコードソースを作成したいです。

注文数量(タイトル行)
2023/12/08 注文
(空白行)
No 社名   〒  住所   TEL  りんご  梨  ぶどう みかん
1 A社 000-0000 東京 00-0000   1   2   2   1
2 B社 000-0001 京都 00-0001   1   1   1   1
3 C社 000-0002 大阪 00-0002   1   1   1   1

1. Excel取込フォームの取込ボタンのクリック時イベントで↑のExcelファイルを選択

T_取込テーブル

取込ID  ID  りんご 梨 ぶどう みかん 注文日
 1   1    1   2   2    1  2023/12/08
 2   2    1   1   1    1  2023/12/08
 3   3    1   1   1    1  2023/12/08

2. ExcelファイルからID、りんご、梨、ぶどう、みかんのフィールドをインポートしてT_取込テーブルに追加(注文日はExcelファイル2行目の日付を入れる)

T_ラベル出力用

ラベルID 社名  〒    住所  TEL   商品
  1  A社 000-0000 東京 00-0000 りんご
  2  A社 000-0000 東京 00-0000 梨
  3  A社 000-0000 東京 00-0000 梨
  4  A社 000-0000 東京 00-0000 ぶどう
  5  A社 000-0000 東京 00-0000 ぶどう
  6  A社 000-0000 東京 00-0000 みかん
  7  B社 000-0001 京都 00-0001 りんご
  8  B社 000-0001 京都 00-0001 梨
  ・
  ・
  ・

T_取込テーブルとマスターで↑のようなレコードを作り、ラベルシール出力用レポートのレコードソースにしたいです。

4
ABCDEFGHI
1注文数量
22023/12/8注文
3
4No社名住所TELりんごぶどうみかん
51A社000-0000東京00-00001221
62B社000-0001京都00-00011111
73C社000-0002大阪00-00021111

参照元のExcelワークシートが上記のようなレイアウトになっている、
ということなのであれば、少なくとも Access のテーブルへの取込は
オートメーションによって行うことになるでしょう。

Excelワークシートからデータを取り込んだテーブルを使用して
レポートへの出力を行う処理については、それとはまた別の問題です。

5
My Car Bomber 2023/12/11 (月) 13:43:25 7fdfc@46fae >> 2

概ねそんな感じのレイアウトで、A列も空白になっています。
いままでExcel上で整形してから取込むといったことしかしてこなかったので、どうすれば自動で4行目のフィールドからとりこめるのか分かりません。

3
すずやん 2023/12/08 (金) 14:09:26

わたしが構築する場合は、という想定で記載してみます。
他に良い方法はいくらでもあると思うので、あくまで参考までに。

※Excelからインポートした後

既存のテーブル:
T-INPORT:インポートしたテーブル
M-社名:社名マスター
M-商品:商品マスター

作るテーブル:
T-購入履歴:インポートしたテーブルから購入された情報を抽出するテーブル
項目:「ID」「社名ID」「商品名ID」

作るView:
V-発送用レポート:発送用のレポートのレコードソース

発送用のレポート:
発送レポート

1.まずT-INPORTから1行、読みます。

2.T-INPORTの「社名」とM-社名を比較し、社名マスターのIDを取得します。これは変数に一時保持します。

3.T-INPORTの「りんご」の個数をもとに「りんごの商品ID」「社名のID」「個数」を関数に渡します

 ※上記の「関数」とは渡された引数をもとに「T-購入履歴」に情報を書き込む機能です
  中では「個数」の回数分、「T-購入履歴」に書き込みが発生します。

4.T-INPORTの「梨」の個数をもとに「梨の商品ID」「個数」「社名のID」を関数に渡します
※以下「ぶどう」「みかん」同じ

5.「4.」が終わったら、「T-購入履歴」と「M-社名」「M-商品」をViewで連結した「V-発送用レポート」に中身が発生していると思いますので、これをもとに「発送レポート」を出力します。

以上です。

これだと品目が増えるとプログラムの修正が必要なので、かなり力技です。
が、とりあえずなんとかなるかと思います。