セル内を変更したときに実行するChangeイベント

セル内を変更したときに実行するChangeイベント
セル内を変更したときに実行するChangeイベント

Worksheet.Changeイベントマクロ 09回

セルの値が変更時に処理を行う

セルの値が変わったときにマクロを実行したいという場合があります。
セルの値が変わった時にマクロを実行するには、Worksheet_Changeプロシージャを使って行うことができます。
Worksheet_Changeプロシージャは、マクロを実行したいシートのコード画面に作成します。

セルの内容が変わった時に実行するマクロ

1. Visual Basic Editorを起動します。Sheet1を選択してコード画面を表示させて、オブジェクトボックスをクリックします。するとデフォルトのWorksheet_SelectionChangeプロシージャが入力されますが、これは削除して大丈夫です。


セル内を変更したときに実行するChangeイベント-1

2. プロシージャボックスから、Changeイベントを選択します。間に実行したいコードを記述します。

Private Sub Worksheet_Change(ByVal Target As Range)
    '実行したいコード
End Sub

セル内を変更したときに実行するChangeイベント-2

3. Sheet1に戻り、C5セルに値を入力しました。数値を入力したセルの背景色が変更されました。


セル内を変更したときに実行するChangeイベント-3

入力した値に対する割引率を隣のセルに入力する

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通り設定しました。


セル内を変更したときに実行するChangeイベント-5

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

セル内を変更したときに実行するChangeイベント-4

セルの内容を消した場合のエラー対処コード

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

すでに入力した値を消してもエラーにならず、隣のセルの値も消去されています。


セル内を変更したときに実行するChangeイベント-6

こちらもおすすめ