初期化のVBAは、起動のさせ方に注意したいもの。
なぜなら、VBAを実行したら「戻す(Ctrl+Z)」が効かないからです。
そんな時は特定のキーワードを使って初期化してみましょう。

まずは結論
- 特定セルに指定キーワードを入れる
- 対象のコードが起動する
このような仕組みを作っています。
例えば、今回ご紹介するのは、
- 「G2セル」に「aaa」を入れてEnter
- 「P7整理」が起動する
といったものです。
コード自体は私の運用に合わせた形なので、そのまま活用は難しいかもしれません。
しかし、考え方は応用できるかなと。
サンプルファイルを置いておきますので、触ってみていただければ。
以下、コードの詳細です。
ざっくり仕組みが知りたい方だけどうぞ。
コード詳細
まず、初期化に関するコードを書いていきます。
ここは人のよって用途が異なるので、参考まで。
初期状態に戻せるよう組んでいきましょう。
書く場所は「標準モジュール」でOKです。
Option Explicit
Sub P7整理()
With Sheets("P7")
'P7の色を消す
.Range("B2").CurrentRegion.Interior.ColorIndex = 0
Dim rng As Range
Set rng = .Range("B5:E11") 'Todo記載箇所の定義
'記載内容をクリアして、フォーマットの形に戻す
.Range("B19:C77").ClearContents
.Range("B13:E14").ClearContents
rng.ClearContents
.Range("C3:E3") = "●●"
.Range("D2") = "●●"
.Range("B5").Formula = "=VLOOKUP(G5,$A$21:$D$76,4,FALSE) "
rng.Formula = .Range("B5").Formula
'シート内の図形を全選択し削除する(選択を使用しない)
Dim shp As Shape
For Each shp In .Shapes
shp.Delete
Next shp
End With
End Sub次に、これを起動するコードを整理します。
特定シートのセルが変わった時に起動したいので、該当シートのモジュールに書いていきます。
今回だと、P7シートです。
※冒頭の画像を参照
Worksheet_Change は「標準モジュール」では動きません。
必ず該当シート(P7)のシートモジュールに書きましょう。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
'①入力条件の整理
'複数セルの変更(貼り付け等)は無視
If Target.CountLarge > 1 Then Exit Sub
'G2以外の入力は無視
If Target.Address <> "$G$2" Then Exit Sub
'aaa以外の入力は無視(空欄なども含めて)
If LCase$(CStr(Target.Value)) <> "aaa" Then Exit Sub
'②無限ループさせない(&必ず戻す)
On Error GoTo ExitHandler
Application.EnableEvents = False
Target.ClearContents 'aaaの文字を消す → ここでセル変更が起きるので、イベントOFF中に実行
'③P7整理を呼び出す
Call P7整理
ExitHandler:
Application.EnableEvents = True
End Subショートカットキー&ボタンを使わない理由
さて、ここまでで「ショートカットキーやボタンを使えばいいのでは?」と感じた方もいるでしょう。
※ボタンとはこんなもの。
マクロの登録ができます。

今回、両者を選ばなかったのは明確な理由があります。
まず、ショートカットキーの場合、誤操作を避けるためです。
まだ初期化するタイミングでないにも関わらず、誤ってキー操作をして消えることが何度かあり…。
これは危険だなと。
そしてボタンでの起動にしなかったのは、
シート内のオブジェクト(図形など)をすべて削除するコードにしているからです。
つまり、ボタンを押すと、ボタンが消えるという現象を回避するために、別のトリガーを準備したということです。
これらを回避できるのが、今回の仕様です。
使いどころ|事故防止>速さ
このような設定を行う対象は、
安全性を重視したい、使う頻度が高くない
といったものが向いています。
例えば、
- 月次/週次など「たまに」実行する初期化
- 1件処理が終わったらテンプレに戻す(TODO、面談メモ、チェックリスト)
- 図形削除など「破壊力が高い処理」を含む
などです。
活用できそうな場面があれば参考にしていただければと思います。
ポイント
以下のポイントを頭の片隅にいれていただければと思います。
- VBA実行はCtrl+Zが効かない
- 図形削除は特に強い
- まずはコピーしたファイルで試す
では、また次回。
編集後記
◇日記
昨日は、早朝にメルマガ・YouTube・ブログから。
午前中は家族で公園に。午後は三男の昼寝を見守りつつホームページの整理など。
「はじめての方へ」というテーマで、ブログ・事務所HP・YouTubeなどの整理を進めています。
◇ブログネタ経緯
たまにはブログでExcelネタもいいかなと思い。
◇1日1新
中華房 春雨 すっぱ辛味 酸辣タン