Excel VBA テキストボックスのChangeイベント テキストボックスの値が変更されると実行

コントロール作成/操作

ユーザーフォームのテキストボックスの値が変更されると実行される、Changeイベントについてご説明します。

変更されるたびに、単純な計算を行うツールを使って説明します。

今回はテキストボックスのみ使用して、Changeイベントについて説明しますが、テキストボックスとリストボックスを連携させたり、コンボボックスと連携させたり用途はさまざまです。

各コントロールのChangeイベントはとても使用頻度が高いイベントです。

テキストボックスの追加方法やイベントについては、下記記事をご覧ください。

1.今回使用するサンプルツール

まずは今回使用するサンプルツールについて、ご説明します。

テキストボックスを3つ用意して、1つ目と2つ目のテキストボックスに数字を入れると、3つ目のテキストボックスが都度計算されます。

今回はこちらのツールを作成しつつ、Changeイベントについて説明します。

2.Changeイベントとは

ChangeイベントはテキストボックスのValueプロパティが変更されたら実行されるイベントです。

大抵のコントロールには備わっている基本的なイベントで、もっとも使用頻度の高いイベントだと思います。

Changeイベントの作成方法

Changeイベントは、イベントを組み込みたいテキストボックスが設置されているユーザーフォームのフォームモジュールに作成します。

作成するにはユーザーフォーム上のテキストボックスをWクリック、もしくは右クリックで「コードの表示」を選択します。

ユーザーフォームをWクリック、もしくは右クリックで「コードの表示」でもフォームモジュールを表示して、作成可能ですが初めからテキストボックスから表示した方が楽です。

対象のテキストボックスからフォームモジュールを開くと、基本的にChangeイベントが自動的に生成されます。

イベントが生成されたら、あとはイベントプロシージャ内に実行したいコードを記述します。

3.サンプルツール

Changeイベントの作成方法の説明はここまでにして、動画紹介したサンプルツールの作り方です。

ユーザーフォームとコントロールの準備

まずはユーザーフォームとテキストボックスを作ります。

フォームモジュールを追加して、テキストボックスを3つ設置します。

テキストボックスの追加は「テキストボックスの追加と詳細設定する方法」をご覧ください。

計算するツールということで、「×」と「=」をラベルで付け加えています。

難しいことはなく、単純に設置しているだけです。

標準モジュール

フォームを作成したあとはユーザーフォームを表示するコードと、計算部分のコードを標準モジュールに記述します。

フォームモジュールに直接記述しても構いませんが、テキストボックス1と2両方に使用したいので、標準モジュールに作成して呼び出すだけにしたいと思います。

ユーザーフォームを表示する

作成したUserForm1をモードレスで表示します。

Sub FormShow()

    UserForm1.Show vbModeless
    
End Sub
計算部分のコード

今回はテキストボックス1と2を掛け算します。

数字以外を入力された場合などのエラー処理は組み込んでいませんが、空白時の計算は行わない処理だけ組み込んでいます。

Sub Sample()

With UserForm1

    If .TextBox1.Value <> "" And .TextBox2.Value <> "" Then

        .TextBox3.Value = Format(.TextBox1.Value * .TextBox2.Value, "#,##0")
        
    End If

End With

End Sub

「If .TextBox1.Value <> “” And .TextBox2.Value <> “” Then」はテキストボックス1と2が空白じゃない時のみ計算するように判定しています。

「.TextBox3.Value = Format(.TextBox1.Value * .TextBox2.Value, “#,##0”)」でテキストボックス1×テキストボックス2の計算を行っています。

計算結果の桁数がわかりやすいように「Format」関数でカンマを表示させています。

フォームモジュール

次はフォームモジュールに記述する「Changeイベント」を記述します。

上記で説明した通り、設置したテキストボックスをWクリックすると自動的に「Private Sub TextBox1_Change()」が生成されますので、テキストボックス1と2それぞれWクリックして作成します。

生成したら、先ほどの標準モジュールの計算部分を各テキストボックスで呼び出します。

Private Sub TextBox1_Change()

Call Sample

End Sub

Private Sub TextBox2_Change()

Call Sample

End Sub

実行する

標準モジュールとフォームモジュールのイベントが出来ましたので、実行します。

「Sub FormShow()」を実行すると、フォームが表示されるのであとはテキストボックス1と2に数字を入力します。

あとは「Changeイベント」が実行されるので、テキストボックス3に計算結果が表示されます。

タイトルとURLをコピーしました