- ベストアンサー
Excelの印刷マクロ
- Excelで縦長に配置されたシートを特定の順序で印刷するためのマクロについて教えてください。
- 現在、シートはA0、B00、C00の順番で配置されていますが、印刷時にはA0→B00→C00→C01→A1→B11→B12→B21→C21の順番で印刷したいです。
- しかし、手動で全てのシートを並べ替える必要があり、時間がかかっています。どのように効率的に印刷することができるでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1,#2の者です。 #2に基づき、簡単なモデル例で、VBAに持ち込んでみました。 シートを3つ ーー 第1、第2はデータシート、第3は印刷コントロールのための 情報指定シートです。 ーー 第1シートは S1-A範囲 B3:C5 a b c 12 13 15 12 13 15 とS1-B範囲 D14:F17 x y z 34 41 23 34 41 23 34 41 23 ーー 第2シートは S2-A範囲 D1:G3 zz xx vv nn as w e r dd a s f S2-B範囲 A10:D13 aa ss bb cc 1 3 4 5 2 4 7 10 3 5 10 15 です。 ーー 第3シートは 下記の範囲の印刷をこの順に行うように指示するもの。 シート名 範囲名 Sheet1 S1B Sheet2 S2B Sheet1 S1A Sheet2 S2A ーー 標準もジュールに Sub test01() Set Sh3 = Worksheets("Sheet3") lr = Sh3.Range("A100").End(xlUp).Row MsgBox lr For i = 2 To lr sh = Sh3.Cells(i, "A") rg = Sh3.Cells(i, "B") Worksheets(sh).Range(rg).PrintOut Next i End Sub と入れて実行。 ーー 印刷は heet1 S1B Sheet2 S2B Sheet1 S1A Sheet2 S2A が各1ページずつ、この順序で、4枚印刷されました。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17070)
#1です。補足をいただきありがとうございます。 予想していた内容とは、大きく違うようですね。 エクセルシート間(さらにはシートの表間)に親子関係・順序関係のような「構造」(フォルダに似たようなものか)を持ち込むことはできず、使う側での、表の中身のデータの意味づけから、質問者が思うようには、印刷順序を制御できないと思う。 (将来では、MSはシートの親子関係などを作りこむかもと思うが、使い途が想像しにくい) ーー 小生は、処理方式として、下記を考えたが、使えるかどうか、本質問に補足しておいたらどうかな。質問しなおした方がよいかも。 ーー その方式は、便法として ある1つにシート(業務データを入れたシートとは、別の作業用シート)の A列と、B列に、 A列 シート名 B列 印刷範囲名(表の見出し+データ範囲) を、上行から下行に順次、「印刷したい順に」(文字列で)表データを作る。 最初回は手作業で作らざるを得ない。 ーー この作業シートの行の出現順序(上行から)に、VBAでA,B列のデータを拾い、 Sheets(”シート名").Name(”表の定義範囲").PrintOut で、繰り返して、最終行まで、シートの部分範囲指定の、部分の印刷を繰り返す。 というのはどうだろう。 ーー この作業のサイクルは、月次作業と(この点を質問に書くべき)推測して、毎月の、質問者等のメンテが発生すると思うが、修正(入力)量は大した量ではないだろうと思う。 ある表の範囲(セル範囲の名前定義)が、前月には定義してあって、次月に行数的な拡大・縮小があった時は自動反映はしてくれると思う。 ーー 以上のような構想でよければ、VBAをやってみるが。 とりあえず構想を披露して、実現の障害を調べてみます。
- imogasi
- ベストアンサー率27% (4737/17070)
下記を書いていて思い付いたのは、 「サブ番号部の数字順(第1優先キー)+もしそうなら、こういう文章を質問に書け。 シート名は、本当はどういう文字列と数字の組み合わせか?1,2例の実例を挙げよ。 「A0」などは質問者が要約・例示したものだろうね? これがないとVBAが組めない。 文字列部分と数字部分を分解したデータをシートに作り、その分解列でソートして、その最上行からの出現順に、シート印刷の繰り返しをすることになるのかな。 ーー 質問の表現不足で意味が伝わらないのではないか? 質問者の頭でのイメージが書けてないのでは。 A0 B00 C00 A1 B11 C01 の「A0」とかは、シート名のことか?。 A,B,C・・はセルの列を示すときに使われるので、紛らわしい。 または、セルの位置と、セルの値のことを表しているのか? 質問で3個ずつに区切って書いているのは、意味があるのか? >A0→B00→C00→C01・・とC01になる状態がわからない。 >シート上に縦長にならんでいますが 「シート名だけ」が、たとえばA列の個々のセルに記録されているのか? それなら、シートのセル的にはどういう並び順か? セルには番地があるのでそれを明記して記述すべきと思う。 印刷したいデータ順やシート順は、「言葉で」表現すればどうなるの? 実例を書くより、文章の方が伝わりやすい場合がある。 例 説明法 (A)3,6,9・ 実例列挙主義で説明。この方式は意外に、判りにくい場合がある。 (B)3の倍数 特徴を言語で表現で説明。 ーー エクセルの印刷は、基本は、シートの見た目通りを印刷する。 データの配置やシートの配置が望み通り出なければ、せるとデータの組換えや シートの並び替えが必要で (1)手作業で並び替え (2)エクセルや各社プリンターの機能を使う(シートのページの印刷順序) 「ワークシート ページの印刷順序を設定する」など。 Googleで「エクセル シート 印刷順序」で照会。 (3)VBA(俗に言うマクロ)で好みに並び変える しかない。質問者はVBAはできるのだろうね?
補足
ご返事ありがとうございます。 すみません、混乱させてしまって。説明の情報がたりませんでした。 A,B,Cはシート名の略称にしております。 現状は、Aのシートの中にテンプレートみたいに書くことが決まっている 表があり、複数あると、A00,A01,A02と縦につなげていきます。 同様に、B、Cシートでも同じです。 ただ、B,CはAからの子のシートになっており、 A00の内容のB00から始まって、内容が増えると B01,B02と追加されていきます。 シートCも同様に、Bしートの子供ならば、C01,C02 と増えてます。 現在の状態だと、ブックの全てを印刷を設定し印刷するの ですが、最初にAシートだけが印刷、続いて、B,Cとそれぞれの シート毎に出力されます。 必要なのは、A0→B00→C00→C01→A1→B11→B12→C11 →A2→B21→C21 という順に並んで出てほしいということです。 今は手作業で印刷されたものを手で並べ替えているのですが、 もっと、おおくなると混乱し多大な時間がかかっております。 という訳で、質問させていただきました。 VBAはあまり書くことはないのですが、VBをやっていたので、 その派生で組んでいる状態です。ですので、読んで理解する ことはできます。 よろしくお願い致します。
お礼
ご回答ありがとうございます。 私のExcelでもできました^^