- ベストアンサー
エクセル2010で表の印刷範囲を自動指定する方法について
- エクセル2010で特定の表の印刷範囲を自動的に指定する方法について教えてください。
- 質問1では、表Aの印刷範囲を指定する際に問題が発生しています。どのような修正が必要なのでしょうか。
- また、質問2では、表Aと表Bの特定の範囲を印刷する方法について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
大変失礼致しました。 >マクロ以外の方法で教えてほしいです。 という一文を見落としておりました。 マクロ以外となりますと、印刷範囲の設定を自動化する事は困難ではないかと思います。 只、印刷範囲そのものは変更せずとも、条件付き書式を使用して、「A列に1が表示されていない行」を非表示にする事は出来るかと思います。(但し、A列に1が表示されていない行も、非表示になっているだけで、実際にはデータは存在していますから、余分な行のみを含んだページでは白紙が印刷される筈です) A1セルセルを選択 ↓ [ホーム]タブ内の「スタイル」グループの中にある[条件付き書式]ボタンをクリック ↓ 現れた「スタイル」グループの中にある[条件付き書式]ボタンをクリック ↓ 現れた選択肢の中にある[ルールの管理]をクリック ↓ 現れた「条件付き書式ルールの管理」ダイアログボックスの中にある[新規ルール]ボタンをクリック ↓ 現れた「新しい書式ルール」ダイアログボックスの「ルールの種類を選択して下さい」欄の中にある[数式を使用して、書式設定するセルを決定]をクリック ↓ 現れた「次の数式を満たす場合に値を書式設定」欄の中に =$A1<>1 と入力 ↓ 「新しい書式ルール」ダイアログボックスの[書式]ボタンをクリック ↓ 現れた「セルの書式設定」ダイアログボックスの[表示形式]タブをクリック ↓ 現れた「分類」欄の中にある[ユーザー定義]をクリック ↓ 現れた「種類」欄に ;;; と入力 ↓ 「セルの書式設定」ダイアログボックスの[罫線]タブをクリック ↓ 現れた「プリセット」欄の中にある[なし]ボタンをクリック ↓ 「セルの書式設定」ダイアログボックスの[塗りつぶし]タブをクリック ↓ 現れた[色なし]ボタンをクリック ↓ 「セルの書式設定」ダイアログボックスの[OK]ボタンをクリック ↓ 「新しい書式ルール」ダイアログボックスの[OK]ボタンをクリック ↓ 「条件付き書式ルールの管理」ダイアログボックスの「適用先」欄をクリック ↓ A1セルから「何らかのデータが存在している最終行におけるH列のセル」までの範囲をまとめて選択 ↓ 「条件付き書式ルールの管理」ダイアログボックスの[適用]ボタンをクリック ↓ 「条件付き書式ルールの管理」ダイアログボックスの[OK]ボタンをクリック
その他の回答 (2)
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答No.1です。 先程の回答において、一部誤りが御座いました。 >A行に必ず1が入力されているものとして と書きましたが、「A}行」というのは誤りで、正しくは「A列」でした。 申し訳御座いません。 因みに、A列に入力されるの印刷範囲を示す数値は、必ずしも1である必要は御座いません。 0.1よりも大きな数値がA列の印刷範囲の最下段の行に入力されていて、尚且つ、A列の印刷範囲よりも下の行には0.1以上の数値が入力されてさえいなければ(空欄でも可)、A列の印刷範囲の最下段の行に何が入力されていても構いません(空欄でも可)。 それから、特定の決まった列において、印刷範囲の最下段の行のセルに、必ず何らかの文字列が入力されていて、それよりも下のセルが必ず空欄(関数によって空欄となっている場合も可)となっている場合や、 特定の決まった列において、印刷範囲の最下段の行のセルに、必ず何らかの文字列が入力されていて、それよりも下のセルが必ず空欄(関数によって空欄となっている場合も可)となっている場合には、 A列を使わずとも印刷範囲をマクロで設定する方法があります。 例えば、印刷範囲の最下段の行のB列のセルに、必ず何らかの数値か文字列が入力されている事が決まっていて、B列におけるそれよりも下の行の全てのセルが空欄のみとなっている場合には、印刷を行う前に、次の様なVBAマクロを実行して下さい。 Sub Macro() ActiveSheet.PageSetup.PrintArea = "" Dim N As Long N = 0 Dim S As Long S = 0 If Application.WorksheetFunction.Count(Range("B:B")) > 0 Then N = Application.WorksheetFunction.Match(9E+307, Range("B:B")) End If If Application.WorksheetFunction.CountIf(Range("B:B"), "*?") > 0 Then S = Application.WorksheetFunction.Match("*?", Range("B:B"), -1) End If If N + S > 0 Then ActiveSheet.PageSetup.PrintArea = "B3:H" & Application.WorksheetFunction.Max(N, S) End If End Sub
- kagakusuki
- ベストアンサー率51% (2610/5101)
【質問1の回答】 A行に必ず1が入力されているものとして、印刷を行う前に、次の様なVBAマクロを実行して下さい。 Sub Macro() Dim N As Long N = Application.WorksheetFunction.Match(0.1, Range("A:A"), -1) ActiveSheet.PageSetup.PrintArea = "B3:D" & N End Sub 【質問1の回答】 【質問1の回答】のマクロの ActiveSheet.PageSetup.PrintArea = "B3:D" & N という行の中の "B3:D" & N という箇所を "B3:H" & N に変更したマクロを印刷を行う前に実行して下さい。
お礼
何度もご丁寧に回答くださりありがとうございました。 マクロも機会があったらやってみたいと思います。 いろいろなやり方も参考になりました。