セル内を変更したときに実行するChangeイベント
Worksheet.Changeイベントマクロ 09回
セルの値が変更時に処理を行う
セルの値が変わったときにマクロを実行したいという場合があります。
セルの値が変わった時にマクロを実行するには、Worksheet_Changeプロシージャを使って行うことができます。
Worksheet_Changeプロシージャは、マクロを実行したいシートのコード画面に作成します。
セルの内容が変わった時に実行するマクロ
1. Visual Basic Editorを起動します。Sheet1を選択してコード画面を表示させて、オブジェクトボックスをクリックします。するとデフォルトのWorksheet_SelectionChangeプロシージャが入力されますが、これは削除して大丈夫です。
2. プロシージャボックスから、Changeイベントを選択します。間に実行したいコードを記述します。
Private Sub Worksheet_Change(ByVal Target As Range) '実行したいコード End Sub
3. Sheet1に戻り、C5セルに値を入力しました。数値を入力したセルの背景色が変更されました。
入力した値に対する割引率を隣のセルに入力する
4. もうすこし、マクロらしいコードを作成してみましょう。購入金額に応じて、割引率を隣のセルに表示するというマクロです。
この場合、入力するターゲットをC列に限定したいのでIntersectメソッドを利用します。
.Intersect (Arg1, Arg2, Arg3,....)のように、引数にはセル範囲 (Range オブジェクト) の名前を指定します。
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Columns(3)) Is Nothing Then Select Case Target.Value '実行したいコード End Select End If End Sub
Select Caseで、金額による割引を3通り設定しました。
5. コードは、以下のようになります。値を入力したセルの隣に割引額が入力されます。が、ここで、す
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Columns(3)) Is Nothing Then Select Case Target.Value Case Is <= 10000 Target.Offset(0, 1).Value = Target.Value * 0.1 Case Is <= 20000 Target.Offset(0, 1).Value = Target.Value * 0.2 Case Is > 20001 Target.Offset(0, 1).Value = Target.Value * 0.3 End Select End If End Sub
セルの内容を消した場合のエラー対処コード
6.前のコードでミスに気付いて金額を一旦消去するという場合、エラーになってしまうので、それを防ぐためにコードを追加します。
データを消した場合は、隣のセルも値も消すというコードです。
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Columns(3)) Is Nothing Then Select Case Target.Value Case Is = "" Target.Offset(0, 1).Value = "" Exit Sub Case Is <= 10000 Target.Offset(0, 1).Value = Target.Value * 0.1 Case Is <= 20000 Target.Offset(0, 1).Value = Target.Value * 0.2 Case Is > 20001 Target.Offset(0, 1).Value = Target.Value * 0.3 End Select End If End Sub
すでに入力した値を消してもエラーにならず、隣のセルの値も消去されています。