【VBA】数式エラーのセル(#N/Aなど)だけを一括クリアする方法

目次

はじめに

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

使い方

  1. VBE(Alt + F11)を開き、標準モジュールに上記のコードを貼り付けます。
  2. エラーセルをクリアしたいシートをアクティブにします。
  3. ClearAllFormulaErrorCells マクロを実行します。
  4. シート上の #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 を組み合わせることで、エラーセルが存在しない場合でもマクロが正常に終了するようにできる。

このマクロを一つ用意しておくだけで、レポートの体裁を整える作業が劇的に速くなります。ぜひ活用してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次