Excelに下の画像のような入力フォームを表示させるにはどうすれば良いのでしょうか。ここでは、Excel上にVBAのユーザーフォームを表示させる方法を記載します。

VBAプログラムを実施する環境ができていない方は、以下の記事で環境を整えてください。
VBAプログラム環境にユーザーフォームを追加しよう
さっそく、VBEでユーザーフォームを追加してみます。Excel画面の上部にある[開発]タブ>「Visual Basic」をクリックします。
※[開発]タブの表示が出ていない方は、この記事を参考に設定してください。

表示されたVBEの「プロジェクトエクスプローラー」でユーザーフォームを追加したいExcelを選んで、「右クリック」>「挿入」>「ユーザーフォーム」をクリックします。

「プロジェクトエクスプローラー」上のフォームに「UserForm1」というフォームが作成され、図形が表示されます。ここに、テキストボックスなど入力項目を追加していきます。

ユーザーフォームのプロパティで設定を変更しよう
作成した「UserForm1」の名前やサイズを変えたい場合は、「表示」>「プロパティウィンドウ」をクリックし、「プロパティ」画面を表示します。

「プロパティ」は、フォームだけでなく、選択したラベル、テキストボックスなどの設定全般で使用します。色、形、サイズ、フォント、表示名などさまざまな設定が可能です。

また、これらの設定は、プログラム内で変更したり、中身を取得したりできます。その際、重要になってくるのが「オブジェクト名」です。例のように、「オブジェクト名.Caption」で「仕入検索」という文字を取得したり、変更したりできます。
(例)画面左上の表示名を"仕入検索"から"売上検索"に変える。
F01_Search_Purchase.Caption = "売上検索"
今回は、ユーザーフォームの設定を次のように変更しています。

ユーザーフォームに各オブジェクトを配置しよう
次に、ラベルやテキストボックスを追加して、画面を作り込んでいきます。
「ユーザーフォーム」の図形をクリックすると、「ツールボックス」が表示されます。表示されたコントロール(ラベルやテキストボックスなどの総称)の中から配置したいものを選んで、画面に配置していきましょう。

ユーザーフォームでは、「プロパティ」画面でサイズなどを調整しましたが、Excelの図形を挿入するのと同じ感覚で「コピー」や「貼り付け」ができます。また、複数のコントロールを選択して、「整列」させることも可能です。

今回は、各コントロールのオブジェクト名を次のように設定しました。
コメントで記載したのが「オブジェクト名」です。同じ形をしたテキストボックスでもオブジェクト名を変えることで別のコントロールと判断できます(同じ名前は使用できません)。

Excelの図形と異なり、形だけでなく「文字数制限」や「入力切替の禁止」など、よりシステム的な制御も可能です。もちろん、プログラム内で「オブジェクト名.MaxLength = 6」などと記載し、文字数を制限したり、IMEのキーボード切り替えを禁止するなど、さまざまな制御が可能です。

各コントロールは次のように設定しています。参考にしてみてください。


まだ、ユーザーフォーム画面で追加していないコントロールがあります。それは、「ProgrecssBar」です。このコントロールは、はじめから「ツールボックス」に表示されていないので、追加する必要があります。

コントロールの追加方法に関しては、次の記事を参考にしてください。
これで、すべてのコントロールをユーザーフォームに配置できました。

ユーザーフォームとExcelボタンをひもづける
作成したユーザーフォームをExcelボタンにひもづけて、ボタンをクリックするとユーザーフォームが表示されるようにしましょう。
まず、Excelにボタンを挿入します。ボタンは立体感をだして作成してみてください。

作成したExcelボタンに対して、「右クリック」>「マクロの登録」をクリックして、「マクロの登録」画面を表示させてください。
「マクロの登録」画面では、はじめから「○○_Click」というマクロ名が記載されています。そのまま、「新規作成」をクリックしてください。

VBEが開き、自動で標準モジュールに「Module1」が追加され、Sub ○○_Click() ~ End Subまでが勝手に作成されます。この“~”の部分に「四角形角を丸くする1」をクリックしたときの動作を記載するとボタンをクリックしたとき、“~”の部分の処理を実行できます。

プログラムの書き方とオブジェクトとのひもづけに関しては、以下の記事を参考にしてください。
まず「Module1」の名前を「M01_Search_Purchase」に変更してみましょう。「Module1」をクリックし、プロパティで「オブジェクト名」を「M01_Search_Purchase」に変更します。

次に、プログラムを書いていきます。画面のプログラムは以下の内容です。はじめはコピペでも構わないので、記載してみてください。
'******************************************************************************************************************
' 機能:VBAプログラムのメニュー表示
' 説明:Excelのボタンなどに「マクロ登録」し、メニューを表示させる。
'******************************************************************************************************************
Private Sub M01_Search_Purchase()
' 画面をモードレスで表示。Excelが同時に操作可能。
F01_Search_Purchase.Show vbModeless
End Sub
プログラムの内容説明はいったん置いておいて、このプログラムをExcelのボタンにひもづけていきましょう。
この際、必要になるのが、「Private Sub 〇〇」と記載した〇〇の部分「M01_Search_Purchase」です。これをオブジェクト名と.(ドット)でつなげて、「オブジェクト名.〇〇」と記載し、ボタンに登録していきます。
Excelのボタンを「右クリック」>「マクロの登録」>「マクロ名」にオブジェクト名.〇〇を記載し、「OK」をクリックします。

これで、Excelのボタンとプログラムに追加された標準モジュール「M01_Search_Purchase」の中の「M01_Search_Purchase」メソッドをひもづけれました。「仕入データ検索」ボタンをクリックすると作成したユーザーフォームが表示されます。
