ただ単純に値が「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 エクセルの自動更新を開始する |