【VBAリファレンス|実務向け】セルのエラーを空白にして印刷する|Excel VBAで帳票をスマートに仕上げる

スポンサーリンク

導入: なぜ「エラー値の非表示」が重要なのか

実務で作成するExcelの帳票において、計算式の結果が「#N/A」や「#DIV/0!」と表示されたまま印刷されてしまった経験はありませんか?
これらは計算過程で生じる正常なエラーであっても、資料として相手に渡す際には非常に見栄えが悪く、「計算結果が未確定である」という不信感を与えてしまいかねません。
今回は、標準機能でエラーを空白にする方法に加え、VBAを使って「業務効率を落とさずに、自動でエラーを検知して非表示にする」という、一歩進んだ実務テクニックを解説します。

基礎知識: Excelのエラー値と印刷設定

Excelには大きく分けて8種類のエラー値が存在します。これらは数式の誤りだけでなく、データ未入力時にも発生します。
標準機能である「ページ設定」の「シート」タブから「セルのエラー」を「空白」に設定すれば、印刷時のみエラーを隠すことが可能です。しかし、この方法では「画面上ではエラーが見えたまま」であり、確認作業と印刷用設定を切り替える手間が発生します。そこで、VBAを用いて「エラーセルを特定し、値を直接クリアする」というアプローチが実務では非常に有効です。

実装/解決策: VBAによる一括クリアの実装

VBAを利用すれば、ボタン一つで「シート内のエラーのみを空白にする」という処理が可能です。
特に、データ量が多い表で一つずつ修正するのは非効率です。SpecialCellsメソッドを使用することで、エラーが発生しているセルだけを瞬時に特定し、処理を行うことができます。

サンプルプログラム: エラーセルを自動で空白にする

以下のコードを標準モジュールに貼り付けて実行してください。アクティブシート内のエラーセルを検索し、値を消去します。

Sub ClearErrorCells()
‘ エラーが発生しているセルを格納する変数
Dim rngError As Range

‘ エラー値のみを対象にセット
On Error Resume Next ‘ エラーがない場合に発生するエラーを回避
Set rngError = ActiveSheet.Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
On Error GoTo 0

‘ エラーセルが存在する場合のみ処理を実行
If Not rngError Is Nothing Then
‘ セルの値を空にする
rngError.ClearContents
MsgBox “エラーセルを空白にしました。”, vbInformation
Else
MsgBox “エラーセルは見つかりませんでした。”, vbInformation
End If
End Sub

応用・注意点: 現場で役立つ補足

1. 元の数式を消さないように注意
上記のコードでは「ClearContents」を使用して値を消去していますが、これは「数式そのもの」を削除します。もし「エラーの時だけ文字色を白にする(見えないようにする)」という運用が必要な場合は、ClearContentsの代わりに「rngError.Font.Color = vbWhite」と書き換えるのがおすすめです。
2. 誤操作の防止
一度値を消すと「元に戻す(Ctrl+Z)」ことができません。重要なデータの場合、マクロ実行前に「バックアップをとる」か、「印刷時のみ一時的に色を変える」といった設計にすることを強く推奨します。
3. IFERROR関数の併用
VBAを使うまでもない単発の表であれば、数式自体を「=IFERROR(数式,””)」と組むのが最も確実です。VBAは「既存の複雑なシートを修正する」際に、ぜひ活用してください。

タイトルとURLをコピーしました