🖨️ Excelの印刷範囲を数式で自動可変にする方法
Print_Area × 数式で"データがある所まで"を自動認識させるテクニック
💡 はじめに ― 固定の印刷範囲が起こす問題
Excelで印刷範囲を手動設定していると、データの増減に追従できず「空白ページが大量に出る」「最新データが切れる」といった問題が頻発します。
本記事ではPrint_Area(印刷範囲の名前定義)に数式を直接入力して、常に"最終データのある行まで"を印刷範囲にする方法を解説します。さらに、この仕組みを応用した案内文書の差し込み印刷風テクニックやラベル印刷の無駄紙削減も詳しく紹介します。
基本:Print_Area に数式を入れる手順
ここでは「売上一覧」シートの A〜E列にデータがあり、3行目からデータが始まる場合を例にします。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | 売上一覧レポート | ||||
| 2 | No | 日付 | 商品名 | 数量 | 金額 |
| 3 | 1 | 2025/01/05 | ウィジェットA | 10 | ¥5,000 |
| 4 | 2 | 2025/01/06 | ウィジェットB | 5 | ¥3,200 |
| 5 | 3 | 2025/01/07 | ガジェットC | 20 | ¥12,000 |
| 6 | |||||
Print_Area(スコープ:売上一覧)を選択。存在しない場合は先に「ページレイアウト → 印刷範囲の設定」で仮の範囲を設定。数式バリエーション(3種)
① XLOOKUP + INDEX版(Microsoft 365 推奨)
XLOOKUP(TRUE,INDEX(売上一覧!$B:$B<>"",0),
ROW(売上一覧!$B:$B),,0,-1),5)
B列を下から検索して最後の非空白セルの行番号を取得し、A3からその行のE列までを範囲とします。XLOOKUPの第5引数 -1(逆方向検索)がポイントです。
② INDEX + COUNTA版(旧バージョン推奨)
COUNTA(売上一覧!$B:$B)+2, 5)
COUNTAでB列の入力済みセル数を数え、ヘッダー行分を加算(+2)して最終行を算出。揮発性関数を使わないため再計算負荷が軽く済みます。
③ OFFSET + COUNTA版(非推奨)
=OFFSET(売上一覧!$A$3, 0, 0,
COUNTA(売上一覧!$B:$B), 5)
OFFSETは揮発性関数のため非推奨。INDEX+COUNTAで同じ結果が得られます。
| 項目 | ① XLOOKUP+INDEX | ② INDEX+COUNTA | ③ OFFSET+COUNTA |
|---|---|---|---|
| 対応バージョン | 365 / 2021以降 | 2007以降すべて | 2007以降すべて |
| 揮発性 | なし | なし | あり(非推奨) |
| 空白行の扱い | 途中空白に強い | 途中空白に弱い | 途中空白に弱い |
| 評価 | ★★★ 推奨 | ★★☆ 旧版向け | ★☆☆ 非推奨 |
⚠️ 最大の落とし穴 ― 名前の管理の罠
Print_Areaに数式を入れた後でも、「ページレイアウト → 印刷範囲の設定」を実行すると数式が上書きされます。
' を付ければ計算されず文字列として保存できます。万が一消えても、そこからコピーして名前の管理に貼り直すだけで復旧できます。
📄 活用例①:案内文書の差し込み印刷をExcelだけで実現
Wordの差し込み印刷やVBAを使わなくても、Excelの数式とスピンボタンだけで差し込み印刷を実現できます。IF関数で条件分岐を埋め込めば宛先ごとに文面を変える管理もでき、Excelならではの柔軟さを最大限に活かせます。
宛先リストシートの構成
宛先データを管理するシートを用意します。A列に連番(検索キー)を入れておくのがポイントです。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | No | 氏名 | 住所 | 部署 |
| 2 | 1 | 田中 太郎 | 東京都千代田区… | 営業部 |
| 3 | 2 | 鈴木 花子 | 大阪府大阪市… | 総務部 |
| 4 | 3 | 佐藤 一郎 | 愛知県名古屋市… | 営業部 |
| 5 | 4 | 高橋 美咲 | 福岡県福岡市… | 企画部 |
| 6 | … | … | … | … |
| 101 | 100 | 山田 次郎 | 北海道札幌市… | 開発部 |
案内文書シートの構成 ― スピンボタン+縦並べテンプレート
テンプレートを10通分縦に並べ、印刷範囲外のZ列に置いたスピンボタンで開始番号を制御。1回押すだけで10件ずつ切り替え印刷できます。
| A | B | C | D | … | Z(範囲外) | |
|---|---|---|---|---|---|---|
| 1 | 【1通目】ご案内 | 開始No ▶ 1 | ||||
| 2 | =IFERROR(VLOOKUP($Z$1, 宛先リスト!$A:$D, 2, FALSE) & " 様", "") | ↑ スピンボタン(+10) | ||||
| 3 | 拝啓 時下ますます…(本文テンプレート) | |||||
| … | (50行分のテンプレート) | |||||
| 50 | 敬具 | |||||
| 51 | 【2通目】ご案内 | |||||
| 52 | =IFERROR(VLOOKUP($Z$1+1, …) & " 様", "") | |||||
| … | … | |||||
| 451 | 【10通目】ご案内 | |||||
| 452 | =IFERROR(VLOOKUP($Z$1+9, …) & " 様", "") | |||||
| … | … | |||||
| 500 | 敬具 | |||||
| A | B | C | D | |
|---|---|---|---|---|
| 1 | No | 氏名 | 住所 | 部署 |
| 2 | 1 | 田中 太郎 | 東京都千代田区… | 営業部 |
| 3 | 2 | 鈴木 花子 | 大阪府大阪市… | 総務部 |
| … | … | … | … | … |
| 101 | 100 | 山田 次郎 | 北海道札幌市… | 開発部 |
スピンボタンの設定
各テンプレートの宛名セル数式
=IFERROR(VLOOKUP($Z$1, 宛先リスト!$A:$D, 2, FALSE) & " 様", "")
' 2通目
=IFERROR(VLOOKUP($Z$1+1, 宛先リスト!$A:$D, 2, FALSE) & " 様", "")
' 3通目 ~ 10通目(+2, +3, … +9 と続く)
=IFERROR(VLOOKUP($Z$1+9, 宛先リスト!$A:$D, 2, FALSE) & " 様", "")
動作イメージ:10件ずつバッチ印刷
No.1〜10
No.11〜20
No.21〜30
No.91〜100
印刷プレビューのイメージ(Z1 = 1 の場合)
ご案内
田中 太郎 様
拝啓 時下ますます…敬具
ご案内
鈴木 花子 様
拝啓 時下ますます…敬具
ご案内
佐藤 一郎 様
拝啓 時下ますます…敬具
4〜9通目
ご案内
山田 花子 様
拝啓 時下ますます…敬具
案内文書シートの Print_Area 数式
=案内文書!$A$1:INDEX(案内文書!$A:$D,
CEILING(XLOOKUP(TRUE,INDEX(案内文書!$B:$B<>"",0),
ROW(案内文書!$B:$B),,0,-1), 50), 4)
' INDEX+COUNTA版(旧バージョン向け)
=案内文書!$A$1:INDEX(案内文書!$A:$D,
CEILING(COUNTA(案内文書!$B:$B), 50), 4)
IF関数で条件分岐 ― Excelならではの柔軟さ
=IF(VLOOKUP($Z$1, 宛先リスト!$A:$D, 4, FALSE)="営業部",
"営業部向け特別キャンペーンのご案内",
"新サービス開始のご案内")
この方式のメリットとデメリット
| 比較項目 | Word差し込み印刷 | Excel VBA | 本方式(数式+スピンボタン) |
|---|---|---|---|
| セットアップ | 中(Word+Excel連携) | 高(コード知識が必要) | 低(数式のみ) |
| 条件分岐 | 低(IFフィールドが煩雑) | 高(何でもできる) | 高(IF/VLOOKUP等) |
| 大量印刷 | 一括で楽 | 一括で楽 | 10件/50件ずつバッチ |
| 環境依存 | Wordが必要 | マクロ有効ブック | Excelのみ |
| 他の人に渡して 作業してもらう | 差し込み印刷の操作を 教える必要あり | マクロへの抵抗感・ セキュリティ警告あり | スピンボタンを押して 印刷するだけ(誰でも可) |
| ファイルサイズ | テンプレートは1ページ分 | テンプレートは1ページ分 | テンプレートを複数ページ分 並べるため大きくなる |
🏷️ 活用例②:ラベル印刷で無駄な空白を印刷しない
市販の10面ラベルシール(A4用紙1枚にラベルが10面印刷されている用紙)を使う場合、データが15件ならシール2枚目の5面目までで印刷を止め、データがないシール3枚目は印刷したくない――というのは自然な要求です。
考え方:シール1枚=1ページ単位で印刷範囲を切る
1面あたり5行 × 10面 = 50行で1ページ(=シール1枚分)。個々のラベル単位ではなくページ単位(50行区切り)で印刷範囲を決定します。あるページ内にデータが1件でもあればそのシール全体を印刷し、データが1件もないページは対象外にします。
10面ラベルシールの構成イメージ
実際のA4ラベルシール用紙を模したイメージです。左右に並べて比較できます。
ラベルシートの Excel 上の構成
上のシールイメージをExcel上ではこのように構成します。タブをクリックして宛先リストも確認できます。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| ── シール1枚目(1ページ目:1〜50行)── | ||||||
| 1 | 〒100-0001 | 東京都千代田区… | 田中 太郎 様 | 〒530-0001 | 大阪府大阪市… | 鈴木 花子 様 |
| 2〜5 | (面1 の残り行) | (面2 の残り行) | ||||
| 6 | 〒460-0001 | 愛知県名古屋市… | 佐藤 一郎 様 | 〒812-0001 | 福岡県福岡市… | 高橋 美咲 様 |
| 7〜10 | (面3) | (面4) | ||||
| … | 面5〜面10(同様に左右で2面ずつ配置) | |||||
| 46〜50 | ← 1ページ目ここまで(シール1枚分=50行) | |||||
| ── シール2枚目(2ページ目:51〜100行)── | ||||||
| 51 | 〒330-0001 | 埼玉県さいたま市… | 吉田 六郎 様 | 〒260-0001 | 千葉県千葉市… | 松本 七子 様 |
| … | 面3〜面5にデータあり / 面6〜10は空白 | |||||
| 75 | 〒600-0001 | 京都府京都市… | 林 十郎 様 | ← 最終データ(面5) | ||
| 76〜100 | (空白面:同じシール内なので印刷される) | |||||
| ── シール3枚目(101行〜)― データなし → 印刷されない ── | ||||||
| A | B | C | D | |
|---|---|---|---|---|
| 1 | No | 氏名 | 住所 | 郵便番号 |
| 2 | 1 | 田中 太郎 | 東京都千代田区… | 〒100-0001 |
| 3 | 2 | 鈴木 花子 | 大阪府大阪市… | 〒530-0001 |
| … | … | … | … | … |
| 16 | 15 | 林 十郎 | 京都府京都市… | 〒600-0001 |
データ件数と印刷範囲の対応
| データ件数 | 最終データ行 | CEILING (最終行, 50) |
印刷されるA4用紙 (=シール)の枚数 |
Print_Areaに 設定される範囲 |
|---|---|---|---|---|
| 5件 | 15行目 | 50 | 1枚 | $A$1:$F$50 |
| 10件 | 25行目 | 50 | 1枚 | $A$1:$F$50 |
| 15件 | 40行目 | 50 | 1枚 | $A$1:$F$50 |
| 20件 | 50行目 | 50 | 1枚 | $A$1:$F$50 |
| 21件 | 55行目 | 100 | 2枚 | $A$1:$F$100 |
| 30件 | 75行目 | 100 | 2枚 | $A$1:$F$100 |
ラベルシートの Print_Area 数式
=ラベル!$A$1:INDEX(ラベル!$A:$F,
CEILING(XLOOKUP(TRUE,INDEX(ラベル!$A:$A<>"",0),
ROW(ラベル!$A:$A),,0,-1), 50), 6)
' INDEX+COUNTA版(旧バージョン向け)
=ラベル!$A$1:INDEX(ラベル!$A:$F,
CEILING(COUNTA(ラベル!$A:$A), 50), 6)
応用カスタマイズ
列数を動的に変える
最終列もデータに応じて変えたい場合は、INDEXの列番号部分にもCOUNTAを組み合わせます。
CEILINGでページ単位に切り上げ
案内文書やラベル印刷のように「ページ単位」で印刷範囲を決めたい場合は CEILING(最終行, 50)。
複数シートへの一括適用
同じ構造のシートが複数ある場合は、各シートのPrint_Areaをそれぞれ名前の管理から設定。シート名部分だけ変えれば同じ数式が使えます。
トラブルシューティング
「印刷範囲の設定」を押して数式が消えた
離れたセルに残しておいたバックアップの数式をコピーし、名前の管理でPrint_Areaの参照範囲に貼り付けて復旧。バックアップがない場合は本記事の数式を参考に再設定してください。
印刷プレビューで範囲がおかしい
名前の管理でPrint_Areaの参照範囲が数式になっているか確認。固定範囲なら数式が上書きされています。
#REF! や #VALUE! エラー
数式内のシート名と実際のシート名が一致しているか確認。スペースを含む場合はシングルクォートで囲む。
COUNTAで途中空白がある場合のずれ
XLOOKUP版(①)を使用するか、データ途中に空白を作らない運用を徹底。
まとめ
① 基本:データの最終行まで自動で印刷範囲を調整。空白ページの排除・データ切れの防止。
② 案内文書:スピンボタン+VLOOKUP+縦並べテンプレートで差し込み印刷をExcelだけで実現。Wordの差し込み印刷を知らない人に渡しても「スピンボタンを押して印刷するだけ」で使えるのが大きな利点。ただし、テンプレートを複数ページ並べるためファイルサイズが大きくなる点と、数式の仕込みミスがそのまま印刷ミスにつながる点には注意。
③ ラベル印刷:CEILINGでシール1枚(=1ページ)単位に切り上げ。データがあるシールだけ印刷し、空白シールは自動除外で用紙の無駄ゼロ。
※ 設定した数式は離れたセルにテキストとして残しておくと、誤操作で消えた時もすぐ復旧できます。