はじめに
Excelでデータ処理をしていると、#N/A
、#DIV/0!
、#REF!
といった数式エラーが表示されることがよくあります。これらのエラーは計算過程で必要な場合もありますが、最終的なレポートとして提出する際には、見た目を整えるために非表示にしたり、削除したりしたいものです。
手作業でエラーセルを一つずつ探して削除するのは大変ですが、VBAの SpecialCells
メソッドを使えば、シート内のエラーセルだけを正確に探し出し、一括でクリア(削除)することが可能です。
この記事では、そのためのシンプルで効果的なマクロをご紹介します。
数式エラーのセルをクリアするVBAサンプルコード
このマクロの核心は、SpecialCells
メソッドを使って「数式の結果がエラーになっているセル」という特殊な条件でセルを特定し、それらに対して .Clear
メソッドを実行することです。
完成コード
' 現在のシートのエラーセルを全てクリアする
Sub ClearAllFormulaErrorCells()
' 変数を定義します
Dim targetSheet As Worksheet
Dim errorRange As Range
' 対象シートを設定(現在アクティブなシート)
Set targetSheet = ActiveSheet
' エラーセルが存在しない場合にマクロが止まるのを防ぐ
On Error Resume Next
' 数式の結果がエラー値となっているセルを全て取得
Set errorRange = targetSheet.Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
' エラー処理を元に戻す
On Error GoTo 0
' エラーセルが見つかった場合のみ、クリア処理を実行
If Not errorRange Is Nothing Then
errorRange.ClearContents
MsgBox "数式エラーのセルをクリアしました。", vbInformation
Else
MsgBox "数式エラーのセルは見つかりませんでした。", vbInformation
End If
End Sub
使い方
- VBE(
Alt + F11
)を開き、標準モジュールに上記のコードを貼り付けます。 - エラーセルをクリアしたいシートをアクティブにします。
ClearAllFormulaErrorCells
マクロを実行します。- シート上の
#N/A
などのエラーが表示されていたセルが、すべて空白になります。
コードの解説
On Error Resume Next
もしシート上にエラーセルが一つも存在しない場合、SpecialCells
メソッドはエラーを返してマクロが停止してしまいます。この一行は、そうしたエラーが発生しても無視して次の行に進むようにするおまじないです。
Set errorRange = targetSheet.Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
このコードが処理の最も重要な部分です。
.SpecialCells
: 指定した条件に合致するセル範囲を取得するメソッドです。xlCellTypeFormulas
: 第1引数で、「数式が入力されているセル」を対象にすることを指定します。xlErrors
: 第2引数で、その中でも「結果がエラー値であるもの」という追加条件を指定しています。
これにより、errorRange
という変数には、シート上の数式エラーセルがすべて格納されます。
If Not errorRange Is Nothing Then ...
On Error Resume Next
を使った結果、エラーセルが見つからなかった場合、errorRange
変数は空っぽ(Nothing
)のままになります。この If
文で、変数が空っぽでない、つまり「エラーセルが一つ以上見つかった場合」にのみ、クリア処理を実行するようにしています。
errorRange.ClearContents
見つかったエラーセル範囲に対して .ClearContents
メソッドを実行し、セルの内容を削除しています。.Clear
を使うと書式まで削除されますが、今回はエラー値のみを消したいので .ClearContents
の方が適しています。
まとめ
今回は、VBAを使ってシート上の数式エラーを一括でクリーンアップする方法をご紹介しました。
.SpecialCells(xlCellTypeFormulas, xlErrors)
を使えば、エラーセルだけをピンポイントで特定できる。On Error Resume Next
を組み合わせることで、エラーセルが存在しない場合でもマクロが正常に終了するようにできる。
このマクロを一つ用意しておくだけで、レポートの体裁を整える作業が劇的に速くなります。ぜひ活用してみてください。