以下は、見積書のサンプルになります。

このシートを再利用するために、入力済みの値を1つずつ削除するのは大変です。
そこで今回は、先頭の項目「No」を変更したときに、自動でリセットの有無を確認するメッセージを表示させ、瞬時に入力済みの値を削除できる仕組みを実現していきます。

※こちらで作成したファイルは、記事の最後にて配布しています。
1. 開発準備
以下のシートを元に作成していきます。

今回は、指定したセルを編集して確定すると同時に、メッセージを表示し、シートをリセットする仕組みを実現します。
そのような、特定のシートのセルを編集すると同時に何かしらの処理を実行するには、「シートモジュール」の「イベントプロシージャ」を活用します。
シートモジュールは、対象シートのタブ上で右クリックし、[コードの表示]を選択することで表示できます。

選択すると、以下のエディタ画面(VBE)が表示されます。
また、対象シートのシートモジュールが表示された状態になります。
「Option Explicit」は、VBEの設定次第では表示されません。「Option Explicit」についての解説はこちらでは省略します。

次に、対象シートのセルを編集すると同時に処理が実行される特殊なプロシージャ(イベントプロシージャ)を用意する必要があります。
そのためには、シートモジュールの左上のリストから「Worksheet」を選択します。

「Worksheet」を選択すると、自動で「Worksheet_SelectionChange」というプロシージャが表示されます。
このプロシージャは、対象シートのいずれかのセルが選択されると同時に処理が実行されるイベントプロシージャになります。

ただ、今回使用するイベントプロシージャは、セルを編集すると同時に処理が実行されるものになります。
そのため、右上のリストから「Change」を選択します。

表示された「Worksheet_Change」というプロシージャを活用します。
「Worksheet_SelectionChange」というプロシージャは削除して問題ないです。

2. コードの記述
以下のコードを記述します。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngStr As String
rngStr = "B4,E6:E8,B13:B17,G13:G17,I13:I17,B23"
If Target.Address(False, False) = "C1" Then
If MsgBox("リセットしますか?", vbYesNo) = vbYes Then
Range(rngStr).Value = ""
End If
End If
End Sub
では、コードについて解説していきます。
Private Sub Worksheet_Change(ByVal Target As Range)
'省略
End Sub
「Worksheet_Change」というプロシージャの引数「Target」に、編集されたセルの情報が渡されます。
複数セルを同時に編集した場合は、複数セルの情報が渡されます。
Dim rngStr As String
rngStr = "B4,E6:E8,B13:B17,G13:G17,I13:I17,B23"
rngStrという変数を用意し、その変数に「削除する対象のセルのアドレス」をカンマ区切りで指定しています。
結合されたセルの場合は、結合範囲の先頭のセルを指定します。

If Target.Address(False, False) = "C1" Then
If MsgBox("リセットしますか?", vbYesNo) = vbYes Then
Range(rngStr).Value = ""
End If
End If
編集されたセルのアドレスをTargetから取得し、そのアドレスが「C1」であることを確認しています。

そのアドレスが「C1」のときに、「リセットしますか?」というメッセージを表示し、「はい」か「いいえ」で回答させます。

このとき、標準では「はい」にフォーカスが当たります。
そのため、メッセージが表示されたあとにEnterを押してしまうと「はい」が選択されてしまいます。
標準を「いいえ」にしたいときは、以下のように指定します。
If MsgBox("リセットしますか?", vbYesNo + vbDefaultButton2) = vbYes Then

ここで「はい」が選択されたときに、変数「rngStr」に割り当てたセルの値を空にしています。
※ClearContentsは結合セルでは使えません。
3. 完成
以上の内容で実現できます。
先頭の項目「No」を変更したときに、自動でリセットの有無を確認するメッセージが表示されます。
そこで「はい」を選択することで、瞬時に入力済みの値が削除されます。

▼サンプルファイル▼

































































































































