Excel VBAのユーザーフォームの使い方をお探しですね。
広告
Excel VBAのユーザーフォーム入門:作成から表示・閉じる処理まで
Excel VBAのユーザーフォームは、セルに直接入力してもらう代わりに、専用の入力画面を表示できる便利な機能です。
テキストボックスやボタン、コンボボックスなどを配置すれば、入力ミスを減らしながら、業務用の小さなアプリのようにExcelを使えるようになります。
この記事では、ユーザーフォームの作り方から、Showメソッドによる表示方法、モーダルとモードレスの違い、閉じる処理までを初心者向けに順番に解説していきます。
1. Excel VBAのユーザーフォームって何?どんなときに使うの?
Excel VBAのユーザーフォームは、VBAで作れる独自の入力画面のことです。
普段Excelではセルに直接データを入力しますが、ユーザーフォームを使うと、入力欄や選択肢、実行ボタンを一つの画面にまとめられます。
例えば、氏名・住所・電話番号を入力するフォームや、商品名を選んで数量を入力するフォーム、検索条件を指定するフォームなどが作れます。
セルの場所を気にせず操作できるので、Excelに慣れていない人が使うブックでも、入力手順を統一しやすくなるんです。
ユーザーフォームが特に役立つのは、入力内容を制限したいときや、操作ミスを防ぎたいときです。
セルに自由に入力してもらうと、表の一部を間違って上書きしたり、日付やコードの形式がバラバラになったりすることがありますよね。
でも、フォーム上でテキストボックスやコンボボックス、チェックボックスなどを使えば、入力項目を分かりやすく整理できます。
さらに、登録ボタンを押したときだけシートに書き込むようにすれば、確認や入力チェックを挟んだ安全な処理も作れます。
ユーザーフォームは「見た目を作る作業」と「動きを作るコード」の組み合わせでできています。
見た目はVBE(Visual Basic Editor)で部品を配置して作り、動きはボタンをクリックしたときのイベントなどにVBAコードを書いて実装します。
最初は難しそうに感じるかもしれませんが、基本は「フォームを挿入する」「コントロールを置く」「Showで表示する」「ボタンで処理する」という流れです。
この流れさえ押さえれば、簡単な入力画面から実務向けのフォームまで、少しずつ作れるようになっていきます。
2. ユーザーフォームの作り方と基本パーツの配置
ユーザーフォームを作るには、まずExcelでVBEを開きます。
ショートカットキーは「Alt + F11」です。
VBEが開いたら、メニューの「挿入」から「ユーザーフォーム」を選びます。
すると、UserForm1という名前の空のフォームが表示されて、同時にツールボックスも表示されます。
ツールボックスが見当たらない場合は、VBEの「表示」メニューから「ツールボックス」を選ぶと表示できますよ。
フォームができたら、必要なコントロール(部品)を配置していきます。
代表的なものには、説明文を表示する**ラベル**、文字を入力する**テキストボックス**、処理を実行する**コマンドボタン**、選択肢を表示する**コンボボックス**や**リストボックス**があります。
例えば、名前を入力してA1セルに転記するだけのフォームなら、ラベル、テキストボックス、登録ボタン、閉じるボタンを置くだけで基本形が作れます。
配置したコントロールは、プロパティウィンドウで名前や表示文字を変更できます。
特に大事なのが、オブジェクト名を表す「**Name**」と、画面上に表示される文字を表す「**Caption**」です。
例えば、登録ボタンのCaptionを「登録」にすれば、ボタン上の表示が分かりやすくなります。
一方、Nameはコードから参照するときに使うので、CommandButton1のままでも動きますが、実務ではbtnRegisterのように役割が分かる名前にしておくと管理しやすくなります。
簡単な登録処理の例として、テキストボックスに入力した内容をシートに反映するコードを見てみましょう。
フォーム上にTextBox1とCommandButton1を配置して、CommandButton1をダブルクリックすると、クリックイベントのコード画面が開きます。
そこに次のように書くと、ボタンを押したときにTextBox1の内容がA1セルに入力されます。
“`vba
Private Sub CommandButton1_Click()
Range(“A1”).Value = TextBox1.Text
End Sub
“`
また、フォームを開いた時点で初期値を表示したい場合は、**Initializeイベント**を使います。
Initializeイベントは、ユーザーフォームが表示される前に一度だけ実行される初期化処理です。
セルの値をテキストボックスに読み込んだり、コンボボックスに選択肢を追加したりするときによく使います。
“`vba
Private Sub UserForm_Initialize()
TextBox1.Text = Range(“A1”).Text
End Sub
“`
3. Showメソッドでユーザーフォームを表示する方法
作成したユーザーフォームを表示するには、VBAコードから**Showメソッド**を使います。
例えば、UserForm1という名前のフォームを表示するだけなら、標準モジュールに次のようなプロシージャを書きます。
標準モジュールは、VBEの「挿入」から「標準モジュール」を選んで追加できます。
“`vba
Sub ShowForm()
UserForm1.Show
End Sub
“`
このマクロを実行すると、UserForm1が画面に表示されます。
ワークシート上のボタンから表示したい場合は、Excelの「開発」タブからフォームコントロールのボタンを配置して、このShowFormマクロを割り当てます。
これで、利用者はVBEを開かなくても、シート上のボタンを押すだけでユーザーフォームを起動できます。
業務用ブックでは、こうやって「入力フォームを開く」ボタンをシート上に用意しておくと使いやすくなりますよ。
Showメソッドには、表示方法を指定する引数があります。
何も指定しない場合は、通常は**モーダル表示**になります。
モーダル表示とは、フォームを閉じるまで背後のExcelを操作できない表示方法です。
ユーザーに必ずフォーム内の入力や確認を完了してほしい場合に向いています。
例えば、処理の途中で条件を入力してもらうフォームや、確認画面として使うフォームでは、モーダル表示のほうが操作の流れをコントロールしやすくなります。
“`vba
Sub ShowModalForm()
UserForm1.Show vbModal
End Sub
“`
一方、**モードレス表示**にすると、フォームを表示したままワークシートを操作できます。
フォームを補助パネルのように使いたい場合や、シートを見ながら検索・入力・編集を行いたい場合に便利です。
モードレス表示にするには、Showメソッドの引数に**vbModeless**を指定します。
“`vba
Sub ShowModelessForm()
UserForm1.Show vbModeless
End Sub
“`
モーダルとモードレスでは、Showの後に書いたコードが実行されるタイミングも違います。
モーダル表示では、フォームを閉じるまで次の処理に進みません。
モードレス表示では、フォームを表示した直後に次の処理に進みます。
なので、フォームで入力された値を受け取ってから後続処理を行いたい場合は**モーダル**、Excel操作と並行してフォームを使いたい場合は**モードレス**、という考え方で選ぶと分かりやすいです。
“`vba
Sub CheckShowTiming()
UserForm1.Show
MsgBox “フォームを閉じた後に表示されます”
End Sub
Sub CheckShowTimingModeless()
UserForm1.Show vbModeless
MsgBox “フォームを閉じなくても表示されます”
End Sub
“`
ブックを開いたときに自動でフォームを表示したい場合は、**ThisWorkbookモジュール**の**Workbook_Openイベント**を使います。
例えば、専用の入力ブックとして使う場合は、ブックを開いた瞬間にフォームを表示すると操作手順が分かりやすくなります。
ただし、毎回フォームが出ると作業の邪魔になることもあるので、利用者がシート上のボタンから起動できる方法と併用すると親切です。
“`vba
Private Sub Workbook_Open()
UserForm1.Show vbModeless
End Sub
“`
4. ユーザーフォームを閉じる処理と初心者が気をつけたいポイント
ユーザーフォームを閉じる一番簡単な方法は、フォーム右上の「×」ボタンをクリックすることです。
ただし、実務で使うフォームでは、画面上に「閉じる」ボタンや「キャンセル」ボタンを用意するのが一般的です。
ユーザーにとって操作が分かりやすくなりますし、必要なら閉じる前に確認メッセージを出したり、未入力項目をチェックしたりできます。
閉じるボタンを作るには、フォームにコマンドボタンを配置して、そのクリックイベントに**Unload文**を書きます。
“`vba
Private Sub CommandButton2_Click()
Unload Me
End Sub
“`
ここで使っている**Me**は、今コードを書いているユーザーフォーム自身を指します。
つまり、UserForm1のコード内で「Unload Me」と書けば、UserForm1を閉じるという意味になります。
フォーム名を直接指定して「Unload UserForm1」と書くこともできますが、フォーム自身のボタンから閉じる場合は「Unload Me」のほうが再利用しやすく、名前変更にも強い書き方です。
初心者のうちは「フォーム内から自分自身を閉じるならUnload Me」と覚えておくといいでしょう。
似た処理に**Hideメソッド**がありますが、UnloadとHideは意味が違います。
**Unload**はフォームをメモリ上から破棄して閉じる処理です。
次に表示するときは、Initializeイベントが再び実行されて、フォームは初期状態から作られます。
一方、**Hide**はフォームを非表示にするだけで、入力された値や状態は残ります。
後で同じ状態のまま再表示したい場合にはHideが使えますが、不要な状態が残って思わぬ動作につながることもあります。
普通の「閉じる」ボタンでは、まず「Unload Me」を使うのが分かりやすいです。
“`vba
Private Sub CommandButtonCancel_Click()
Hide
End Sub
“`
閉じる処理で注意したいのは、保存や入力チェックのタイミングです。
例えば、登録ボタンを押したときにシートに書き込んで、その後フォームを閉じるなら、書き込み処理の後に「Unload Me」を置きます。
未入力のまま閉じられると困る場合は、閉じる前にMsgBoxで確認したり、必須項目が空なら処理を中断したりします。
入力フォームは見た目だけでなく、「どのタイミングでデータを確定するか」を決めることが大切です。
“`vba
Private Sub CommandButtonRegister_Click()
If TextBox1.Text = “” Then
MsgBox “名前を入力してください。
”
Exit Sub
End If
Range(“A1”).Value = TextBox1.Text
Unload Me
End Sub
“`
また、フォーム右上の「×」ボタンで閉じられた場合にも処理を加えたいときは、**QueryCloseイベント**を使います。
これはユーザーフォームが閉じる直前に発生するイベントで、終了確認や後片付けに利用できます。
ただし、最初から複雑に作り込みすぎると理解しにくくなるので、入門段階では「閉じるボタンにUnload Meを書く」「登録後にUnload Meする」という基本をしっかり押さえることが大切です。
ユーザーフォームを使うときは、ブックの保存形式にも注意が必要です。
VBAを含むExcelファイルは、普通の.xlsx形式ではなく、マクロ有効ブックである**.xlsm形式**で保存します。
また、利用者の環境によってはマクロが無効化されていることがあるので、配布するときには「マクロを有効にして使うファイル」であることを説明しておくと混乱を避けられます。
ユーザーフォームはExcel作業を分かりやすくする強力な機能ですが、表示、入力、登録、閉じる処理までを一連の流れとして設計することで、より安全で使いやすい仕組みになります。
広告
