Excelコントロールのイベント処理の基本としてテキストボックスの変更内容をラベルに表示する:VBA/マクロ便利Tips
業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、イベント処理の基本として内容が変更されたときに発生するイベント「Change」を取り上げ、テキストボックスの変更内容をラベルに表示する方法を解説。
今回はExcelコントロールのイベント処理の基本として、「テキストボックスの変更内容をラベルに表示する」Tipsについて解説する。イベント処理は用途が多いので、読者の皆さんには、ぜひ覚えていただきたい。
フォームとコントロールの配置
まず、Excelシート上に、図1のようなデータと「フォームの表示」ボタンを作成しておく。表示させるものは何でもいいが、今回は必ず「B2」セルにデータを入力しておく必要がある。
次に、ユーザーフォームを作成し、ユーザーフォーム上にはテキストボックスとラベルを図2のように配置する。プロパティからテキストボックスの「オブジェクト名」は、「入力テキストボックス」とし、ラベルの「オブジェクト名」には「表示ラベル」と指定しておく。
テキストボックスやラベルの「書体」「文字サイズ」は、「Font」プロパティから指定している。読者の皆さんの好きに指定してもらって構わない。
コントロールの内容が変更されたときに発生するイベント「Change」
今回のTipsの書式は下記にようになる
テキストボックスの変更内容をラベルに表示する書式
Sub{テキストボックス}_Change()
{ラベルオブジェクト}.Caption={テキストオブジェクト}.Text
End Sub
「_Change()」は、テキストボックスの内容が変更されたときに発生するイベントだ。この書式はテキストボックスの値が変更されたとき、ラベルのCaptionプロパティに、テキストボックスのTextプロパティの値を表示するものだ。
イベント処理のコードを表示
この書式を使ってコードを書いてみよう。プロジェクト内のUserForm1を選択して、マウスの右クリックで表示される、「コードの表示」を選択してコードを記述する。
図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
まず3行目で、ユーザーフォームがアクティブになったとき(UserForm_Activate)、「表示テキストボックス」にExcelシートのセル「B2」の値を表示する。
次に、「入力テキストボックス」の内容が変更されたとき(6行目の入力テキストボックス_Change)、7行目で「表示ラベル」に「入力テキストボックス」の値を表示する。同時に8行目でExcelシート上の、「B2」のセルの値をリアルタイムに変更させる。
フォームを表示するコード
次に、VBE(Visual Basic Editor)のメニューから[挿入]→[標準モジュール]を選択する。プロジェクト内にModule1が追加されるので、この中に「フォームの表示」のコードを記述する(リスト2)。
Option Explicit Sub フォームの表示() UserForm1.Show End Sub
ShowメソッドでUserForm1を表示する。
実行結果
このリスト2のコードを図1の「フォームの表示」ボタンに関連付け、実行し「入力テキストボックス」の値を変更すると図4のようになる。
シートをまたいで任意のセルに値を反映することも可能
今回は、テキストボックスの変更内容をラベルに表示する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.
関連記事
- スクショをExcelに張り付けるのに役立つ4つのテクニック
システム開発におけるソフトウェアテスト(結合テスト〜システムテスト)において重要視されるエビデンス(作業記録)。前後編の2回にわたって、エビデンスとしてスクリーンショットをキャプチャし、テスト仕様書や納品書に張り付けていく作業を自動化するためのVBA/マクロのテクニックを紹介する。後編は、画像ファイルをシートに張り付け、Excel 2013のメニューからスクショを直に張り付け、画像を縮小し、指定した時間にマクロを実行する方法を解説。 - [Esc]キーによるExcel VBAの実行中断を防止する
ExcelではVBA(Visual Basic for Applications)によってさまざまな処理を自動的に実行できる。しかし、VBAの実行中にユーザーが[Esc]キーあるいは[Ctrl]+[Break]キーを押すと、自動処理が止まってしまう。止めたくない場合は、Application.EnableCancelKeyプロパティの設定を変更する。 - Windows TIPSディレクトリ > プラットフォーム別 > Office > Excel