Excelの操作をもっと便利にしたい、業務を自動化したいと考えたとき、VBA(Visual Basic for Applications)は非常に頼もしい味方になります。中でも「ユーザーフォーム」は、入力作業の簡素化や、使いやすいインターフェースの提供に役立つ重要な機能です。この記事では、ユーザーフォームの基本的な使い方から実践的な応用までを、初めての方でも理解できるように、わかりやすく解説します。
ユーザーフォームは、Excel VBAで作成できる「入力画面」のようなものです。テキストボックス、ラベル、ボタン、チェックボックスなどのコントロールを配置することで、ユーザーが操作しやすいUI(ユーザーインターフェース)を提供できます。
VBAのコードだけで処理するより、ユーザーフォームを使うことで見た目がわかりやすくなり、誤入力も防ぎやすくなるというメリットがあります。
Name
をbtnSubmit
、Caption
を「登録」に変更。以下は、名前と年齢を入力し、「登録」ボタンを押すと、メッセージボックスに表示するサンプルです。
txtName
txtAge
btnSubmit
Private Sub btnSubmit_Click()
Dim name As String
Dim age As String
name = txtName.Text
age = txtAge.Text
MsgBox "名前:" & name & vbCrLf & "年齢:" & age, vbInformation, "入力結果"
End Sub
これだけで、ユーザーフォームから入力された内容を処理できるようになります。
ユーザーフォームは、標準モジュールから以下のように呼び出して表示できます。
Sub ShowMyForm()
UserForm1.Show
End Sub
また、.Show
のあとに引数を付けることで、モーダル(標準)・モードレスの選択も可能です。
UserForm1.Show vbModal
(標準)UserForm1.Show vbModeless
(Excelと同時に操作可能)実用的な活用例として、ユーザーフォームの入力をシートに書き込む方法を紹介します。
以下のようなコードをbtnSubmit_Click
に追加すれば、入力内容を表形式でシートに書き出せます。
Private Sub btnSubmit_Click()
Dim lastRow As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("入力データ")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(lastRow, 1).Value = txtName.Text
ws.Cells(lastRow, 2).Value = txtAge.Text
MsgBox "データを登録しました。", vbInformation
Me.Hide
End Sub
このコードでは、最終行を自動で判定し、次の行にデータを追記していきます。業務でよく使うパターンです。
ユーザーが2回目以降にフォームを開いたとき、前回の入力が残っていては困る場合もあります。そんなときは、フォームのInitialize
イベントを使って初期化します。
Private Sub UserForm_Initialize()
txtName.Text = ""
txtAge.Text = ""
End Sub
このようにして、フォームが表示されるたびに入力欄を空にできます。
ユーザーフォームでよく使われるコントロールには次のようなものがあります。
それぞれの特徴を活かすことで、ユーザーの操作性を高めることができます。
ユーザーフォームを閉じるには、次のようなコードを使います。
Unload Me
逆に、非表示にしただけなら、再表示が可能です。たとえばMe.Hide
で非表示にし、再度UserForm1.Show
で表示できます。
状況に応じて、Unload
かHide
を使い分けると良いでしょう。
ユーザーフォームは、VBAを使った業務効率化に欠かせない強力なツールです。
といったニーズにぴったりの機能で、基本的な使い方さえ押さえれば、誰でも簡単にフォームを作成できます。ぜひ、日々のExcel作業にVBAのユーザーフォームを取り入れて、効率化を進めてみてください。