和風スパゲティのレシピ

日本語でコーディングするExcelVBA

選択エリアの0値を置換で消去するマクロ

ただ単純に値が「0」のセルを置換でクリアするマクロを紹介します。


手作業で言うところの

  • Ctrl + H で検索と置換ダイアログを開く
  • 検索値に0、置換後を空に設定
  • セル内容が完全に一致にチェック
  • 置換を実行

ですね。


単純な処理ですのでコードも単純です。

Sub ゼロ値のセルをクリアする()
    With Application
    
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
        .EnableEvents = False
    
        Selection.Replace 0, "", lookat:=xlWhole
    
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
        .EnableEvents = True
    
    End With
End Sub

実行型の便利マクロですので、
Excel起動時に裏で開かれる「個人用マクロブック」などに搭載して使ってください。

ショートカットキーに登録したり、ツールバーやリボンにボタン配置すると便利です。


こんな単純なマクロですが、
意外と手作業の工程が多いため、ワンボタンになるとかなり便利です。

よく使う人はショートカットにセットしてもいいですね。


このマクロは結構重要なトラップを回避でき、
まずは完全一致のチェックをつけ忘れて100が1になるミスを防いでくれます。

結構危険なミスなので、これを回避できるのはありがたいですね。


また、置換(Replace)はWorksheet_Changeイベントと非常に相性が悪いです。

セル値の変更で起動するマクロを搭載したシートで広範囲の置換を実行すると、
フリーズしたかというレベルでExcelがテンパってしまいます。


普通の置換は気を付けるしかありませんが、
せめて0値の置換だけは、このマクロから実行すると確実に

Application.EnableEvents = False

を挟んで実行してくれるため、この罠にはまることがなくなります。

これもありがたいセーフティですね。


ただし、実行型マクロ全般に言えることですが、
「元に戻る」が使えなくなりますので、十分に気を付けて実行しましょう。

おまけ:Excelの自動更新系を関数にまとめる

今回のマクロを再掲すると、

Sub ゼロ値のセルをクリアする()
    With Application
    
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
        .EnableEvents = False
    
        Selection.Replace 0, "", lookat:=xlWhole
    
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
        .EnableEvents = True
    
    End With
End Sub

と、メインコードが1行なのにその他のコードが8行もあります。

おなじみのマクロ高速化トリオですね。


特に今回はEnableEventsのONOFFが重要でしたが、
実行型マクロはこの3つをセットでONOFFすることが多いので、
それを関数にしておくとマクロづくりが楽になります。


こんな感じ↓

Sub ゼロ値のセルをクリアする()
    Call エクセルの自動更新を停止する
    Selection.Replace 0, "", lookat:=xlWhole
    Call エクセルの自動更新を開始する
End Sub

Sub エクセルの自動更新を停止する()
    With Application
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
        .EnableEvents = False
    End With
End Sub

Sub エクセルの自動更新を開始する()
    With Application
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
        .EnableEvents = True
    End With
End Sub

下の関数二つを用意して使いまわせば、
以降汎用マクロを作るときはCallすればいいだけになります。

↑のメインマクロもたった3行になりましたね!


汎用マクロだけでなく、普通に作るマクロでももちろん使えますのでご利用ください。

ユーザー辞書を使って簡単に変換で呼び出すのもおすすめです。

キー 読み 単語
eof えおf Call エクセルの自動更新を停止する(False)
eon えおん Call エクセルの自動更新を開始する