Excelコントロールのイベント処理の基本としてテキストボックスの変更内容をラベルに表示するVBA/マクロ便利Tips

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、イベント処理の基本として内容が変更されたときに発生するイベント「Change」を取り上げ、テキストボックスの変更内容をラベルに表示する方法を解説。

» 2014年11月07日 18時00分 公開
[薬師寺国安PROJECT KySS]
「VBA/マクロ便利Tips」のインデックス

連載目次

※本Tipsの環境:Windows 8.1 Enterprise(64ビット)+Excel 2013


 今回はExcelコントロールのイベント処理の基本として、「テキストボックスの変更内容をラベルに表示する」Tipsについて解説する。イベント処理は用途が多いので、読者の皆さんには、ぜひ覚えていただきたい。

フォームとコントロールの配置

 まず、Excelシート上に、図1のようなデータと「フォームの表示」ボタンを作成しておく。表示させるものは何でもいいが、今回は必ず「B2」セルにデータを入力しておく必要がある。

図1 データと「フォームの表示」ボタンを配置する

 次に、ユーザーフォームを作成し、ユーザーフォーム上にはテキストボックスとラベルを図2のように配置する。プロパティからテキストボックスの「オブジェクト名」は、「入力テキストボックス」とし、ラベルの「オブジェクト名」には「表示ラベル」と指定しておく。

 テキストボックスやラベルの「書体」「文字サイズ」は、「Font」プロパティから指定している。読者の皆さんの好きに指定してもらって構わない。

図2 ユーザーフォームにテキストボックスとラベルを配置した

コントロールの内容が変更されたときに発生するイベント「Change」

 今回のTipsの書式は下記にようになる

テキストボックスの変更内容をラベルに表示する書式

Sub{テキストボックス}_Change()

 {ラベルオブジェクト}.Caption={テキストオブジェクト}.Text

End Sub


 「_Change()」は、テキストボックスの内容が変更されたときに発生するイベントだ。この書式はテキストボックスの値が変更されたとき、ラベルのCaptionプロパティに、テキストボックスのTextプロパティの値を表示するものだ。

イベント処理のコードを表示

 この書式を使ってコードを書いてみよう。プロジェクト内のUserForm1を選択して、マウスの右クリックで表示される、「コードの表示」を選択してコードを記述する。

 図3のように「入力テキストボックス」を選択して、右の選択ボックスから「Change」を選択する。

図3 「入力テキストボックス」の「Change」を選択

 すると、下記のコードが自動的に作成されるので、この中にリスト1の7〜8行目のコードを記述する。

Private Sub 入力テキストボックス_Change()
 
End Sub

テキストボックスの変更内容をラベルに表示するコード

Option Explicit
Private Sub UserForm_Activate()
  入力テキストボックス.Text = Range("B2").Value
End Sub
 
Private Sub 入力テキストボックス_Change()
  表示ラベル.Caption = 入力テキストボックス.Text
  Range("B2").Value = 入力テキストボックス.Value
End Sub
リスト1 「表示テキストボックス」内の値が変更したときのコード

 まず3行目で、ユーザーフォームがアクティブになったとき(UserForm_Activate)、「表示テキストボックス」にExcelシートのセル「B2」の値を表示する。

 次に、「入力テキストボックス」の内容が変更されたとき(6行目の入力テキストボックス_Change)、7行目で「表示ラベル」に「入力テキストボックス」の値を表示する。同時に8行目でExcelシート上の、「B2」のセルの値をリアルタイムに変更させる。

フォームを表示するコード

 次に、VBE(Visual Basic Editor)のメニューから[挿入]→[標準モジュール]を選択する。プロジェクト内にModule1が追加されるので、この中に「フォームの表示」のコードを記述する(リスト2)。

Option Explicit
Sub フォームの表示()
  UserForm1.Show
End Sub
リスト2 フォームを表示するコード

 ShowメソッドでUserForm1を表示する。

実行結果

 このリスト2のコードを図1の「フォームの表示」ボタンに関連付け、実行し「入力テキストボックス」の値を変更すると図4のようになる。

図4 「表示ラベル」の値とExcelシートのセル「B2」の値が、リアルタイムに変更される

シートをまたいで任意のセルに値を反映することも可能

 今回は、テキストボックスの変更内容をラベルに表示するTipsについて解説したが、いかがだっただろうか。

 このTipsはかなり用途が広いと思われる。このコードを利用することでフォーム上に配置したテキストボックスから、リアルタイムに、Excelシート上の任意のセルに値を反映させることができる。

 例えば、複数のテキストボックスを配置しておき、別シートにあるデータをそれらに表示させるようにしたとしよう。すると、そのテキストボックスの値を変更させ、別のシートに変更された値をリアルタイムに反映させる、といったことも可能になる。

 その他にも用途はあると思うので、読者の皆さんが、それぞれ良いアイデアを考えて利用していただきたい。

著者プロフィール

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。

1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。

1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。

2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。

Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。

Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。

Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。

Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。

Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。