Excel で特定のセルが変更されたときにマクロを実行する方法

Summary

Excel では、特定のシートまたは現在開いているシートのセルに値が入力されたときにのみ呼び出されるマクロを作成できます。

ただし、マクロは Excel のパフォーマンスを低下させるため、不必要にマクロを呼び出すべきではないことに注意してください。

詳細情報

Microsoft は、例示のみを目的としてプログラミング例を提供しており、明示または黙示にかかわらず、いかなる責任も負わないものとします。 これには、市販性または特定の目的との適合性についての黙示の保証も含まれますが、これに限定はされません。 この記事は、説明されているプログラミング言語、手順を作成およびデバッグするために使用されているツールに読者が精通していることを前提にしています。 Microsoft サポートエンジニアは、特定の手順の機能について説明しますが、特定の要件を満たすように追加機能を提供したり、プロシージャを作成したりすることはありません。 多くのインスタンスでは、特定の数のセルに値が入力されている場合にのみマクロを実行する必要があります (このドキュメントの「キーセル」と呼ばれます)。 シートのセルに値が入力されるたびに大きなマクロが実行されないようにするには、ActiveCell が主要なセルの1つであるかどうかを確認する必要があります。 これを行うには、ActiveCell の Intersect メソッドと、キーセルを含む範囲を使用して、ActiveCell が主要なセルのいずれかであることを確認します。 ActiveCell がキーセルを含む範囲内にある場合は、マクロを呼び出すことができます。

Visual Basic マクロを作成するには、次のようにします。

  1. [Sheet1] タブを右クリックし、[コードの表示] をクリックします。

    Sheet1 の後ろのモジュールシートが開きます。

  2. 次のコードをモジュールシートに入力します。

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim KeyCells As Range
    
    ' The variable KeyCells contains the cells that will
        ' cause an alert when they are changed.
        Set KeyCells = Range("A1:C10")
    
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
               Is Nothing Then
    
    ' Display a message when one of the designated cells has been 
            ' changed.
            ' Place your code here.
            MsgBox "Cell " & Target.Address & " has changed."
    
    End If
    End Sub
    
  3. [閉じる] をクリックし、[ファイル] メニューの [ Microsoft Excel に戻る] をクリックします。

Sheet1 のセル範囲 A1: C10 にエントリを入力すると、メッセージボックスが表示されます。