• ベストアンサー

印刷行の長さ比較をして印刷をしたいのです

Sheet1・Sheet2・Sheet3があります。 Sheet1は印刷用シートです。 Sheet1のA1にはSheet2のA1、Sheet1のB1にはSheet3のA1が 式としてリンクされており、それぞれの列における 以下の行も同様に式をコピーしてリンクさせています。 Sheet2とSheet3のデータ行数を比較して、多い方の 行数をSheet1の印刷範囲として行指定したいのですが、 どうしたらよろしいのでしょうか? なおSheet1における印刷列はA~Bで固定されています。 ご教授ください。

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

  • ベストアンサー
noname#70958
noname#70958
回答No.1

Sheet1を開いた状態で、 挿入>名前>定義  名前: Print_Area  参照範囲: =OFFSET(Sheet1!$A:$B,,,MAX(COUNTA(Sheet2!$A:$A),COUNTA(Sheet3!$A:$A))) とすれば、A:B列の【Sheet2!A列とSheet3!A列のデータ数を比較して多い方】の行数までが印刷範囲となります。 Excel2003で動作確認済。 ただし、上記は「データの数」をカウントしているだけなので、 Sheet2,3のA列の途中に空白のセルがあるとずれてしまいます。 「データが入っている最後の行」を調べて設定する場合は、   =OFFSET(Sheet1!$A:$B,,,MAX(MAX(INDEX((Sheet2!$A$1:$A$999<>"")*ROW(Sheet2!$A$1:$A$999),)),MAX(INDEX((Sheet3!$A$1:$A$999<>"")*ROW(Sheet3!$A$1:$A$999),)))) なお、Sheet2,3のデータ数が変わった場合、 改ページプレビューの表示は【リアルタイムでは】変わりませんが、 印刷は適切に行われますし、印刷プレビューなどを一度表示すれば更新されます。 数式については、OFFSETではなくINDIRECTを使ってもかまいません。 ■【Excel】印刷範囲の設定 http://bekkoame.okwave.jp/qa2644048.html 以上ご参考まで。

matchy4649
質問者

お礼

マクロばかり頭にありましたが、関数のみで処理できるのには 驚きました。早速使わせていただきます!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

印刷範囲がA・B列である場合は 5を1:2とすれば良いのでしょうか? Range(Cells(1, 1), Cells(Range("F1").Value, 5)).Select              ↑行の最後の番号 ↑列の最後の番号 です。 列番号は A 1 B 2 C 3 と数えていきます。 A~B列のみ印刷でしたら Range(Cells(1, 1), Cells(Range("F1").Value, 2)).Select で大丈夫です。

matchy4649
質問者

お礼

なるほど!マクロを使う時はこれでいけました! ありがとうございました

すると、全ての回答が全文表示されます。
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

一応 VBAと関数の複合案です。 F1にセル(印刷しない列にでも) =MAX(COUNTA(Sheet2!A:A),COUNTA(Sheet3!A:A)) といれてSheet1とSheet2のA列の長いほうの行番号を出しておく。 VBエディター起動して Sub Test() Range(Cells(1, 1), Cells(Range("F1").Value, 5)).Select Selection.PrintOut Copies:=1, Preview:=True, Collate:=True End Sub をコピイします。 このVBAを使って印刷します。 上記VBAでは印刷範囲がE列ですので Cells(Range("F1").Value, 5)).Select の部分のF1と5をそちらの都合に合わせてください。

matchy4649
質問者

補足

早速のお返事ありがとうございます。 印刷範囲がA・B列である場合は 5を1:2とすれば良いのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A