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店 | 0 | 0 | 0 |
店舗B店 | 1 | 0 | 1 |
店舗C店 | 2 | 0 | 2 |
店舗D店 | 3 | 0 | 3 |
店舗E店 | 4 | 0 | 4 |
店舗F店 | 5 | 0 | 5 |
店舗G店 | 6 | 0 | 6 |
店舗H店 | 7 | 0 | 7 |
店舗I店 | 8 | 0 | 8 |
店舗J店 | 9 | 0 | 9 |
店舗K店 | 10 | 0 | 10 |
店舗L店 | 11 | 1 | 0 |
店舗M店 | 12 | 1 | 1 |
店舗N店 | 13 | 1 | 2 |
のように連番をつけて計算フィールドを増やしてやれば、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出力の方法を提示していますし、もんぞうさんが進められる方法で、として進むようであればまた続きを考えたいと思います
通報 ...