1. はじめに
Excel VBA では、フォーム(ダイアログボックス)を使って、ユーザーとの対話型の操作を実現できます。
このフォームを構成する中心的なオブジェクトが UserForm
です。そして、その中に配置するボタンやテキストボックスなどの個別の UI 部品は Controls
というコレクションに属します。
UserForm + Controls を使うことで、グラフィカルな入力画面やアプリケーション的なUIの構築が可能です。
2. UserForm オブジェクトとは?
2-1. 概要
UserForm
は、VBAでGUI(グラフィカルユーザーインターフェース)を作成するための基本オブジェクトです。
フォームは、Visual Basic Editor(VBE)上でデザインモードで編集でき、各種コントロールを配置できます。
2-2. 主な特徴
- モーダル(他のウィンドウを操作できない)またはモデルレス(他の操作可能)として表示可能。
Show
メソッドで表示し、Hide
やUnload
で非表示または終了。- 自由に UI 要素を追加できる(テキストボックス、ボタン、ラベルなど)。
3. UserFormの主なプロパティ・メソッド
プロパティ/メソッド | 説明 |
---|---|
Caption | フォームのタイトルバーの文字列 |
Height , Width | フォームのサイズ(ポイント) |
Top , Left | 画面上での位置(ピクセル) |
BackColor | 背景色 |
Show | フォームを表示(モーダル/モデルレス) |
Hide | フォームを非表示にする |
Unload | フォームをメモリから削除 |
例:UserFormを表示する
Sub フォーム表示()
UserForm1.Show
End Sub
モデルレスで表示したい場合:
UserForm1.Show vbModeless
4. Controls コレクションとは?
4-1. 概要
Controls
は、UserForm に配置されたすべてのコントロール(部品)を管理するコレクションです。
たとえば:
TextBox
(文字入力欄)CommandButton
(ボタン)Label
(文字表示)ComboBox
(ドロップダウン選択)ListBox
(リスト選択)
すべてが Controls
コレクションの要素です。
4-2. Controls の使い方
特定のコントロールにアクセス:
UserForm1.Controls("TextBox1").Text = "こんにちは"
または、For Each を使って全体に一括処理:
Dim ctrl As Control
For Each ctrl In UserForm1.Controls
If TypeName(ctrl) = "TextBox" Then
ctrl.Text = ""
End If
Next
5. 主なコントロールのプロパティと使い方
コントロール名 | 主なプロパティ | 用途 |
---|---|---|
TextBox | Text , Enabled | ユーザーの入力を受け取る |
CommandButton | Caption , Enabled | ボタンとして操作実行 |
Label | Caption , BackColor | テキスト表示用 |
ComboBox | AddItem , Value | 選択肢の提供 |
ListBox | List , Selected | リストから選択 |
CheckBox | Value (True/False) | 選択・非選択 |
OptionButton | Value | ラジオボタン(排他選択) |
Frame | 内部にコントロール配置 | グルーピング用 |
6. イベントの活用
各コントロールにはイベント(クリック、変更、フォーカスなど)があります。
フォーム上でボタンがクリックされたときの例:
Private Sub CommandButton1_Click()
MsgBox "ボタンがクリックされました!"
End Sub
テキスト変更時の処理:
Private Sub TextBox1_Change()
Label1.Caption = TextBox1.Text
End Sub
7. コントロールの動的作成
コードでフォーム上に新しいコントロールを追加することも可能です。
Private Sub UserForm_Initialize()
Dim newBtn As MSForms.CommandButton
Set newBtn = Me.Controls.Add("Forms.CommandButton.1", "btnDynamic", True)
With newBtn
.Caption = "動的ボタン"
.Left = 50
.Top = 100
.Width = 100
End With
End Sub
8. フォームから値を受け取る
フォームのテキストボックスからユーザー入力を取得する例:
Sub フォーム結果取得()
UserForm1.Show
MsgBox "入力値:" & UserForm1.TextBox1.Text
End Sub
9. フォームの閉じ方と Unload の違い
Me.Hide
はフォームを非表示にしてメモリ上に残す(再利用可能)Unload Me
はフォームを完全に終了させる(再度 Show 時に再初期化)
10. 応用例:ログインフォーム
Private Sub CommandButton1_Click()
If TextBox1.Text = "admin" And TextBox2.Text = "pass123" Then
MsgBox "ログイン成功!"
Unload Me
Else
MsgBox "IDまたはパスワードが違います"
End If
End Sub
11. トラブル防止のTips
- コントロール名の重複に注意。コレクションアクセス時にエラーになります。
.Text
や.Value
の扱いの違いを理解する(TextBoxはText、CheckBoxはValue)。- ループ処理での型指定に注意(Control型は汎用だが、特定機能にはキャストが必要)。
12. まとめ
要素 | 説明 |
---|---|
UserForm | フォームの本体。フォーム全体の外観や動作を制御する。 |
Controls | フォーム内に配置された各種UI要素(TextBox、Buttonなど)を管理するコレクション。 |
主な用途 | ユーザー入力・選択、GUIによる操作、確認ダイアログ、メニュー代替など。 |
表示方法 | .Show (モーダル/モデルレス) |
主なイベント | Click , Change , Initialize , Activate など |