構文
構文は以下の通りです。
Private Sub Worksheet_Change(ByVal Target As Range)
' 実行したいコードをここに記述する
End Sub
' 実行したいコードをここに記述する
End Sub
Worksheet_Changeイベントプロシージャは、Excelのシート上でデータが変更されたときに自動的に実行されます。Target引数は、変更が行われたセルの範囲を表します。このパラメータを使って、変更が行われたセルの情報にアクセスすることができます。
プログラミング例
以下に、具体的な例を幾つか紹介します。
例1: 入力値の制限
Worksheet_Changeイベントプロシージャを使って、入力値の制限を行う例です。
Private Sub Worksheet_Change(ByVal Target As Range)
' セルB2の値が10を超える場合、エラーメッセージを表示して元に戻す
If Target.Address = "$B$2" Then
If Target.Value > 10 Then
MsgBox "エラー:値は10以下にしてください。"
Application.EnableEvents = False
Target.Value = Target.ValueOld
Application.EnableEvents = True
End If
End If
End Sub
' セルB2の値が10を超える場合、エラーメッセージを表示して元に戻す
If Target.Address = "$B$2" Then
If Target.Value > 10 Then
MsgBox "エラー:値は10以下にしてください。"
Application.EnableEvents = False
Target.Value = Target.ValueOld
Application.EnableEvents = True
End If
End If
End Sub
この例では、セルB2の値が10を超える場合にエラーメッセージを表示し、元の値に戻します。Worksheet_Changeイベントプロシージャが実行されるたびに、変更されたセルがセルB2であるかを判定し、条件に合致する場合にはエラーメッセージを表示します。
例2: データの自動整形
Worksheet_Changeイベントプロシージャを使って、データの自動整形を行う例です。
Private Sub Worksheet_Change(ByVal Target As Range)
' セル範囲が変更されたらデータを自動的に整形する
If Not Intersect(Target, Range("A1:C10")) Is Nothing Then
Application.EnableEvents = False
' データの整形処理
For Each Cell In Target
Cell.Value = UCase(Cell.Value)
Next Cell
Application.EnableEvents = True
End If
End Sub
' セル範囲が変更されたらデータを自動的に整形する
If Not Intersect(Target, Range("A1:C10")) Is Nothing Then
Application.EnableEvents = False
' データの整形処理
For Each Cell In Target
Cell.Value = UCase(Cell.Value)
Next Cell
Application.EnableEvents = True
End If
End Sub
この例では、セル範囲A1:C10のデータが変更された場合に、セルの値を大文字に変換する処理を行います。Worksheet_Changeイベントプロシージャが実行されるたびに、変更されたセルが対象の範囲内にあるかを判定し、条件に合致する場合にはデータを自動的に整形します。
まとめ
Worksheet_Changeイベントプロシージャは、データの変更を自動的に検知し、特定の処理を実行するための重要な機能です。対象のシートにWorksheet_Changeイベントプロシージャを実装することで、入力値の制限やデータの自動整形します。是非活用してください。