誤操作を防ぐトリガー設計|特定キーワードで「シート初期化」を実行するVBA

初期化のVBAは、起動のさせ方に注意したいもの。

なぜなら、VBAを実行したら「戻す(Ctrl+Z)」が効かないからです。

そんな時は特定のキーワードを使って初期化してみましょう。

Contents

まずは結論

  • 特定セルに指定キーワードを入れる
  • 対象のコードが起動する

このような仕組みを作っています。

例えば、今回ご紹介するのは、

  • 「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

ショートカットキー&ボタンを使わない理由

さて、ここまでで「ショートカットキーやボタンを使えばいいのでは?」と感じた方もいるでしょう。

※ボタンとはこんなもの。
マクロの登録ができます。

今回、両者を選ばなかったのは明確な理由があります。

まず、ショートカットキーの場合、誤操作を避けるためです。
まだ初期化するタイミングでないにも関わらず、誤ってキー操作をして消えることが何度かあり…。
これは危険だなと。

そしてボタンでの起動にしなかったのは、

シート内のオブジェクト(図形など)をすべて削除するコードにしているからです。

つまり、ボタンを押すと、ボタンが消えるという現象を回避するために、別のトリガーを準備したということです。

これらを回避できるのが、今回の仕様です。

【新着情報|出版&セミナー情報】
◇Kindle|最新3著
 (Unlimitedの方はそのまま読めます)
◇セミナー&動画販売
【Free Services|無料コンテンツ】
【Paid Services|有料サービス】
◇独立と仕事の設計サポート
◇会計・税務サポート

使いどころ|事故防止>速さ

このような設定を行う対象は、

安全性を重視したい、使う頻度が高くない

といったものが向いています。

例えば、

  • 月次/週次など「たまに」実行する初期化
  • 1件処理が終わったらテンプレに戻す(TODO、面談メモ、チェックリスト)
  • 図形削除など「破壊力が高い処理」を含む

などです。

活用できそうな場面があれば参考にしていただければと思います。

ポイント

以下のポイントを頭の片隅にいれていただければと思います。

  • VBA実行はCtrl+Zが効かない
  • 図形削除は特に強い
  • まずはコピーしたファイルで試す

では、また次回。

編集後記

◇日記
 昨日は、早朝にメルマガ・YouTube・ブログから。
 午前中は家族で公園に。午後は三男の昼寝を見守りつつホームページの整理など。
 「はじめての方へ」というテーマで、ブログ・事務所HP・YouTubeなどの整理を進めています。

◇ブログネタ経緯
 たまにはブログでExcelネタもいいかなと思い。

◇1日1新
 中華房 春雨 すっぱ辛味 酸辣タン

【新着情報|出版&セミナー情報】
◇Kindle|最新3著
 (Unlimitedの方はそのまま読めます)
◇セミナー&動画販売
【Free Services|無料コンテンツ】
【Paid Services|有料サービス】
◇独立と仕事の設計サポート
◇会計・税務サポート
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
Contents