セルの値が変更されたときマクロを自動実行する
A1:A10の値を変更すると、変更した範囲のアドレスを知らせます。
実行前に確認
- 数式の再計算で値が変わるだけではChangeは発生しません。複数セルの貼り付けにも対応した範囲判定です。
1サンプルコード
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.Range("A1:A10")) Is Nothing Then Exit Sub
MsgBox "変更された範囲: " & Target.Address(False, False)
End Sub図で見る操作の流れ
イメージ図コードの動きを表した概念図です。実際のExcel画面ではありません。
手動:「練習」のシートモジュールへ貼る
Worksheet_Changeを対象シートに記述する
手動:A1へ文字を入力
Enterでセルの変更を確定する
イベント:範囲を判定
変更範囲がA1:A10と重なるか確認する
結果:変更範囲を表示
例の操作では「変更された範囲: A1」
A1:A10と重ならなければ終了します。複数セル変更時はTarget全体の番地を表示します。再計算だけでは発生しません。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する3つの手順で、コードの使い方を確認できます
- 1
練習用のブックをExcelマクロ有効ブック(.xlsm)で保存します。シート名を「練習」にし、A1:A10を空けます。
- 2
Alt+F11でVBEを開きます。左のプロジェクト一覧でこのブックの[Microsoft Excel Objects]にある「Sheet番号(練習)」をダブルクリックし、コードを貼り付けます。
- 3
F5では実行せず、Excelに戻りA1に文字を入力してEnterを押します。「変更された範囲: A1」と表示されます。