【Excel】VBAのユーザーフォームを作成、表示する

スポンサーリンク
スポンサーリンク

ユーザーフォームとは

ユーザーフォーム

「ユーザーフォーム」とは

  • マクロをボタンに割り当て、ボタンを押すと決められたマクロを実行する
  • テキストやコードの入力補助

など、マクロを動作させるのに便利なツールです。

では、ユーザーフォームの表示方法をご説明します。

Visual Basicウインドウでユーザーフォームを作成する

ツールバーから「VBA」ウインドウを表示させます。

ユーザーフォームの挿入

VBAウインドウを開いたところです。
左の「プロジェクトウインドウ」で、「ThisWorkbook」を右クリックし、

vbaウインドウでThisWorkbookを右クリック

挿入→「ユーザーフォーム」を選ぶとユーザーフォームが表示されます。

ユーザーフォームを選ぶとユーザーフォームが表示される

ユーザーフォームにボタン等を追加する

ユーザーフォームの土台ができました。ここにボタンなどを追加して、シートを操作できるようにしていきます。

「VBA」ウインドウの上部ツールバーで、表示→「ツールボックス」を選択します。

vbaウインドウの表示からツールボックスを選択する

ボタンを追加する

「ツールボックス」が表示されました。
「ツールボックス」の「コマンドボタン」を押すと、ユーザーフォームにコマンドボタンが追加されます。

ツールボックスからコマンドボタンを挿入する

コマンドボタンをクリックするとマクロを実行するようにする

先ほど挿入したコマンドボタンをダブルクリックすると、新しいVBA挿入ウインドウが開きます。

ユーザーフォーム上のコマンドボタンをダブルクリック

このウインドウ内に、実行したいマクロを挿入します。

コマンドボタンクリック時に実行したいマクロを挿入する

これで、ボタンをクリックするとマクロが動作するようになります。

ユーザーフォームをカスタマイズする

ボタンや、ユーザーフォームの名称を変更します。

ユーザーフォームの初期設定では「UserForm○」と左上に表示されています。これを変更するにはユーザーフォームをクリックし、左のプロパティ「Caption」欄で変更します。

ユーザーフォームのタイトルを変更する

コマンドボタンも同様に、ボタンを選択して「Caption」欄を選択して名前を変えます。

コマンドボタン名を変更する

これで、ユーザーフォームのボタンでマクロを動かす準備ができました。

ユーザーフォームをExcelシートから表示させるには

ここまでユーザーフォームを作ってきましたが、エクセルのシート上では全く表示されていません。
VBAウインドウを開かないと、ユーザーフォームがあることすらわからない状態です。
そこで、ユーザーフォームをエクセルのシート上でいつでも表示できる状態にします。

ユーザーフォームの表示させる方法は主に3通りあります。

①「VBA」ウインドウで「再生」する方法

VBAウインドウを開き、再生ボタンを押します。

vbaウインドウの再生ボタンでシート上にユーザーフォームが再生される

これで、シート上に作ったユーザーフォームが表示されます。

ですが、いちいちウインドウを開いて再生ボタンを押すのは面倒ですよね。
もう一つの方法がこちらです。

②Excelシートを開いたとき、ユーザーフォームも同時に表示する

エクセルを開いた瞬間にユーザーフォームも同時に開きたい&ユーザーフォームをシート上に常に表示させておくなら、この方法が便利です。

①ユーザーフォームを表示させるためのマクロを打ち込む

VBAウインドウでThisWorkbookを右クリックし、「挿入」→「標準モジュール」でマクロを挿入します。

標準モジュールを開く

②開いたウインドウに、以下のコードをコピペします。

Sub Auto_Open()
 UserForm1.Show vbModeless
End Sub

Sub Auto_Open()
は、シートを開いたときの動作を記述するマクロです。
このマクロを保存しておくと、

シートを開いたときにユーザーフォームが表示されるようになっています。

注意

黄色マーカー部の「UserForm.1」は 先ほど作ったユーザーフォームの「オブジェクト名」を入力してください
※「Caption名」ではないので間違えないように!

補足

vbModeless ←これを記載しておくと、ユーザーフォームを表示しながらシートを操作出来るようになります。
逆に記載しないと、ユーザーフォームが表示されている間はシートを操作できません。

次に、3つ目のやりかたをご紹介します。

③シート上に表示ボタンを作る

1つのシート上でユーザーフォームを何度も開いたり閉じたりする必要があるなら、こちらの方法が便利です。
閉じたり開いたりする必要がなくても、間違って「×」ボタンを押してしまった時の対処時などに、シート上に表示させるボタンを作っておくと楽です。

①ユーザーフォームを表示させるためのマクロを打ち込む

まずVBAウインドウでThisWorkbookを右クリックし、「挿入」→「標準モジュール」でマクロを挿入します。

標準モジュールを挿入する

②開いたウインドウに、以下のコードを挿入する。

Sub フォームを開く()
Userform1.show vbModeless
End Sub
HINT

黄色のマーカー部分は適宜変更してください。
・フォームを開く→自分でわかりやすいタイトルに
・Userform1→先ほど作ったユーザーフォームの「オブジェクト名」を入力する※「Caption名」ではないので間違えないように!
・vbModeless→ユーザーフォームを開きながら他の作業をする際に必要なので、入れておきます。

ユーザーフォームを開くvba

③シート上にテキストボックスを作る

Excelのシートに、ユーザーフォームを表示するためのボタンを作ります。
挿入→図から、適当な図形やテキストボックスを挿入します。

シート上にテキストボックスを挿入する

④ボタンにマクロを登録する

挿入した図形の上で右クリックし、「マクロの登録」を選択します。

テキストボックスにマクロを登録する

先ほど作った「フォームを開く」を選んで「OK」を押します。

テキストボックスにフォームを開くマクロを登録する

⑤完成

これで完成です。「フォーム」ボタンを押すとユーザーフォームが開き、ユーザーフォームを動作させることができます。

ユーザーフォームを開くための図形を変更したいときは、右クリックすると大きさやテキストを変更できます。

テキストボックスをクリックするとユーザーフォームが開く

ユーザーフォームを使ったVBAの例は関連記事で紹介しています。