- ベストアンサー
VBAを用いて繰り返し自動的に印刷するにはどうしたら良いのですか
VBAを用いて繰り返し自動的に印刷するにはどうしたら良いのですか?ループコードって何? エクセルで作った納品書、件数が数百件あっても自動的にある件数全て打ち出せるようにしたいのですが。。。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
つまりこういうことですか? ●"シート2"は、以下のような感じ。 ━━━━━━┳━━┳━━━ 受注ナンバー ┃顧客┃請求額 ━━━━━━╋━━╋━━━ 1001┃ A社┃10000 ━━━━━━╋━━╋━━━ 1002┃ B社┃20000 ━━━━━━╋━━╋━━━ 1003┃ C社┃50000 ━━━━━━╋━━╋━━━ ●"シート1"の特定のセルに、たとえば「1001」と入力すると、上記の表から得た「A社」、「10000円」などという情報が各欄に表示される。 ●上記"シート1"の特定のセルに「1001」を入力して印刷、「1002」を入力して印刷、…、という一連の繰り返し作業を自動で行わせたい。 以上でよければ、以下のようにできます。 Public Sub PrintAll() Dim rngOrderNoArray As Range Dim rngOrderNoForm As Range Dim rngOrderNo As Range Set rngOrderNoArray = Worksheets("シート2").Range("A2:A100") ★"シート2"の受注ナンバーの範囲 Set rngOrderNoForm = Worksheets("シート1").Range("A1") ★"シート1"の入力欄 For Each rngOrderNo In rngOrderNoArray rngOrderNoForm.Value = rngOrderNo.Value Worksheets("シート1").PrintOut Next End Sub あくまでもサンプルです。上記を実行すると冒頭の動作を「A2:A100」など設定した分だけ繰り返します。途中でキャンセルできるようにしたり、などは必要に応じて追加してください。
その他の回答 (5)
- imogasi
- ベストアンサー率27% (4737/17070)
Range(Cells(x,y),Cells(z,u)).PrintOutがポイントです。 印刷する範囲がいつも一定であればx、y、z、uは定数字です。 変わるなら、プログラム内で計算や場所(セル範囲)の表を持つ。 納品書の定位置に受注シートデータから持ってくるのは (別質問に答えたものですが)下記の「データを移す」のところが参考に なるでしょう。 ほかにも2シートの扱いなど参考になるでしょう。応用が広く、すっきり していると自負しています。(全体は他の問題用ですから気にしないで) Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("sheet1") Set sh2 = Worksheets("sheet2") '最下行数を知る d = sh1.Range("A65536").End(xlUp).Row MsgBox d j = 1 'sheet2の先頭行 m = "XXX" 'Sheet1の第1行以外の値をセット For i = 1 To d '---A列直前の行と変わったか If sh1.Cells(i, "A") = m Then Else '----変わったときA,B列をSheet2へ移す sh2.Cells(j, "A") = sh1.Cells(i, "A") ’データを移す sh2.Cells(j, "B") = sh1.Cells(i, "B") m = sh1.Cells(i, "A") j = j + 1 'Sheet2の次行へ End If Next i End Sub 仕事にVBAを使うには、中級以上のスキルがいります。覚悟の程を。
お礼
本当に本当にありがとうございました。 頑張ってチャレンジします。
- hana-hana3
- ベストアンサー率31% (4940/15541)
>シート1の納品書内の受注ナンバーを入力する 番号の入力は納品書の「セル」と言うことでしょうか? >シート2のデーターが自動で入る 納品書の「受注ナンバー」に入力された番号を基に機能するのですね? この動作はボタンで実行するのですか? それとも、シートのイベント(自動)ですか? 印刷は手動? --------------------------------- 基本的には、納品書作成(記入)マクロに受注番号を渡して納品書を作成して印刷、の繰返しをすれば良いだけです。 注番が連番の数値なら簡単ですが、それ以外なら面倒になります。 sub 連続印刷 ’受注番号指定処理(開始番号・終了番号設定) do 注番作成処理 call 請求書作成(注番) 印刷処理 終了判定処理 Loop End Sub のような流れになります。
お礼
本当に本当にありがとうございました。 頑張ってチャレンジします。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 ・シート1に納品書のフォームがある。 ・シート2には数100件以上入る顧客注文リスト表がある。 ・シート1の納品書に、シート2のデーターが自動で入るようになっている。 ・注文リスト内全件が自動に納品書に反映され印刷したい。 結局、これだけの内容からですと、現状では、残念ながら、VBAでの解決にまでには結びつかないのではないかと思います。 ここで回答できる範囲としては、コーディングのトラブルやいくつかのピンポイントで示せるテクニックを書くだけで、初期からコードを書くものは限られています。今、具体的なコーディングでお困りのことがあれば、お教えできるかと思いますが、そうでないとしたら、私には不可能です。
お礼
お手数をおかけいたしました。 ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 単純に回答が付けられないのは、「打ち出す」ものは、ひとつのシートの中のものか、それとも複数のシート全なのかどうかということですね。 もし、ひとつのシートの中のものだとすれば、同じものをプリントアウトするわけではありませんから、当然、内容が変わっていくはずです。それら、プリントアウトする前段階の部分がはっきりしないと、Do ~ While などと教えても何も役に立たないような気がします。
補足
ありがとうございます。 シート1に納品書のフォームがあり、シート2には数100件以上は入る顧客注文リスト表があります。シート1の納品書内の受注ナンバーを入力する事により、シート2のデーターが反映されシート1の納品書にデーターが自動で入るようにしました。件数は日によりまちまちですが(数件から数100件)注文リスト内全件が自動に納品書に反映され印刷したいと思います。 全くの素人でチャレンジしているので説明もうまくできませんがどうぞよろしくお願い致します。
- taseki
- ベストアンサー率66% (155/233)
単純に印刷するにはPrintOutメソッドを使います。 Worksheets("納品書1").PrintOut 複数のシートなら、 Sheets(Array("納品書1", "納品書2", "…")).PrintOut とか。 もちろん「すべてのシート」だとか、あるフォルダの中のファイルをすべて、順番に開いていって印刷、ということも可能です。 そういう場合には、For 文などで必要な分だけ同じことを繰り返します。これがループです。
お礼
早速ご回答いただきましてありがとうございました。 参考にさせていただきたいと思います。
お礼
本当に本当にありがとうございました。 頑張ってチャレンジします。