長い行数の表だが、データが入っているのは、上の方の一部の行だけ。しかも、その行数は決まっていない。
ような表を印刷する場合、そのまま印刷すると、表のデータが入っていない部分も印刷されてしまい、紙の無駄になる。見にくいし。
そこで、通常データが入っている行数に応じて、手動で印刷範囲を変更して印刷するわけだが、これは面倒くさい。これが自動で勝手に変わってくれると、非常にありがたい。
解決策:
ポイント:まずは、基本事項。
名前の定義で名前を
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関数を使って印刷範囲を自動変更する。
という方針がいいだろう。
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とする。
なので、基準として、印刷範囲の左上端のセルを指定して、行数と列数はともに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 件のコメント:
コメントを投稿