UserForm / Controls

オブジェクト

1. はじめに

Excel VBA では、フォーム(ダイアログボックス)を使って、ユーザーとの対話型の操作を実現できます。
このフォームを構成する中心的なオブジェクトが UserForm です。そして、その中に配置するボタンやテキストボックスなどの個別の UI 部品は Controls というコレクションに属します。

UserForm + Controls を使うことで、グラフィカルな入力画面やアプリケーション的なUIの構築が可能です。


2. UserForm オブジェクトとは?

2-1. 概要

UserForm は、VBAでGUI(グラフィカルユーザーインターフェース)を作成するための基本オブジェクトです。
フォームは、Visual Basic Editor(VBE)上でデザインモードで編集でき、各種コントロールを配置できます。

2-2. 主な特徴

  • モーダル(他のウィンドウを操作できない)またはモデルレス(他の操作可能)として表示可能。
  • Show メソッドで表示し、HideUnload で非表示または終了。
  • 自由に 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. 主なコントロールのプロパティと使い方

コントロール名主なプロパティ用途
TextBoxText, Enabledユーザーの入力を受け取る
CommandButtonCaption, Enabledボタンとして操作実行
LabelCaption, BackColorテキスト表示用
ComboBoxAddItem, Value選択肢の提供
ListBoxList, Selectedリストから選択
CheckBoxValue(True/False)選択・非選択
OptionButtonValueラジオボタン(排他選択)
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 など
タイトルとURLをコピーしました