ExcelVBAのユーザーフォーム(UserForm)の作り方と、表示方法についてご説明します。
ユーザーフォームとは、入力ボックス、リストボックス、ボタンなどを自由に設置して表示したり、設置したコントロールの機能を利用したり出来る機能です。
ExcelVBAのユーザーフォームの最大の特徴は、出来る事がある程度限られますが、それ以上にプログラミングを使用せずにデザインを自由に作成できる部分です。
つまり、他のプログラミングと比較して、簡単にデザインして表示、機能の利用が可能という事です。
もちろんVBAから操作も可能です。
ユーザーフォームを使用すると、よりシステマチックなツールを作成できる反面、なんでもユーザーフォームで作成しようとするとExcelの利便性を失い、かえって使いづらいツールになる可能性もございますので、ご注意ください。
その他のユーザーフォームの操作については下記記事をご覧ください。
- ユーザーフォームのサイズを変更する
- ユーザーフォームの背景色を変更する
- ユーザーフォームのプロパティ一覧と表示方法
- ユーザーフォームを閉じる方法
- ユーザーフォームを×ボタンで閉じれないようにする
- ユーザーフォームにコントロールを追加する方法
- コントロールの数と名前と種類を取得する
1.ユーザーフォーム(UserForm)の作り方
ユーザーフォームを作成、挿入する方法です。
「Alt+F11」でVBEを表示します。
挿入タブをクリックすると、挿入できるモジュールの一覧が表示されますので「ユーザーフォーム」モジュールを選択します。
ユーザーフォームモジュールを選択すると次のようにUserForm1というモジュールが追加されます。
また、ユーザーフォームモジュールが追加されると同時に、ユーザーフォームが追加されます。
何のコントロールもないだたのフォームですが、これでユーザーフォームが作成されました。
サイズはマウスのドラッグやプロパティの数値を変更する事で変えられます。
2.ユーザーフォームを表示する
ユーザーフォームの表示はVBAのコードでする必要があります。
ですが、コードは非常に簡単です。
VBAでユーザーフォームを表示したり、操作するにはユーザーフォームのオブジェクト名を指定する必要があります。
ユーザーフォームのオブジェクト名を確認する
ユーザーフォームのオブジェクト名を確認するには、VBEの表示タブから「プロパティウィンドウ」を選択します。
プロパティウィンドウを表示すると、オブジェクト名が確認できます。
基本的にオブジェクト名は変更していない場合は「UserForm番号」となり、最初にUserFormを作成した場合は図の様に「UserForm1」となります。
以降のUserFormは自動的にナンバリングされます。
オブジェクト名は任意に変更可能で、プロパティウィンドウのこの画面で直接変更可能です。
ユーザーフォームを表示する
ユーザーフォームを表示するには、ユーザーフォームオブジェクトの「Show メソッド」を使用します。
次のように記述します。
UserFrom.Show[Modal]
そして、ただ表示するだけではなく表示設定を「Modal」で指定します。
設定には次の2種類があります。
Modalの定数
省略すると「vbModal」が既定値となります。
定数 | 値 | 説明 |
vbModal | 1 | モーダルに指定します。 モーダルのユーザーフォームは、ユーザーフォームを閉じるまでアプリケーション内の他の操作ができません。 |
vbModeless | 0 | モードレスに指定します。 ユーザーフォームが開いた状態でも、アプリケーション内の他の操作が可能です。 |
表示するサンプルコード
今回は先ほどのオブジェクト名を確認するで、確認した「UserForm1」をそのまま使用します。
モーダルで表示する
モーダルで表示した場合は、他の操作ができなくなります。
Sub Sample1()
UserForm1.Show
End Sub
「Modal」を省略しない場合は次のようになります。
Sub Sample2()
UserForm1.Show vbModal
End Sub
モードレスで表示する
見た目的にはモーダルもモードレスも一緒です。
Sub Sample3()
UserForm1.Show vbModeless
End Sub
また、Excelのバージョンによって多少見た目が異なります。
3.ユーザーフォームを使用するメリット/デメリット
最後にユーザーフォームのメリット/デメリットについて簡単にお伝えします。
※個人的主観です。
メリット
Excelの場合はより複雑に作りこまれたツールの場合、ちょっとした変更を加えるとエラーが発生する原因になったりします。
Excelのワークシートと違い、自分以外のユーザーが使用してもフォームを変更されたり、不必要な加工を加えられる事を回避出来ます。
また、1つのExcelに独立した機能のツールを集約して、ユーザーフォームのボタンで機能を使い分けるなども工夫次第では可能です。
デメリット
ユーザーフォームで作りこめば作りこむほど、Excelという利便性の高いアプリケーションの機能を失っていきます。
矛盾していますが、システマチックなツールを作るためにユーザーフォームを使用すると、ワークシートというExcelの機能と利便性を失ってしまうという事です。
また、ユーザーフォームは複雑なことを組み込む場合は、それなりに難易度も高いためイベントやオブジェクトの操作などしっかりとした知識も必要になります。