エクセルVBAでオリジナル入力フォームが作れるユーザーフォームを複数使い分けている時に、表示できなくなったり同時に複数表示してしまい困ったことありませんか?
上手に設定をすれば、表示・閉じる・フォームを差し替えることもできるようになり、使い勝手が向上する方法をご紹介します。
ユーザーフォーム表示方法
ユーザーフォームを表示させる方法として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コードを記載するだけなんです。
ユーザーフォーム1を閉じてユーザーフォーム2を表示する場合は下記のようにVBAコードを書けば完成です。
Private Sub CommandButton1_Click()
Unload UserForm1
UserForm2.Show
End Sub
- コマンドボタン1がクリックされたら
- ユーザーフォーム1を閉じる
- ユーザーフォーム2を表示する
- マクロ終了
たったこれだけでユーザーフォームの切り替えが完了しますが、「閉じる」「開く」の順番です。
逆の順番で行ってしまうと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タイマー機能で数秒後にユーザーフォームを表示させる方法
エクセルを使って成績などを入力して作成した成績表で、入力漏れがなかったかどうかなどをチェックするのに数秒間だけ指定したページや範囲を表示させたいと思ったこと… -
エクセルファイルを開くと自動的にユーザーフォームを表示する方法
オリジナルの入力フォームを表示させる方法に悩んだことありませんか? エクセルファイルを開いたら自動的にユーザーフォームが開くようになったら手間もなく便利なので… -
ユーザーフォームのタブやエンターでカーソル移動する順番変更方法
ユーザーフォームを使っていてテキストボックスに入力してtabやenterを押したら、入力したい順にカーソルが移動しなくて困ったことありませんか? タブオーダーという機… -
エクセルVBAのユーザーフォーム表示位置を任意の場所に変更する方法
オリジナルの入力フォームを作ったのに、シート上の文字やセルの上に表示されているので位置を変えたいと思ったことありませんか? 初期設定の画面中央から好きな位置に… -
ユーザーフォームを閉じて別のユーザーフォームを開く方法
エクセルVBAでオリジナル入力フォームが作れるユーザーフォームを複数使い分けている時に、表示できなくなったり同時に複数表示してしまい困ったことありませんか? 上… -
ユーザーフォームのテキストボックスが空欄の時にVBAメッセージを出す方法
オリジナルの入力フォームを作って使用していると、入力を忘れている項目があるのにコマンドボタンを押してしまい、空欄のリストが出来上がって困ったことありませんか… -
ユーザーフォームの✖ボタンでフォーム自体閉じられないようにする
苦労してExcel-VBAを組み込んだエクセルファイルを他人に渡して使ってもらうと、エラー表示になったと言われたことありませんか? 原因は簡単で、エクセル操作をオリジ… -
使っていない人が意外と多いエクセル標準機能でオリジナル入力画面を作る
エクセルで様々な数値などのデータ入力を行う時に、オリジナルの入力画面でエクセルを操作できるってご存知でしたか? この入力画面をユーザーフォームといい、ユーザー…
紅葉スポット
-
栃木駅から大平山展望台へバスで陸の松島と言われる紅葉スポットへ
【紅葉見頃】11月中旬~11月下旬 太平山は蔵の街で有名な栃木市中心部にある県立自然公園で、山頂付近にある太平山展望台からの眺望は、関東平野が一望でき眼下の峰々… -
千葉県の本土寺で五重塔と真っ赤に染まったもみじのコラボが見られる
6月にはあじさいが綺麗に見られ、あじさい寺として千葉県以外の観光客が多く訪れる本土寺に行かれたことがあれば気づいたかもしれませんが、あじさいの頭上にはもみじの… -
埼玉県指定名勝地の中津峡へ奥秩父を代表する紅葉スポット
秩父エリアトップクラスの絶景と言われている奥秩父の中津峡は、約10㎞もの中津川沿いの紅葉が見られて、その長さは約10㎞と言われて、西武秩父駅からのバス車窓からも… -
日光駅から避暑地で紅葉名所の日光三名瀑の霧降の滝へバスで滞在時間30分
【紅葉見頃】10月下旬~11月上旬 日光三名瀑「華厳の滝」「裏見の滝」「霧降の滝」といわれ、年間を通じて観光に訪れる人が多い近畿スポットで、夏は避暑地として秋は… -
三国峠猿ヶ京温泉の赤谷湖畔水鏡紅葉と江戸時代の関所跡見学へ
国道17号で三国峠を目指す途中にある温泉街の猿ヶ京には、関所と相俣ダムによってできた赤谷湖が観光スポットになっています。 そして紅葉になると周囲の三国連山が綺麗… -
黄金色の世界へ茨城県立歴史館のいちょう並木道と水戸偕楽園へ
梅で有名な水戸偕楽園には毎年多くの観光客が2月中旬~3月上旬にかけて訪れますが、紅葉の11月上旬~11月下旬までも偕楽園のもみじ谷と茨城県立歴史館のいちょう並木を…