Powered By Blogger

暇がない。自力じゃ無理な人はこちらへ。

2014年7月6日日曜日

印刷範囲を自動的に変えたい。

事例:
長い行数の表だが、データが入っているのは、上の方の一部の行だけ。しかも、その行数は決まっていない。
ような表を印刷する場合、そのまま印刷すると、表のデータが入っていない部分も印刷されてしまい、紙の無駄になる。見にくいし。
そこで、通常データが入っている行数に応じて、手動で印刷範囲を変更して印刷するわけだが、これは面倒くさい。これが自動で勝手に変わってくれると、非常にありがたい。

解決策:

ポイント:
まずは、基本事項。
名前の定義で名前を

 Print_Area

とすることにより、その参照範囲が印刷範囲となる。
で、この参照範囲にIF関数や、OFFSET関数を使って、範囲を可変にするような式を入れてやれば良い。

具体的にどうするのか?
例えば、下のような表を印刷するときに、数値が入力されていない、罫線だけの部分は印刷したくない。というような場合。

A B C D
1
2 表1
3 項目A 項目B 項目C 項目D
4 1 1 1 1
5 2 2 2 2
6 3 3 3 3
7 4 4 4 4
8 5 5 5 5
9 6 6 6 6
10 7 7 7 7
11 8 8 8 8
12 9 9 9 9
13 10 10 10 10
14        
15        
16        

この場合、
OFFSET関数を使って印刷範囲を自動変更する。
という方針がいいだろう。

OFFSET(基準, 行数, 列数, [高さ], [幅])

なので、基準として、印刷範囲の左上端のセルを指定して、行数と列数はともに0としておけば、後は基準からみた高さと幅が印刷範囲となる。
そこで、

OFFSET(印刷範囲の左上端,0,0,高さを求める式,幅を求める式)

の形になる。

印刷範囲の左上端
この例だと$A$1。

幅を求める式
おそらく固定幅の場合がほとんどだと思われるので、固定値でいいだろう。
この例だと、D列までなので、4だ。

高さを求める式
これについては、データの一番下の行の位置を求める必要があるが、これには色々と方法があると思うが、今回は、
 1.必ずデータが入力されていることが予想される、最初の列の空白以外の行数を求める。
 2.表に含まれない、見出しより上の行の数を計算に含めるため、見出しより上の空白の数を求める。
 3.2つを足して、全体の印刷範囲の行数とする。
というやり方でやる。

 まず1。
  COUNTA($A:$A) ・・・  *ここで、$A:$AはA列全体を指す(A:Aでも同じ) これが一番のツボかも。

 次に2。
  COUNTBLANK(OFFSET($A$1,0,0,MATCH("項目A",$A:$A,0),1))
  MATCH関数で、見出し行を検索して、OFFSET関数で範囲指定。最後にCOUNTBLANKで空白行をカウント。

 最後に2つを足して、
 COUNTA($A:$A)+COUNTBLANK(OFFSET($A$1,0,0,MATCH("項目A",$A:$A,0),1))
 これが、印刷範囲の高さを求める式となる。


結局、印刷範囲を求める式は、
OFFSET($A$1,0,0,COUNTA($A:$A)+COUNTBLANK(OFFSET($A$1,0,0,MATCH("項目A",$A:$A,0),1)),4)


最後の締めは、これを実際に名前の定義に設定する。

1.名前をPrint_Areaとする。
2.参照範囲に上の印刷範囲を求める式を入力する。(=を忘れずに)

以上、たぶん機能すると思うが、動かねーよ!みたいな事があれば、連絡してくれれば、ありがたいです。

次回予告:

同じく印刷範囲について、
「印刷範囲をいくつかのパターンから選択したい」

事例:
複数の表が同じシートにあるが、訳ありで、どれかの表を印刷するときは、他の表は、一緒に印刷したくない。1回だけなら、手動で印刷範囲指定でもいいが、何度もとなると面倒くさい。それに印刷範囲を指定出来ない人に、印刷だけ頼む場合も。
やっぱり簡単に印刷範囲を切り替えられると便利。



みたいな場合について。

0 件のコメント:

コメントを投稿