← コード一覧へ戻る
実務イベント

セルの値が変更されたときマクロを自動実行する

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画面ではありません。

  1. 手動:「練習」のシートモジュールへ貼る

    Worksheet_Changeを対象シートに記述する

  2. 手動:A1へ文字を入力

    Enterでセルの変更を確定する

  3. イベント:範囲を判定

    変更範囲がA1:A10と重なるか確認する

  4. 結果:変更範囲を表示

    例の操作では「変更された範囲: A1」

A1:A10と重ならなければ終了します。複数セル変更時はTarget全体の番地を表示します。再計算だけでは発生しません。

コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。

使い方・実行手順を確認する3つの手順で、コードの使い方を確認できます
  1. 1

    練習用のブックをExcelマクロ有効ブック(.xlsm)で保存します。シート名を「練習」にし、A1:A10を空けます。

  2. 2

    Alt+F11でVBEを開きます。左のプロジェクト一覧でこのブックの[Microsoft Excel Objects]にある「Sheet番号(練習)」をダブルクリックし、コードを貼り付けます。

  3. 3

    F5では実行せず、Excelに戻りA1に文字を入力してEnterを押します。「変更された範囲: A1」と表示されます。

使っている機能の公式ドキュメント(Microsoft Learn)