質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

受付中

Accessのレポートで列の数が動的に変化するときの作成方法

moge56
moge56

総合スコア4

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

2回答

0リアクション

0クリップ

352閲覧

投稿2022/08/11 08:32

編集2022/08/11 08:35

前提

Microsoft Accessを使ってレポート作成をしています。
クロス集計した結果をレポートに反映させたいのですが、
列の数が動的に変化するため、改ページして2枚目以降のレポート作成をどのようにすればいいのか試行錯誤しています。
クロス集計で表示したい内容を出すところまではできましたが、
レポートの表示列が固定(?)なため、何列ごとに改ページするというような内容をVBでコードを書いていくしかないと思いますが、何列目が終わったら改ページして再度同様の内容で続きの集計結果を描写するという方法が思いつきません。
お知恵をお貸しいただけますと幸いです。

実現したいこと

  • 指定した年月の範囲を抽出条件としてクロス集計する
  • 一番左の列(日)は固定で、1日~31日を表示
  • 次の列から指定した年月日の範囲を表示

 <例> 2017年05月~2019年03月を抽出条件として指定して、その範囲の検索結果を表示

  • 指定した年月の範囲はクエリの列固定とする
  • 1枚の列表示は「日」の項目を合わせて5列表示とする

クロス集計結果

2021-012022-022022-032022-042022-052022-06---
金額金額金額金額金額金額
1日700001000000
2日3000060000100000
3日50000100000
4日1000080000
5日20000
6日40000
7日200000
8日

上記内容を下記のような形にレポート作成することは可能でしょうか?

  • 1枚目
2021-012022-022022-032022-04
金額金額金額金額
1日70000
2日3000060000
3日50000
4日1000080000
5日20000
6日40000
7日200000
8日
  • 2枚目
2021-052022-06
金額金額
1日1000000
2日10000030000
3日100000
4日
5日20000
6日
7日
8日

該当のソースコード

  • 日付テーブル(内容は1-31)
  • 販売テーブル
ID取引先コード取引先名商品コード商品名単価数量日付
11A商店11111商品A100102022/7/1
21A商店11111商品A10052022/7/14
31A商店11111商品A10062022/7/21
41A商店11111商品A10012022/6/16
51A商店11111商品A100222022/6/10
61A商店11111商品A10032022/6/14
71A商店11111商品A10072022/5/18
81A商店11111商品A10082022/5/27
91A商店11111商品A10092022/8/5
101A商店11111商品A100162022/8/9
111A商店11111商品A10052022/8/7
  • 集計クエリ
SELECT Format$(販売クエリ.日付, "yyyy-mm-01") AS [month], Day(販売クエリ.日付) AS 日, 販売クエリ.日付, 販売クエリ.取引先コード, 販売クエリ.取引先名, 販売クエリ.商品コード, 販売クエリ.商品名, [数量]*[単価] AS 値 FROM 販売クエリ;
  • クロス集計
TRANSFORMMin(Q_1.値) AS 値の最小 SELECT F_日付.日付 FROM F_日付 LEFT JOIN Q_1 ON F_日付.日付 = Q_1.日 GROUP BY F_日付.日付, Q_1.日付 PIVOT Q_1.Month IN ("2022-01-01","2022-02-01","2022-03-01","2022-04-01","2022-05-01","2022-06-01")

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

hatena19

2022/08/11 11:05

1ページは4か月分(4列)の表示ですが、列数は最大何列までですか。 また、行数は最小は何行、最大は何行でしょう。最大の場合は、1ページに収まりますか。
moge56

2022/08/11 11:34

列数はユーザーが指定する年月の範囲なので1つ以上~で最大何列になるかは不明です。 また、行数は1日~31日の31行で固定です。 1ページに31行と4か月分毎に表示したいと考えております。
hatena19

2022/08/11 11:36

日付テーブル(内容は1-31) とのことですので、行は31行固定ということですね。 この31行は1ページに収まりますか。
hatena19

2022/08/11 11:37

あっ、かぶりました。 状況は把握できました。
moge56

2022/08/11 11:39

最初は、1日~31日の行を列にして(31行と固定なため)、何か月分のデータを行にして・・と考えていましたが、 1日~31日を縦表示にしたいためぐるぐる悩み中です。。。
moge56

2022/08/15 04:54 編集

hatena19様 もし可能であれば、追加で質問させていただきたいのですが、 Accessのクエリは、100個UNION ALLするのと、数千回ループして一時テーブルにインサートするのはどちらが好ましいかご存じでしょうか?UNION ALLは重い処理で有名なのであまりするべきではないと思うのですが、かといってループを何千回するのもどうかと思いお尋ねしました。(年月と日の組み合わせを作成するときにふと思いました)

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。