どうやら解決のご様子ですが折角出来たので・・。
私が想像していたモノとはかけ離れたとんでもないモノを作ろうとしていたのですね。
No4さんへの補足を見て愕然としました。
No2さんは先見の明があったと思います。 (^_^;)
質問は、整理して、正確に、わかり易く、するように努めましょう。
ご質問者さんのモニターを見れば一瞬で分かる事でも、
掲示板では文字でしか伝えられませんし、電話のようにすぐに聞き返す事も出来ません。
また、
読みやすく、かつ、引用し易くする為に、文脈に応じて適宜、改行を入れましょう。
Accessでも簡単に作ることも出来ますが、まだハードルが高すぎると思います。
Accessは学習して、ある程度広範囲に習熟しないと使えるレベルにはなりません。
あっちこっちかじった位で何とかなるような、そんな甘いもんやおまへん!
ご質問の件は、要するに各店舗共通の商品発注リストがあって
その上のところに店舗番号と店舗名を入れたいと言う事ですよね?
ということでExcel のVBA で考えてみました
Access では、VBA・SQLの呪文?がわかり辛いかなと思いましたので。
下準備1
一番左にシートを追加します(『必ず一番左に!!!』)これが店舗リストになります。
A | B
1| 店舗番号 |店舗名
2| 1 |北海道
3| 2 |岩手
のように二行目からデータが始まります
データは店舗番号で昇順でソートしてください、でないとVlookUp関数でエラーになります。
二番目以降のシートは商品リストのデータとなります
アドレスB2に店舗番号、B3に店舗名とします
B3には、=VLOOKUP(B2,sheet1!A:B,2,FALSE) として
Sheet1のデータを見に行くように設定します
実際に、B2セルに店舗番号を入れて、店舗名が変わるのを確認してください。
Sheet2以降のシートは商品リストのデータとします
B2には店舗番号、B3には店舗名が入りますので、商品リストは4行目以降から
始まります。
Sheet2以降のシートの印刷プレビューで1ページに収まるように調整します。
もし、商品数が多くてはみ出す場合には、新たなシートを追加してください。
また、Bookには店舗リスト・商品リスト 以外のシートは入れないで下さい!!!
下準備2
スプールされたドキュメントを最初に印刷する
http://support.microsoft.com/default.aspx?scid=kb;ja;891594
を参考にして
回避策
ドキュメントを確実に順番通り印刷するためには
「全ページ分のデータをスプールしてから 印刷データをプリンタに送る」
「スプールされたドキュメントを最初に印刷する」
を ON に設定します。
として下さい。でないと印刷順序は保証されません。
さて、ここからが大変かも?
Alt + F11 を押して VBE の画面に切り替えます
メニューから 挿入→ 標準モジュール を選び、下記をコピペ
Sub Insatu()
Dim i As Long '店舗のカウンター
Dim j As Long 'シートのカウンター
Dim Fshop As Variant '始めの店舗番号
Dim Eshop As Variant '終わりの店舗番号
Dim c As Variant 'セルオブジェクト
Dim fAddress As Variant '始めの店舗番号のセル番地
Dim eAddress As Variant '終わりの店舗番号のセル番地
Dim rRow As Long '店舗リストのデータ開始行
Dim sCount As Long '何店舗ごとに休憩するか指定
rRow = 2 '店舗データが二行目から始まるのをセット
sCount = 50 '店舗ごとの休憩数をセット
'メニュー選択
Select Case InputBox("1・全部印刷" & vbCrLf & vbCrLf & _
"2・指定店舗印刷" & vbCrLf & vbCrLf & _
"3・中止")
Case 1
GoTo Zenbu 'ラベル Zenbu へジャンプ
Case 2
GoTo Sitei
Case Else
Exit Sub
End Select
'----------------------------------------------------------------------全部印刷
Zenbu:
i = 0 '店舗の件数カウンタ初期化
Worksheets(1).Select '店舗リストのあるシートへ移動
Range("a" & rRow).Select 'そのシートのデータ行の頭に移動
Do Until Sheets(1).Range("a" & i + rRow) = "" '店舗リストが空白になるまで繰り返し
For j = 2 To ThisWorkbook.Sheets.Count '店舗リスト以外のシートを全部捜査し、値を代入
Sheets(j).Range("b2").Value = Sheets(1).Range("a" & i + rRow).Value
Sheets(j).PrintOut
Next j
i = i + 1 '次の店舗リストに移動するためにカウントアップ
If i Mod (sCount - 1) = 0 Then 'もし、sCount(何店舗ごとに休憩するか指定)を超えたら
If MsgBox(Sheets(1).Range("a" & i + rRow) & vbCrLf & Sheets(1).Range("b" & i + rRow) & _
" まで印刷しました続行しますか", vbYesNo) = vbNo Then 'どうするか問い合わせ
Exit Sub
End If
End If
Loop
Exit Sub
'----------------------------------------------------------------------指定部分印刷
Sitei:
Fshop = InputBox("始めの店舗番号を入力")
Set c = Worksheets(1).Range("a:a").Find(Fshop, LookIn:=xlValues, lookat:=xlWhole)
'↑オブジェクト c にセルをセット
If Fshop = "" Then 'キャンセルや×点で終了した場合
MsgBox "中止しました"
Exit Sub
End If
If Not c Is Nothing Then 'Find で条件に見合うものが有った場合
fAddress = c.Address 'そのセルのアドレスを取得
Else
MsgBox "この番号では見当たりません"
GoTo Sitei
End If
Eshop = InputBox("最後の店舗番号を入力")
If Eshop = "" Then
MsgBox "中止しました"
Exit Sub
End If
Set c = Worksheets(1).Range("a:a").Find(Eshop, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
eAddress = c.Address
Else
MsgBox "この番号では見当たりません"
GoTo Sitei
End If
Worksheets(1).Select
Range(fAddress).Select
For i = Range(fAddress).Row To Range(eAddress).Row
For j = 2 To ThisWorkbook.Sheets.Count
Sheets(j).Range("b2").Value = Sheets(1).Range("a" & i).Value
Sheets(j).PrintOut
Next j
Next i
End Sub
一般的なVBAのやり方は分かりますよね!!!?
分からなかったら・・・調べてね。またExcelのヘルプで探せば分かるような事の
ご質問は「無視」します。
あらかじめ、ご了承ください。
こちらでダミーデータ
店舗数、1200
商品数、各シート 53件 × 5シート
で行ったところ、全部印刷の場合
Pentium 600M & Memory256M では最初の50件がプリンタに送られるまで8分
Pentium 2800 & Memory1024Mでは最初の50件がプリンタに送られるまで1分位でした。
なお、全部印刷の場合、印刷データが送られて、
『~まで印刷しました続行しますか』と出ますが、これは印刷データをプリンタに送り切った
という意味ですので、多分プリンタは依然として一所懸命に印刷中だと思います。
プリンタを開けばどれだけキューに溜まっているか(溜まっている印刷データ)が確認できます。
それでは。
お礼
おはようございます。 師匠はなんて優しい方なんでしょう。もっと叱ってくださって全然良かったのに。今回は私、反省点がいっぱいあって、皆さんにとっても申し訳なく思うと同時に、同じくらいものすごく感謝しております。本当にありがとうございます。 今回、みなさんのおかげで私の知らない世界を少しでも知ることができてすごい嬉しいです^-^ホント、これを機会にもっと深く掘り下げて勉強したい!と思いました。とりあえず仕事の合間にエクセル色々いじりながら本見ながらやることから始めたいと思います!アクセスはどうやら基礎だけでもスクールで学んだ方がよさそうですね。ホントいい機会だ。勉強しよ。 本当にみなさん、どうもありがとうございました!!!!大変お世話になりました^-^