コントロールの値が変化したときに発生するイベント(Changeイベント)

ユーザーフォームに設置したコントロール上の値がユーザーの操作によって変更されたりプログラムの中で変更されたりした時に発生するイベントが Change イベントです。どこかのコントロールの値が変化したときに、別の処理を連動して行う場合に利用します。ここでは Excel のユーザーフォームで Change イベントがどのようなときに発生するのかやイベントが発生したときに呼び出されるイベントプロシージャの記述方法について解説します。

(Last modified: )

ユーザーフォームにおけるChangeイベントとは

ユーザーフォームにおける Change イベントがどのような時に発生するのか、また発生したときのイベントプロシージャの記述方法について解説します。

どのようなときにイベントが発生するのか

Change イベントはコントロールの値が変更されたときに発生します。

・テキストボックスに新しい値が入力された
・コンボボックスやリストボックスで新しい項目が選択された
・チェックボックス、トグルボタン、オプションボタンで項目がクリックされた
・タブストリップで別のタブがクリックされた
・マルチページで別のページが選択された
・スピンボタンで矢印がクリックされた
・スクロールバーでスクロールボックスが移動した

Changeイベントのイベントプロシージャ

Change イベントに対するイベントプロシージャは次のような形式となっています。

Private Sub オブジェクト_Change()

End Sub

対象のコントロールで値が何らかの形で変更されると Change イベントが発生し、 Change イベントに対するイベントプロシージャが呼び出されます。例えばテキストボックスに新しい値が入力されたときに実行したい処理を Change イベントに対するイベントプロシージャ中に記述しておいてください。

サンプルコード

それでは簡単なサンプルで試してみます。ユーザーフォームにテキストボックスとラベルを設置しました。

ユーザーフォームにおけるChangeイベントとは(1)

ユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャを作成し、その中でテキストボックスと計算結果を表示するラベルに初期値を設定します。

Option Explicit

Private Sub UserForm_Initialize()
   TextBox1.Value = 0
   TextBox2.Value = 0
   Label3.Caption = 0
End Sub

そして 2 つのテキストボックスに対する Change イベントに対するイベントプロシージャをコードウィンドウで次のように記述してください。

Option Explicit

Private Sub TextBox1_Change()
    Label3.Caption = Val(TextBox1.Value) + Val(TextBox2.Value)
End Sub

Private Sub TextBox2_Change()
    Label3.Caption = Val(TextBox1.Value) + Val(TextBox2.Value)
End Sub

どちらかのテキストボックスの値が変更されると、 2 つのテキストボックスの値を取得し加算した結果をラベルに表示します。

ユーザーフォームにおけるChangeイベントとは(2)

これでコードの記述は完了です。では実際に試してみます。「Sub/ユーザーフォームの実行」をクリックしてください。

ユーザーフォームにおけるChangeイベントとは(3)

ユーザーフォームが表示されました。

ユーザーフォームにおけるChangeイベントとは(4)

どちらかのテキストボックスの値を変更すると、 Change イベントが発生して新しい値で加算を行いラベルに結果を表示します。

ユーザーフォームにおけるChangeイベントとは(5)

ユーザーフォームにおけるChangeイベントとは(6)

-- --

Excel のユーザーフォームで Change イベントがどのようなときに発生するのかやイベントが発生したときに呼び出されるイベントプロシージャの記述方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。