EXCEL VBAで複数シートを指定回数印刷する方法

このQ&Aのポイント
  • Excel VBAを使用して、複数のシートを指定回数印刷する方法を教えてください。
  • 質問者は、管理シートの商品番号と商品番号シートの関係を分かりやすくするために、黄色で塗りつぶしています。商品番号が不規則にブランクがある場合は、読み飛ばしたいとのことです。
  • また、管理シートの商品番号と商品番号シートの順番は一致しないため、管理シートの商品番号を順にチェックするたびに全シートを毎回読み込む必要があるかと思われます。
回答を見る
  • ベストアンサー

EXCEL VBA 複数シートを指定回数印刷

お世話になります。 添付の様なEXCELがあります。 [管理シート]が一番左にあって、[商品番号]毎のシートが右にずらっと並んできます。 [管理シート]には「商品番号」(B4)と「商品名」(C4)と「数量」(D4)が記述されています。 商品数は可変で、増えたり減ったりします。それに伴いシートも増減します。 この商品番号は不規則にブランクがあったりしますので、この場合は読み飛ばしたいのです。 (管理シートの商品番号と商品番号シートの関係を分かり易くするため添付画像では黄色に塗りつぶしてあります) ■やりたい事 [管理シート]に「印刷」というボタンを作成します。 この「印刷」ボタンがクリックされたら、商品番号をチェックして、この商品番号と同じシートを開いてその「数量」に記述されている数字 + 1の回数分、選択されたシートを印刷したいのです。 (わかりづらくてスイマセン・・) 例)D1 ピーナッツパンならD1シートを7(6+1)回印刷したい ただし、[管理シート]の「商品番号」と「商品番号」のシートの順番は一致しないため、管理シートの商品番号を順にチェックするたびに[管理シート]以外の全シートを毎回READする必要があるかと思います。 会社でこの様な仕事を依頼されて、困っています。 どなたかご教授いただけませんでしょうか? よろしくお願い致します。 環境 WindowsXP SP3 Excel2003

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

続けてお邪魔します。 >もしB列と同じ名称のシート名がなかったら「処理を中止します・・・ というより、スルーするようにしてみました。 (B列にあるSheetのみ印刷する) Private Sub CommandButton1_Click() Dim i As Long, k As Long, str As String, myFlg As Boolean For i = 5 To Cells(Rows.Count, "B").End(xlUp).Row If Cells(i, "B") <> "" And Cells(i, "D") > 0 Then str = Cells(i, "B") For k = 1 To Worksheets.Count If Worksheets(k).Name = str Then myFlg = True Exit For End If Next k If myFlg = True Then If MsgBox(str & "シートを" & Cells(i, "D") + 1 & "部印刷しますか?", vbYesNo) = vbYes Then Worksheets(str).PrintOut copies:=Cells(i, "D") + 1 End If End If End If myFlg = False Next i End Sub こんな感じではどうでしょうか?m(_ _)m

yakkun2338
質問者

お礼

tom04さん、早速のご連絡ありがとうございます! ご教授いただきましたロジックで出来ました!! 本当に助かりました! これで会社から依頼された通りの仕組みが出来ました。 いつもいつも本当にありがとうございます!!

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です。 >インデックスが有効範囲にありません おそらくSheetが存在しないためのエラーだと思います。 前回のコードはB列がSheet名になっているという前提のコードですので、 そうでない場合は他の方法でSheetを指定する方法が必要になります。 この程度しかお答えできないのですが、 各Sheetを指定できる材料があれば具体的なコードも提示できると思います。m(_ _)m

yakkun2338
質問者

補足

tom04さん、おはようございます。 またまたご連絡ありがとうございました! tom04さんが仰る通り、B列と同じ名称のSheetが存在していないためのエラーでした。 もしB列と同じ名称のシート名がなかったら「処理を中止します」といった感じで処理を中止にするようなロジックは可能でしょうか? 何度も申し訳ございませんがよろしくお願い致します。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんにちは! 「管理シート」のB列がSheet名と解釈して良いのですかね? そういうコトだとしての一例です。 「管理シート」にコマンドボタンを配置し、それをクリックするとします。 ↓のコードにしてみてください。 Private Sub CommandButton1_Click() Dim i As Long, str As String For i = 5 To Cells(Rows.Count, "B").End(xlUp).Row If Cells(i, "B") <> "" And Cells(i, "D") > 0 Then str = Cells(i, "B") With Worksheets(str) If MsgBox(str & "シートを" & Cells(i, "D") + 1 & "部印刷しますか?", vbYesNo) = vbYes Then .PrintOut copies:=Cells(i, "D") + 1 End If End With End If Next i End Sub ※ 数量を少なくして試してみてください。 (紙がもったいないため) こんな感じではどうでしょうか?m(_ _)m

yakkun2338
質問者

補足

tom04さん、ありがとうございます! いつもありがとうざいます!! 早速実行してみましたところ、下記のようなエラーが出てしまいました・・・ Worksheets(str)=<インデックスが有効範囲にありません> 申し訳ございませんが、再度お知恵をお借りできませんでしょうか? よろしくお願い致します。

関連するQ&A

  • EXCELの複数シートの印刷

    EXCELのブックの中に、5枚のシートがあります。1枚のシートは2ページ構成です。この5枚のシートを通し番号で印刷したいのですが、方法を教えてください。

  • EXCEL VBA 社員名簿印刷したい

    お世話になります。 EXCEL VBAを使って社員名簿を印刷したいのです。 データというシートに社員情報が入っています。(可変ですが100名ほど) このシートに[印刷]というボタンを配置してこれをクリックしたらSheet1の様式にあてはめて 社員人数分印刷をしたいのです。 どのたかお知恵をおかりできますでしょうか? よろしくお願い致します。 EXCEL2013

  • エクセルVBA シートから抽出して伝票に印刷

    初心者です。 エクセル2010を使用しています。 シート1(出庫台帳)にあるデータを、シート2(出庫依頼票)に転機させて印刷をしたいと思っています。 シート1にデータを毎日入力していくのですが、1行入力するごとに、シート1内に作成した印刷ボタンを押すと、その時一番下にある行(一番新しいデータ)が出庫依頼票に転機され、印刷プレビューがでるようにしたいのですが、どうしてもできません。 また、フォームからボタンを作りたいのですが、どこにあるのか探せません。 イメージを添付してみました。 どなたか、どうか教えてください。

  • エクセル VBA

    エクセル VBA コマンドボタン(印刷)をクリックするとSHeet1・SHeet2が 2つ印刷出来るような設定にしたいです。 普通は、SHeet1をコピーして Sheet2の画面を開いてコピーという手順を ボタン押すと、SHeet1・SHeet2が印刷されるようにしたいのですが・・・・ ちなみに印刷設定は出来ています。 このような ことはマクロで出来るのでしょうか? 記述を教えて下さい!

  • EXCEL VBA VLOOKUPの様な検索したい

    お世話になります。 VBAを使ってVlookupのような動きをする検索を実施したいのです。 添付図のようにsheet1に基本データが入っています。 [検索]ボタンをクリックしたらsheet1の商品番号をキーにして、sheets2を参照してsheet1の区分にA-Dの値を挿入したいと思います。 sheet1、sheet2ともにデータ量が可変です。 どなたかご教授いただけますでしょうか? お忙しいところ恐縮ですがよろしくお願い致します。 環境 WinsowsXP SP3

  • 複数シートの印刷

    エクセルで大量のシートを一度に印刷することでできますか? いつも印刷ボタンで一枚一枚印刷してるのですが、これだと複数シートで大量にあるととても面倒ですよね。 できるのであれば教えてください。

  • エクセルで複数シートを一覧表にするには?

    教えてください。エクセルで複数シートを自動で別のシートに転記したいのですが、 やり方がわかりません。 各シートの空白部分を除いてデーターがある分だけを取り出して、金額に数式を入れて 合計金額を追加したいのですが・・・・・。 下記のような感じでできますか? 宜しくお願いいたします。    Sheet1     商品名  単価  数量        ****   000  000        ****    00   00   Sheet2     商品名  単価  数量        ****   000  000        ****    00   00   Sheet3     商品名  単価  数量        ****   000  000        ****    00   00 をSheet4に   シート名 商品名  単価  数量  金額   Sheet1  ****   000  000  0000(単価×数量)          ****    00   00  0000(単価×数量)                    合計金額  000   Sheet2 商品名  単価  数量  金額         ****   000  000  0000(単価×数量)         ****    00   00  0000(単価×数量)                   合計金額  000    Sheet3 商品名  単価  数量  金額         ****   000  000  0000(単価×数量)         ****    00   00  0000(単価×数量)                   合計金額  000

  • EXCEL VBA 各シートの数値を集計したい

    お世話になります。 EXCEL2013を使用しています。 添付図のように担当者毎にシート分けされていて、それぞれ1ヶ月のパンの販売実績が記述されています。各担当者が自分のシートに青色部分に実績数字を入力していきます。 (やりたいこと) 一番右端に担当者の合計計算用のシートがありますので、このシートに添付図のように集計したいのです。 出来ればこのブックを開いたときに合計シートに自動計算したいです。 もしくは合計シートに[計算]というボタンを置いてクリックすると計算される流れでもいいです。 (集計時のポイント) ・1日のチョコパンの実績でもセルが作りが2行・2列設けてありますが、集計時には青色部分だけを持ってきたいです。 ・D3から該当月の稼働日カレンダーが記述されていますので、月によって稼働日が違いますので、D3から記述があるまで日まで列をよみとってほしいです。 ・B列にパンの名称がありますが"計"は無視する。B列のパンの種類の数は可変です。 ・できればシート数も可変で対応できれば最高です。 どなたかお知恵をおかりできますでしょうか? よろしくお願い致します。

  • Excel 複数シートの両面印刷

    Excel の Book が 20個くらいあって、 各 Book に 15枚くらいの Sheet がついています。 各 Sheet  は綺麗に A4 に印刷できます。 お尋ねしたいのは、 1. 複数の Sheet を選択して、 それを A4 に両面印刷する方法はありますでしょうか? 2. また、 各 Sheet の中身を確かめながら、 印刷する  sheet だけを選択する方法は    ありませんでしょうか?    (現在は、 全 Sheet を見て、 印刷しない Sheet 番号をメモして、     最初の Sheet から 選択し直しています) 環境は Windows XP professional Excel   2003  です。 よろしくお願いいたします。

  • Excelでマクロを使った印刷教えてください

    仕事でExcel2003を使い、お客様の注文に応じた商品のラベルを社内で印刷するよう にしようと考えています。 シート1には、 A列に100行(種類)ほど、商品の型式がそれぞれのB列に商品名、それぞれのC列に ロット番号、それぞれのD列に数量の項目があります。 A及びB列は新商品が出ない限り追加や、変更はありませんが、C及びD列はその都度変 わります。 AとBとCの情報を別のシート2に参照させて表示するところまではできました。 その情報をシート2で拡大等をしてラベルにしたいので、数量に応じてB5のラベル シートに印刷すると共に、数量の入力の無い箇所は無視するような事をしたいのです が、方法はありませんか? よろしくお願いします。

専門家に質問してみよう