ユーザーフォームのツールボックスとは、Excel VBAのユーザーフォームデザイナーで利用できる一連のコントロール(部品)を提供するパネルのことです。これらのコントロールをフォーム上に配置することで、ユーザーインターフェースを構築します。
ユーザーフォームを作成したのにツールボックスが表示されない場合はVBエディタの「表示」タブから「ツールボックス」をクリックしてください。
以下は、ユーザーフォームのツールボックスに含まれる主要なコントロールの一覧です。
ツールボックスの主要なコントロール
- Label (ラベル)
- テキストを表示するためのコントロールです。ユーザーに情報を提供するために使用されます。
- TextBox (テキストボックス)
- ユーザーが文字列を入力できるフィールドです。ユーザーの入力を受け取るために使用されます。
- ComboBox (コンボボックス)
- ドロップダウンリストとテキストボックスを組み合わせたコントロールです。ユーザーがリストから選択したり、直接入力したりすることができます。
- ListBox (リストボックス)
- 一覧表示された項目の中から一つ以上の項目を選択するためのコントロールです。
- CommandButton (コマンドボタン)
- ユーザーがクリックすることでアクションをトリガーするボタンです。
- OptionButton (オプションボタン)
- 排他的に選択できる複数の選択肢を提供するためのボタンです。一度に一つのオプションボタンしか選択できません。
- CheckBox (チェックボックス)
- 複数選択が可能なボタンで、選択状態をオンまたはオフにすることができます。
- Frame (フレーム)
- 複数のコントロールをグループ化するためのコンテナです。関連するコントロールをまとめるために使用されます。
- ToggleButton (トグルボタン)
- 押すたびにオンとオフが切り替わるボタンです。
- SpinButton (スピンボタン)
- 数値を上下に調整するためのボタンです。
- ScrollBar (スクロールバー)
- 数値の範囲をスクロールして調整するためのバーです。
- MultiPage (マルチページ)
- 複数のページを持つタブコントロールです。ユーザーが異なるページ間を切り替えることができます。
- TabStrip (タブストリップ)
- タブを使って異なるコンテンツにアクセスできるコントロールです。
- Image (イメージ)
- 画像を表示するためのコントロールです。
- RefEdit (リファレンスエディット)
- セル範囲を選択するためのコントロールです。
ユーザーフォームで簡単な単語帳を作る
このツールボックスからラベル、テキストボックス、リストボックス、コマンドボタンを使った例を作成していきます。
1.ユーザーフォームのツールの設置
プロジェクトエクスプローラー内にユーザーフォームを作成します。
その次にツールボックスから「ラベル×1」「テキストボックス×1」「コマンドボタン×2」「リストボックス×1」を設置します。
ラベル、ボタン1,ボタン2の各Captionを変更します。ラベルには「単語を入力」、ボタン1には「追加」、ボタン2には「シートに反映」を追加します。
次にコードを入力します。
コード入力にはユーザーフォームの作成した「UserForm1」に右クリックしてコード表示をクリックします。
オブジェクトの表示に戻したい場合はオブジェクトの表示にします。
2.ユーザーフォームの初期化
ユーザーフォームの初期化イベントに以下のコードを追加し、Sheet1のA列をリストボックスに表示します。
Private Sub UserForm_Initialize()
Dim ws As Worksheet
Dim rng As Range
Dim cell As Range
Set ws = ThisWorkbook.Sheets("Sheet1")
Set rng = ws.Range("A1:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)
ListBox1.Clear
For Each cell In rng
ListBox1.AddItem cell.Value
Next cell
End Sub
3.テキストボックスの内容をリストボックスに追加
ボタン1(CommandButton1)のクリックイベントに以下のコードを追加します。(オブジェクト表示の時にボタン1をダブルクリックすると表示されます。)
Private Sub CommandButton1_Click()
If TextBox1.Value <> "" Then
ListBox1.AddItem TextBox1.Value
TextBox1.Value = ""
Else
MsgBox "テキストボックスに値を入力してください。"
End If
End Sub
4.リストボックスの内容をSheet1のA列に書き込む
ボタン2(CommandButton2)のクリックイベントに以下のコードを追加します。(オブジェクト表示の時にボタン2をダブルクリックすると表示されます。)
Private Sub CommandButton2_Click()
Dim ws As Worksheet
Dim i As Integer
Set ws = ThisWorkbook.Sheets("Sheet1")
' A列をクリア
ws.Range("A1:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row).ClearContents
' リストボックスの内容をA列に書き込む
For i = 0 To ListBox1.ListCount - 1
ws.Cells(i + 1, 1).Value = ListBox1.List(i)
Next i
MsgBox "単語が Sheet1 に書き込まれました。"
End Sub
5.フォームの表示
モジュールに以下のコードを追加し、フォームを表示するためのプロシージャーを作成します。プロジェクトエクスプローラー内に標準モジュールを追加します。
Sub ShowUserForm()
UserForm1.Show
End Sub
6.シートにマクロ実行ボタンを設置する
Excelに図形を設置してそこにマクロを登録します。
図形を設置したら図形に合わせて右クリックを押し「テキストの編集」でボタンの名前を作成します。次に「マクロの登録」をクリックします。
「マクロの登録」のモーダルを表示して「ShowUserForm」を選択し、OKボタンをクリックします。
実行すると以下のようにSheet1のA列に文字が登録されます。
ユーザーフォームが表示され、Sheet1のA列の内容がリストボックスに表示されます。
テキストボックスに文字を入力して「追加」ボタンをクリックすると、その文字がリストボックスに追加されます。「シートに反映」ボタンをクリックすると、リストボックスの内容がSheet1のA列に書き込まれます。
このようにツールボックスの機能を使うことでユーザーに直感的に入力を分かりやすく誘導させる事ができます。