SELECT Py, Px, Sum(数量) AS 数量の合計
FROM (テーブルA INNER JOIN Q出力商品ページグループ ON テーブルA.棚番号 = Q出力商品ページグループ.棚番号) INNER JOIN Q出力店舗リスト_連番付き ON テーブルA.店舗名 = Q出力店舗リスト_連番付き.店舗名
GROUP BY Py, Px;
SELECT Py, テーブルA.*, Q出力店舗.*
FROM Q出力店舗, テーブルA INNER JOIN Q出力商品ページグループ ON テーブルA.棚番号 = Q出力商品ページグループ.棚番号;
Qレポート出力データ
SELECT
棚番号
, Sum(数量) AS 合計数量
, Q出力全ページデータ.Py
, Q出力全ページデータ.Px
, f0
, f1
, f2
, Sum(IIf([店舗名]=[f0],[数量])) AS n0
, Sum(IIf([店舗名]=[f1],[数量])) AS n1
, Sum(IIf([店舗名]=[f2],[数量])) AS n2
FROM
Q出力ページリスト
INNER JOIN
Q出力全ページデータ
ON
Q出力ページリスト.Px = Q出力全ページデータ.Px
AND
Q出力ページリスト.Py = Q出力全ページデータ.Py
GROUP BY
棚番号
, Q出力全ページデータ.Py
, Q出力全ページデータ.Px
, f0
, f1
, f2
;
SELECT
棚番号
, Sum(数量) AS 合計数量
, G
, f0
, f1
, f2
, Sum(IIf([店舗名]=[f0],[数量])) AS n0
, Sum(IIf([店舗名]=[f1],[数量])) AS n1
, Sum(IIf([店舗名]=[f2],[数量])) AS n2
FROM
テーブルA
, T_出力店舗
GROUP BY
棚番号
, G
, f0
, f1
, f2
;
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Set cnn = CurrentProject.Connection
Set rst = New ADODB.Recordset
rst.Open "クロス集計クエリ", cnn, adOpenKeyset, adLockOptimistic
'Excelオブジェクトを生成
Dim xls As Object
Set xls = CreateObject("Excel.Application")
With xls
'テンプレートブックを開く
Dim wb As Object
Set wb = .objExcel.Workbooks.Open("C:\TEST\テンプレート.xlsx")
'最初のシートにデータ出力
wb.WorkSheets(1).Cells(1, 1).CopyFromRecordset rst
'Excelを可視状態にする
.Visible = True
’印刷する。
wb.WorkSheets(1).PrintOut
End With
Set xls = Nothing
rst.Close: Set rst = Nothing: Set cnn = Nothing
SELECT
棚番号
, Sum(数量) AS 合計数量
, f0
, f1
, f2
, Sum(IIf([店舗名]=[f0],[数量])) AS n0
, Sum(IIf([店舗名]=[f1],[数量])) AS n1
, Sum(IIf([店舗名]=[f2],[数量])) AS n2
FROM
テーブルA
, T_出力店舗
GROUP BY
棚番号
, f0
, f1
, f2
;
Pyも考え方はPxと同じなので細かいこと省略しましたが、>> 23の「Q出力商品ページグループ」は実際の出力に合わせて調整が必要です
SELECT 商品名, DCount("*","Q出力商品リスト","商品名<'" & [商品名] & "'") AS [No], Int([No]/5) AS Py
FROM Q出力商品リスト;
↓
SELECT 商品名, DCount("*","Q出力商品リスト","商品名<'" & [商品名] & "'") AS [No], Int([No]/17) AS Py
FROM Q出力商品リスト;
計算式を理解してもらいたいのですが、「Px」が「0」の時だけ[合計数量]を表示する(それ以外の時は何もしない=空白になる)という処理をしています。
『「Px」が「0」』とは列データが「A店~K店」のデータですね。クロス集計クエリで全データ出力したときの左端のページということです。その上で「データがないときはページを印刷しない」という処理を追加しているので『ページのグループ(Px)が「0」の時』と固定すると「Px=0(A店~K店)」のデータがないときは[合計数量]を表示するページが印刷されないということです。
そうなるだろうなぁと思っていました。とりあえず、計算式でとんでもない無駄をしていました
少しは速くなると思います。いずれにせよ、これが必要ならデータベース的な計算をさせるととても苦しいモノなのでVBAで対応する案件かと思っています
クエリの整理が必要かなぁと思っていたので触れていなかったんですが、「Q出力店舗」の問題ですね。これがクロス集計クエリなので、データ数が少ないと列数が足りなくなります。データを変えながら「Q出力店舗」を開いてみてください。このクエリでフィールドが固定であればいいのでクエリ列見出しに
"f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10"
と設定すれば良いでしょうクエリの問題ですか?レポートデザインの問題ですか?
元データのフィールドはどうなっていますか?(「数量」自体も実際に存在するフィールドなんでしょうか?)
レポートのデザインであれば、「ケースの数量」「バラの数量」「ケースの文字」「バラの文字」の4つのテキストボックスがあることを想定しています
現状の運用実態は下記のようでしょうか。
売上データには日々に売り上げが入力されていく。
請求書は前月の売上データをまとめて請求する。
上記であっているとして、一例をあげておきます。
売上テーブル
売上ID
取引先ID
売上日
商品コード
金額
請求ID
請求書テーブル
請求ID
請求日
請求年月
取引先ID
上記以外に 取引先マスター、商品マスター がある。
請求書テーブルをレコードソースにした単票フォーム「請求書フォーム」を作成する。
売上テーブルをレコードソースにした帳票フォーム「請求明細フォーム」を作成する。
「フィルター」プロパティを「False」、「読み込み時にフィルター適用」プロパティを「はい」に設定しておく。
「請求書フォーム」に「請求明細フォーム」をサブフォームとして埋め込む。
メインフォーム「請求書フォーム」でデータを入力する。
「請求年月」を入力したときに、VBAで請求年月を元にサブフォーム「請求明細フォーム」のフィルターに該当年月のデータが表示されるように抽出条件を設定する。
その後、抽出されたレコードの「請求ID」フィールドに、「請求書フォーム」の「請求ID」を入力する。
請求書レポートは、請求書テーブルと売上テーブルを「請求ID」で結合したクエリをレコードソースとする。
これを 請求ID でフィルターをかけて印刷する。
上記のような流れになります。
これは一例ですので、要件によっては別のほうほうの方がいい場合もあります。
サブフォームの認識間違っていましたか?
hirotonさんへ
お願い①の件
素早いアドバイスありがとうございます。
画像付きでとても分かりやすく助かります。
アドバイス通りにしてるつもりなんですが(余計なことをしていたらすみません)
行の表示数が減ってしまいページ数が増えてしまいます。
(例)
変更前 商品17行
変更後 商品5行
のようになってしまします。
お手数おかけします。
お願い②の件
=IIf([Px]=0,[合計数量])
問題なく実行できました。
例えば1店舗のみのときも空白になるってことでしょうか?
=IIf([Px]=DMin("Px","Qレポート出力データ","Py=" & [Py]),[合計数量])
とても重いです。
印刷した場合、1ページごとに15秒ぐらいかかったりします。
(例)
1ページ目印刷→15秒経過→2ページ目印刷→15秒経過→3ページ目印刷・・・
この件で少ない店舗のときを調べようと気づいたのですが、
店舗名、商品名などが少ない時にQレポート出力データを実行したら
'Q出力全ページデータ.f8を有効なフィールド名、または式として認識できません。
というエラーメッセージが出てきます。
早い段階で確認しとくべきこと遅くなってすみません。
よろしくお願いします。
お願い③の件
理想の形になりました。
ありがとうございます。
お願い④の件
現状どこにどう追加すればいいのかよくわかっておりません。
申し訳ありません。
お願い⑤
理想の形になりました。
ありがとうございます。
テーブル作成クエリの件
削除クエリ(全データ削除)と追加クエリを今まで使ったことがありませんでした。
クエリの使い分けがまったく分かってないので勉強します。
アドバイスありがとうございます。
こんな感じです
Pyヘッダーで表示するものもないのでグループの追加じゃなくて並べ替えの追加で良かったです
一つのテキストボックスでするのは難しいでしょうね。
VBAで空白を挿入して調整するとかすれば可能でしょうが、かなり面倒そうです。
単価 と 数量 をそれぞれテキストボックスとして配置して、その間に"✕"をラベルとして配置すればどうでしょう。
単価✕数量 が必要ない場合は、セクションのフォーマット時で非表示にすればいいでしょう。
レポートの詳細セクションにラベルやテキストボックスをそのようなレイアウトになるように配置すればいいでしょう。
分かりやすいようにラベルは薄いピンク色にしています。
あるいは、ユニオンクエリで縦並びに変換する方法もあります。
hirotonさん
全ての質問に回答ありがとうございます。
お願い①
印刷ページの順番の変更をお願いします。
レポートのデザインでグループの追加で「Py」を追加して「Px」の上にします
一つ目でつまずいてしましました。
自分なりに試行錯誤しましたができませんでした。
[訪問実績]テーブルをもとにクエリを作成して、必要なフィールドを表示させて、
フィールド蘭に下記の式を入力してください。
アクセスログ日時: (SELECT Max(日時) FROM アクセスログ AS T1 WHERE 訪問実績.機器番号=T1.機器番号 AND 訪問実績.日時>=T1.日時 )
レポートのデザインでグループの追加で「Py」を追加して「Px」の上にします
レポートのデザインで合計数量のコントロールソースを
=IIf([Px]=0,[合計数量])
にします。ただし、「1店~11店」の出力がない商品グループの場合、合計数量が表示されなくなります。これに対応する場合は=IIf([Px]=DMin("Px","Qレポート出力データ","Py=" & [Py]),[合計数量])
とします連番付けのルールを「店舗CD」に対して行えばいいですね
Q出力店舗リスト
Q出力店舗リスト_連番付き
数量のフィールドを表示するために
を作りました。ケースの値も表示したいなら
とかでフィールドを増やせばいいかな?(数量用=>n0~n10、ケース用nC0~nC10)
「ケース」「バラ」の表示はそれぞれ
欲しい結果が得られているのなら問題ないと思いますが、テーブル作成クエリですか?
ことあるごとにテーブルそのものを作ったり消したりするのは負荷がかかるので削除クエリ(全データ削除)と追加クエリを使う形でデータだけを任意に変えられる作りのほうがいいでしょう
高速化自体はいろいろ方法があります。特に、クエリはかなり初心者向けの手順で作成しているので見直ししたいところではあります。SQLの知識が必要になるにも関わらず効果は薄そうなので微妙ですが
VBAを使えば劇的な効果もありそうですが、これはこれでやはりそれなりの知識が必要になります。
ワークテーブルへの書き込みを自動化する(簡単・効果小)
連番作成ルーチンを組む(検索すれば見つかるそれなりの方法・効果大)
レポートに出力した後印刷しない処理を組む(※)
(※)できるかどうかわかりません。できればワークテーブルもPy関係のクエリも不要で夢のようです
ただ、後で見直して「これ何やってるんだっけ?」となるようなものは非常にコストが高いので「運用上十分」で一番「楽な方法」ならそれで完成でいいんじゃないかという感じです
hirotonとしては技術的な話題も嫌いではないので、現状問題はないんだけどどうにかならないか?というのもそれはそれでアリですけどね
お願い⑤
レポートのテキストボックス1に商品名を登録します。
テキストボックス2~4は商品情報を登録します。
例えば、商品名が15文字あったとして、
テキストボックス1(上)に10文字、テキストボックス1(下)に5文字
のように分けて登録することは可能でしょうか?
フィールドを[商品名前半10文字][商品名後半5文字]と分けて
テキストボックスにそれぞれ登録すればできるとおもいますが、
[商品名]のみのフィールドでできますでしょうか?
連続投稿申し訳ありません。
回答できる方よろしくお願いします。
お願い④
[数量]のフィールドを値にしてるのですが、
これを[ケース]&[バラ]の値にしようと思ってます。
この場合、[ケース]もしくは[バラ]の値がゼロの場合
どちらか一方を空白にすることは可能でしょうか?
普通にやれば
[ケース]0 [バラ]1の場合
0 1
[ケース]1 [バラ]0の場合
1 0
[ケース]0 [バラ]0の場合
空白 空白
理想
[ケース]0 [バラ]1の場合
空白 1
[ケース]1 [バラ]0の場合
1 空白
[ケース]0 [バラ]0の場合
空白 空白
もし理想の形になるのであればの話ですが、
値の下にテキストボックスでケース、バラ表記を付けた場合
[ケース]1 [バラ]1の場合
1 1
ケース バラ
[ケース]0 [バラ]1の場合
空白 1
空白 バラ
[ケース]1 [バラ]0の場合
1 空白
ケース 空白
値があるときだけケース、バラ表記をつけて
空白のときは空白にできますでしょうか?
hirotonさんへ
フィールドを追加して再度試しました。
データ量が増えたせいかQレポート出力データ→印刷がより重たくなったので,一度テーブル作成クエリをはさんでテーブル→印刷にしました。
現状この方法で問題なさそうなのですが、このやり方で大丈夫でしょうか?
すごく簡単なことなのかも知れませんが、
いくつか困ったことがあるのでアドバイスお願いします。
お願い①
印刷ページの順番の変更をお願いします。
現在
1ページ目 1店~11店 商品1~商品17
2ページ目 1店~11店 商品18~商品34
3ページ目 1店~11店 商品35~商品51
理想
1ページ目 1店~11店 商品1~商品17
2ページ目 12店~22店 商品1~商品17
3ページ目 23店~33店 商品1~商品17
お願い②
商品の合計数量欄が全ページ数字が入ってますので
2回目以降の同じ商品の合計数量は空白でお願いします。
合計数量あり 1店~11店 商品1~商品17
合計数量なし 12店~22店 商品1~商品17
合計数量なし 23店~33店 商品1~商品17
お願い③
店舗名の順番を固定の方法以外で指定したいです。
具体的には店舗CDのフィールドがあるのでその順番にしたいです。
[店舗CD]&[店舗名]にすれば順番になるのですが、
見た目が店舗名だけの情報のほうが分かりやすいので。
良い方法があればアドバイスお願いします。
細かなチェックはまだしてませんが、ほぼ理想の形になりました。
ありがとうございます。
あー、hirotonのミスです。直してOKです
処理内容からすれば想定通りです。そのほかの表記したい項目も含めて「ワンクリックぐらいで印刷できる」が達成できていればとりあえず完成かなと思っています。何か問題があれば教えてください
処理速度の問題についてはクエリの見直しで高速化できるか、どうしてもならVBAでどうにかするかとなると思いますが、気になるようなら実際に運用するときのデータ数とその時の処理時間を合わせて出してもらえるといいと思います。
趣味の映画鑑賞データをいれるものを作った程度です
そのときにいろいろなサイトをみたりして、ある程度の機能には触れてみました
ファイルメーカーにはサブフォームに似たポータルというものがありました
一応それらの近いは理解したつもりです
本来は1対多で入力するときに使うものですが、
フォームに検索用の窓をつくり、あるテーブルからその条件で検索した結果をサブフォームに表示させる、ということもできますよね?(ポータル機能もそのようなものでした)
hirotonさんへ
追加情報ありがとうございます。
「全く値が無いページ」は色を染めた部分で2ページになります。この考え方で合っていますか?
はい、問題ありません。
Qレポート出力データまで試してみました。
Qレポート出力データが少し重い感じで、レポート表示したときはかなり重い感じでした。
Q出力商品ページグループとQ出力商品リストに[棚番号]がなかったので追加しました。
間違ってたらすいません。
ファイルメーカーからの移行ということですが、Accessはすこしは使ったことがありますか。それとも、まったくないのでしょうか。
例えば、サブフォームというのは、Accessの場合、メインフォームの中にコントロールとしてフォームを埋めこんであるものさしますが、その認識は持ってますでしょうか。
その辺をはっきりしておかないと、やりとりでお互いの認識に齟齬が生じますに確認させてください。
続き
現在のレポート出力用のクエリにこの情報を追加してやれば不要なページを出力しないようにできます
「Px(各ページの列のまとまり)」はすでに求めていますね。「Q出力店舗のG」です。Q出力店舗の「G」は「Px」に変更します
「Py」も同様に求められます
Q出力商品リスト
Q出力商品ページグループ
これで、商品ほにゃららの店舗foo店はページ(Py,Px)に出力されるという情報ができました。これを組み合わせてページごとの数量の合計を算出します
Q出力ページリスト
サンプルの場合に実際に得られる結果は
です。合計が「0」は実際には「データがない」なので出力されません。「数量」が「0」で実際に登録されているだとか、マイナス数量が許容されてて合計「0」がありうるとかだとまた変わってくるのでこの方法は使えないかもしれません
必要な情報がそろったのでレポート出力用のクエリを作成します
元データにはページの情報が含まれていないのでワンステップ挟んで最終的なクエリを作成します
Q出力全ページデータ
Qレポート出力データ
これで、ページ単位でデータがないデータは取り除いたデータが取得できます。「G」→「Px」等変更になってるのでレポートのデザインも合わせて修正してください
計算がかなり増えているのでレポート表示にもそれなりに時間がかかりそうな気がします。出力時間が気になる場合は、クエリを細かく分けて作成しているので「ここで遅くなる」等チェックしてみてください
例えば次のようなデータ(1ページ=>5行3列)を考えます
「全く値が無いページ」は色を染めた部分で2ページになります。この考え方で合っていますか?
案件では、列も行も固定ではなく出力してみないとわからないという状態で、「ページ単位で見て」合計が0ならページを出力しないということですが、例えば
「商品お」の2ページ目のデータは「D店、E店」でデータはなし→ページ出力あり
「商品か」の2ページ目のデータは「D店、E店」でデータはなし→ページ出力なし
となっていて、レコード単位で出力の有無が決められません。なかなか難しくなってきました
サンプルデータのテーブルにすでに情報を追加していますが、ページ単位で考えるということで、ページの位置情報を追加して出力有無のデータを作ります
「データの合計」が「0」なら出力しないページということですね
長くなるのでいったん切ります
お騒がせしました。
あれから、勝手な再起動は起きていません。
テクニカル分析をしてみようと、
大量のデータをダウンロードしていました。
そして、分析にはエクセル関数が必要だろうと、
参照設定に入れていましたが、どうもこれが原因のようです。
関数は自作すればすみますので困ったことは起こりません。
私にとっては、困ったときのHatenaさんなので、
今後ともよろしくお願いします。
hirotonさん
「Q出力店舗」のレポート表示まで試してみました。
試したパソコンと実際に使うパソコンは違うのですが試したパソコンではまったく問題ありませんでした。
情報がごちゃごちゃしてしまいましたので画像貼ります。
hirotonさん
「ページごとに不要な列は出力しない」部分には対応してません。
私の勘違いでした。
出力して大丈夫です、申し訳ありません。
ただ全く値が無いページは無しでお願いします。
hirotonさん新しい案ありがとうございます。
まだ試せてませんので少しお時間をください。
「ページごとに不要な列は出力しない」部分には対応してません。
とのことですがわがままを言って申し訳ありませんが、この部分はぜひよろしくお願いします。
hatenaさんとhirotonさんお二人ともアイデアを出していただき感謝してます。
現状私のスキルでは何がいいかもよくわからずにいます。
情報後出しで申し訳ありませんが、理想のレイアウトの画像を貼り付けます(上の画像と同じです)。
hatenaさん、手順までありがとうございます。
わかりやすくすぐできました。
実際にしてみてやはりレイアウト的に厳しい感じです。
情報後出しで申し訳ありませんが、
エクセルでの現状のレイアウトと理想のレイアウトの画像貼り付けます。
やり方がよくわかってなく、私の勘違いでしたらすみません。
ワークテーブル(T_出力店舗)を入力すればレポート表示できることは見てもらえたと思います。これを「VBAで」と言っていたんですが、実はクエリで作成できます
元になる店舗名のリストクエリ
Q出力店舗リスト
これで
のデータが取れます。これを、
のように連番をつけて計算フィールドを増やしてやれば、Gを行見出し、fを列見出し、店舗名を値にしてクロス集計クエリをつくることで、ワークテーブルの形のデータを得ることができます
Q出力店舗リスト_連番付き
Q出力店舗
この「Q出力店舗」をレポート出力用クエリで指定している「T_出力店舗」と入れ替えれば完成です
クエリで連番を振る方法は遅い処理です。実用に耐えられるか試してみてください。「Q出力店舗」の表示までなら耐えられるけど、レポート表示の段階だと遅すぎるなんて場合もあるかもしれません。そもそも「Q出力店舗」の表示すら遅いということもあるかもしれません。状況に応じて「じゃあその部分はVBAで」となると思います
順序だてて説明するために複数のクエリを作ることにしました。この辺もクエリの作り方によっては整理できるので、「考え方」としてうまくいくようであれば整理したクエリに変更したいと思います
>> 11の、特に「ページごとに不要な列は出力しない」部分には対応してません。>> 14で回答した通りVBAで商品グループごとn回処理するか、何か別案を思いつくか、hatenaさんがExcel出力の方法を提示していますし、もんぞうさんが進められる方法で、として進むようであればまた続きを考えたいと思います
追加の仕様については>> 11で返信しました。続きはVBA・・・なんて言っておきながらですがちょっと進んだ案を思いついたので半歩だけ進めます
ワークテーブルを次のように変更します
T_出力店舗
Gのデータは0から始まる連番です
(名前に特に意味はありません。列Groupの番号くらいの意味です)
出力する店舗数で行も増減します
レポート出力用にクエリを作成します
上記クエリをレコードソースにしてレポートを次のようにします
グループの追加:G(改ページ:カレントセクションの前)
並べ替えの追加:棚番号
これで全データの出力をレポート出力1回でできます。データ量(処理時間)的に問題なければこの方法で進めたいと思います
把握しました。
表示の仕方自体は商品名と同じような感じでしょうか?場合によっては1ページ名用レポートと2ページ目以降用レポートで2つ作ってしまったほうがいいかもしれませんね。
サンプルで言うと
商品あ~商品ち=>店舗C店~店舗M店、店舗N店
商品つ~商品と=>店舗A店~店舗K店、店舗L店~店舗N店
という形で、一ページに含まれる商品のパターンで列が変わるということですね
データベース的な考え方をすると、列と言ったらその対象は常に同じでないといけない(「商品あ」の1列目が「A店」なら「商品い」の1列目も「A店」、「商品と」の1列目も「A店」)のですが、求めるレポートはこれではないということですね
「一ページに含まれる商品の組み合わせ」が決まって初めて出力すべき列(店舗)が決まるということになるので、さらに処理を追加してあげないといけませんね
今度こそ、大元のデータを商品のグループで17行項目(出力する行数)ずつ区切って処理するような方法が必要になりそうです
手順
クロス集計クエリをデータシートビュー表示して全選択してコピー、エクセルのシートのA1に貼り付け
[ページレイアウト]-[ページ設定]-[サイズ]で「A3」 を選択、[印刷の向き]で「横」を選択。[印刷タイトル]をクリック。
[ページ設定]ダイアログが開くので、[タイトル行]、[タイトル列]を指定する。(マウスドラッグで指定できます。)
1ページ分の範囲が点線で表示されているので、希望の行数、列数になるように行幅、列幅を変更する。
[ファイル]-[印刷]でプレビューを確認。
1ページ目
2ページ目
3ページ目
4ページ目
印刷設定が済んだブックをデータを削除してからテンプレートとして保存する。
■T'sWare Access Tips #686 ~レコードセットの内容をそのままExcelのシートに出力する方法~の方法で、上記のテンプレートブックにクロス集計クエリのデータを出力する。印刷する。(「Microsoft ActiveX Data Objects * Library」に参照設定必要)
2ページ目、3ページ目に空欄の合計列が必要な場合は、対応がちょっと難しそう。
空欄の合計列は必要ないとは個人的には思います。
hatenaさん
自分の投稿を見直してみて書いてなかったことに今気づいたのですが印刷は1ページにA3横に収めたいです。
この件と関係なかったらすみません。
レイアウト的に厳しそうでしたので、
教えてもらったやり方は実際には試してませんでした。
明日時間があれば試したいと思います。
いろいろありがとうございます。
hirotonさん代案ありがとうございます。
試しに作ってみましたが2ページ目の合計数量は空白でお願いします。
棚番号・商品名の順番はページがまたいでも固定ですが、合計数量は
最初のページのみの表示でお願いします。
他はとりあえず問題なさそうですが
商品CD・JANCD・容量・入数などの行フィールドが他にあります。
あと言い忘れてたことで問題になりそうなことが一つありまして
画像①画像②のあ~ちの商品の数量がない店舗A店と店舗B店の
表示は無しでお願いします。
画像③と画像④は店舗A店と店舗B店の数量がありますので
表示はありでお願いします。
自分で作ってましたらそこでまた引っ掛かりました。
説明が分かりにくかったらすみません。
※印刷は1ページにA3横でお願いします。
ちょっと意味が分かりません。
エクセルは列は最大 16,384列まであります。Accessのクエリは最大255列までですので、列が入らないということはないです。
とりあえず、現状のクロス集計クエリをコピーしてシートに貼り付けてみてください。
そのうえで下記の方法で、行見出し、列見出しを固定すれば簡単に希望の印刷ができるはずです。
Excelで見出しを固定して全ページに印刷!印刷タイトル
それができるのが確認出来たら、VBAでCopyFromRecordsetでエクセルシートに出力するようにして自動化すればいいでしょう。
hirotonがワークテーブルを挙げているのは、処理の流れが分かりやすくなるのとクエリのデザインビューが活用しやすいという点からですね。データベース的な目線からは無駄が多いような気もしますが、理解しやすいんじゃないかと
さて、改めて画像を眺めていたんですが、1ページ目と2ページ目は書式は同じですが合計数量のデータが違っていますね。2ページ目以降は空白になったほうがいいんでしょうか?
それと、hirotonの見落としですが、合計数量はデータ全体の合計になっているようので、11店舗ずつ区切るとちょっと手間が出そうです(合計数量を表示するクエリと11店舗分のクエリを別々に作って後で繋げる)
ACCESSでやる方法ならhatenaさん提示のクロス集計クエリで列見出しを固定する方法のほうがよさそうです
クロス集計クエリの列を固定する方法がよさそうではありますが、せっかくなので代案(訂正案)を出します
表示列数分のワークテーブルを用意します(サンプルのため3店舗に簡略)
T_出力店舗
レポート出力用にクエリを作成します
上記クエリをレコードソースにしてレポートを次のようにします
ページヘッダー内の「棚番号」と「合計数量」はラベル、その他はテキストボックス(表示内容はコントロールソース)です
このレポートをプレビュー表示すると望みの1ページ目になりますか?
うまくいくようだったらT_出力店舗の各フィールド(f0,f1,f2)を「店舗D店」「店舗E店」「店舗F店」に書き換えて再度レポートをプレビュー表示してください。望みの2ページ目になりますか?
これでうまくいくようであれば続き(VBAで店舗を書き換えてレポートを表示する部分)に進みます
はい、そうです。
方法はいろいろありますが、DAOのRecordsetを使う方法がいいでしょう。
新規レコードの追加なら AddNewメソッド、
既存レコードの更新なら、主キーで該当レコードを探して、Editメソッドで、
ということになります。
レコードの更新・追加・削除(DAO編)
従業員は固定です
たとえば0なら転記しないように記述して、転記ボタンで別テーブルに、書き出すということでしょうか?
別テーブルには
aaa りんご 10
aaa みかん 5
となるように転記するんですよね?
要件次第です。
従業員がその時、その時で異なるなら、全レコード削除。
入力するときに必要な従業員を追加するということになります。
従業員が固定なら、従業員以外のフィールドの値を0にする、ということになります。
転記するのはVBAでかき、上記のテーブルは毎回クリアされ0レコードにするということですか?
エクセル関数を利用しようと参照設定に入れていましたが
どうも、これがいけなかったようです。
いまのところ、勝手な再起動は起きていません。
もし、また勝手な再起動が起きたら報告します。
エラーがでるフォームは、自動的にインポート対象から外れてインポートされていませんでした。
現在のところ、勝手な再起動は起きていません。
もしかしたら、エクセルの参照設定が干渉していたのかも?
引き続き、報告します。