セルの値が0を空に変えるには

シートにある各セルの値の0を消したい場合があります。0が多すぎて分かりにくい場合などです。

Excelでの通常の操作では、検索と置換ダイアログを使って0を空文字列に置換する、という方法になります。

VBAで行う方法には2つ挙げられます。

  • セル範囲のセルが0であれば消す。(VBAで対象セル範囲をループして1セルずつ処理する方法)
  • Excelの検索と置換ダイアログの機能をVBAで使って0を空に置換する。(検索と置換機能のReplaceメソッドでセル範囲の0を一括で空に置換する方法)

どちらの方法でもいいのですが、2つ目のExcelの検索と置換ダイアログでの方法にはデメリットがあります。そのあたりも含めて後述します。

1. VBAの処理でセルの値の0を消す(おすすめ)

VBAでシートの各セルの値が0かどうかを判定して、0であれば空にする方法のコードが以下になります。

やっているのは、シートの入力セル範囲を示すUsedRangeを使って、1セルずつループして、セルの値が0であれば消す、という内容です。

UsedRangeの詳細については「VBAで入力済みセル範囲を判定する(UsedRange)」をご参照ください。

RangeオブジェクトのValueプロパティを使うと、セルの値が0かどうか判定できます。ただし、「=1-1」のような数式の結果が0の場合もありえるため、数式が設定されている場合は空にしないようにしています。

数式が設定されているかどうかはRangeオブジェクトのHasFormulaプロパティで判定できます。Trueであれば数式が設定されており、Falseであれば数式ではありません。

2. Replaceメソッドを使ってセルの値の0を消す

検索と置換ダイアログをVBAで行う場合は、Replaceメソッドを使うことで同じように動作します。ただし、Replaceメソッドには条件によってはデメリットになる挙動があります。デメリットについては後述します。

Replaceメソッドでのコードはとても単純です。

以下のコードはシートの全てのセルで値が0の場合に空にします。数式のセルは空にはしません。

Replaceメソッドには複数の引数があります。それらの詳細については「VBAでセルの置換を行う(Replaceメソッド)」をご参照ください。

なお、Replaceメソッドにはデメリットがあります

それは、Replaceメソッドを実行したときの設定内容が、Excel上での検索を行う際の「検索と置換」ダイアログにも反映されてしまう点です。

Excel上で「検索と置換」ダイアログを使った場合、前回の検索条件が引き継がれて初期表示されます。VBAのReplaceメソッドも同様で、Replaceメソッド実行後に、Excelで「検索と置換」ダイアログを表示すると、Replaceメソッド実行時の条件が引き継がれて表示されます。

それは場合によっては利点として考えられるかもしれませんが、一般的にはExcel上の検索条件をVBAで書き換えてほしいとはあまり思わないので、欠点として扱われることの方が多い気がします。