Microsoft Access 掲示板

クロス集計クエリからレポート印刷 / 16

50 コメント
views
4 フォロー
16
hiroton 2021/03/19 (金) 10:39:18 19984@f966d

ワークテーブル(T_出力店舗)を入力すればレポート表示できることは見てもらえたと思います。これを「VBAで」と言っていたんですが、実はクエリで作成できます

元になる店舗名のリストクエリ
Q出力店舗リスト

SELECT 店舗名
FROM テーブルA
GROUP BY 店舗名;

これで

店舗名
店舗A店
店舗B店
店舗N店

のデータが取れます。これを、

店舗名No:連番G:Int([No]/11)f:[No] Mod 11
店舗A店000
店舗B店101
店舗C店202
店舗D店303
店舗E店404
店舗F店505
店舗G店606
店舗H店707
店舗I店808
店舗J店909
店舗K店10010
店舗L店1110
店舗M店1211
店舗N店1312

のように連番をつけて計算フィールドを増やしてやれば、Gを行見出し、fを列見出し、店舗名を値にしてクロス集計クエリをつくることで、ワークテーブルの形のデータを得ることができます

Q出力店舗リスト_連番付き

SELECT 店舗名, DCount("*","Q出力店舗リスト","店舗名<'" & [店舗名] & "'") AS [No], Int([No]/11) AS G, [No] Mod 11 AS f
FROM Q出力店舗リスト;

Q出力店舗

TRANSFORM Max(店舗名) AS 店舗名の最大
SELECT G
FROM Q出力店舗リスト_連番付き
GROUP BY G
PIVOT "f" & [f];

この「Q出力店舗」をレポート出力用クエリで指定している「T_出力店舗」と入れ替えれば完成です


クエリで連番を振る方法は遅い処理です。実用に耐えられるか試してみてください。「Q出力店舗」の表示までなら耐えられるけど、レポート表示の段階だと遅すぎるなんて場合もあるかもしれません。そもそも「Q出力店舗」の表示すら遅いということもあるかもしれません。状況に応じて「じゃあその部分はVBAで」となると思います

順序だてて説明するために複数のクエリを作ることにしました。この辺もクエリの作り方によっては整理できるので、「考え方」としてうまくいくようであれば整理したクエリに変更したいと思います

>> 11の、特に「ページごとに不要な列は出力しない」部分には対応してません。>> 14で回答した通りVBAで商品グループごとn回処理するか、何か別案を思いつくか、hatenaさんがExcel出力の方法を提示していますし、もんぞうさんが進められる方法で、として進むようであればまた続きを考えたいと思います

通報 ...