ユーザーフォームをいくつか作って使い分ける事ってよくありませんか?
そして苦労して作ったユーザーフォームは、設定をしなければエクセルのワークシートに表示させることはできなくて困ったことありませんか?
作成したユーザーフォームを開くには2つ方法があります。
- エクセルを開いた時に自動的にユーザーフォームを表示させる
- コマンドボタンを配置してVBAコードを記述してフォームを開く
ユーザーフォームの表示について
エクセルを開いた時に自動表示させる方法
私自身はこの方法を必ず使用することにより、他のスタッフが使用しても予想外の操作をされない為に、自動的にフォームを表示させて、これ以外操作できないようにしてエラーを防いでいます。
ここでは説明が重複するので省略します。
それではまず始めにユーザーフォームの基本「表示」「閉じる」から始めましょう。
ユーザーフォームを開く
コマンドボタン1を押したらユーザーフォーム1が開くようにするにば、下記のように記述します。
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
- コマンドボタン1がクリックされたら
- ユーザーフォーム1を表示する
- マクロ終了
ユーザーフォームを閉じる
ユーザーフォームを閉じるには、ユーザーフォーム自体の右上の「✖」ボタンを押すか、「コマンドボタン」にユーザーフォームを閉じるVBAコードを記述します。
まずは、コマンドボタンにVBAコードを記述する方法です。
Private Sub CommandButton1_Click()
Unload UserForm1
End Sub
- コマンドボタン1がクリックされたら
- ユーザーフォーム1を閉じる
- マクロ終了
そしてもうひとつのユーザーフォーム自体の右上の「✖」ボタンですが、この方法おススメしません。
「✖」ボタンを押されてしまうとユーザーフォームが閉じてしまい、次の操作ができなくなる恐れがあるので、「✖」ボタンを使用不可に設定することができます。
これにより、「コマンドボタンに」VBAコードを記述してフォームの切り替えができるようにします。
ユーザーフォームの切り替え
小難しそうにユーザーフォームの切り替えを書きましたが、実は単純に「表示」と「閉じる」を続けてVBAコードを記載するだけなんです。
ユーザーフォーム1を閉じてユーザーフォーム2を表示する場合は下記のようにVBAコードを書けば完成です。
Private Sub CommandButton1_Click()
Unload UserForm1
UserForm2.Show
End Sub
- コマンドボタン1がクリックされたら
- ユーザーフォーム1を閉じる
- ユーザーフォーム2を表示する
- マクロ終了
たったこれだけでユーザーフォームの切り替えが完了します。
【応用】今日の日付を取得してからフォームを開く
ユーザーフォームの切り替えができるようになると、セルの値を取得してからユーザーフォームを開くようにできないものかと思いませんか?
実は簡単で、「閉じる」と「開く」の間に「セルの値を取得してから」という内容を書き加えればできるんですよ!
例えば、セルA1に今日の日付が数式「=TODAY()」で自動的に取得している時に、ユーザーフォーム1を閉じて今日の日付をユーザーフォーム2のラベル1に取得してから、ユーザーフォーム2を表示するようにします。
Private Sub CommandButton1_Click()
Unload UserForm1
UserForm2.Label1.Caption = Range(“A1”).Value
UserForm2.Show
End Sub
- コマンドボタン1がクリックされたら
- ユーザーフォーム1を閉じる
- ユーザーフォーム2に配置されたラベル名をセルA1の値とする
- ユーザーフォーム2を表示する
- マクロ終了
このように3行目にラベル以外にもテキストボックスにも同様に複数の取得したいセルの値があれば、その数の分だけ記述すればセルの値を取得してから、ユーザーフォームを開くことができるようになります。

Excel-VBAを使えば数分かかる作業がたったの1秒で終了しますよ!
コメント