エクセル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タイマー機能で数秒後にユーザーフォームを表示させる方法
エクセルを使って成績などを入力して作成した成績表で、入力漏れがなかったかどうかなどをチェックするのに数秒間だけ指定したページや範囲を表示させたいと思ったこと… -
ユーザーフォーム
ユーザーフォームを閉じて別のユーザーフォームを開く方法
エクセルVBAでオリジナル入力フォームが作れるユーザーフォームを複数使い分けている時に、表示できなくなったり同時に複数表示してしまい困ったことありませんか? 上… -
ユーザーフォーム
ユーザーフォームのタブやエンターでカーソル移動する順番変更方法
ユーザーフォームを使っていてテキストボックスに入力してtabやenterを押したら、入力したい順にカーソルが移動しなくて困ったことありませんか? タブオーダーという機… -
ユーザーフォーム
ユーザーフォームの✖ボタンでフォーム自体閉じられないようにする
苦労してExcel-VBAを組み込んだエクセルファイルを他人に渡して使ってもらうと、エラー表示になったと言われたことありませんか? 原因は簡単で、エクセル操作をオリジ… -
ユーザーフォーム
エクセルVBAのユーザーフォーム表示位置を任意の場所に変更する方法
オリジナルの入力フォームを作ったのに、シート上の文字やセルの上に表示されているので位置を変えたいと思ったことありませんか? 初期設定の画面中央から好きな位置に… -
ユーザーフォーム
ユーザーフォームのテキストボックスが空欄の時にVBAメッセージを出す方法
オリジナルの入力フォームを作って使用していると、入力を忘れている項目があるのにコマンドボタンを押してしまい、空欄のリストが出来上がって困ったことありませんか…
紅葉スポット
-
草津温泉スキー場の天狗山紅葉とライトアップされた西の河原散策へ
10月になると早々に紅葉を見ることができるので、今年の紅葉狩りのスタートはここ草津温泉からと言っても過言ではありません。 草津温泉の湯畑が有名ですが、すぐ近くに… -
筑波山紅葉ライトアップへつくば駅や土浦駅からバスで紅葉絶景へ
2月の筑波梅林、6月のあじさいと年に何度も訪れたくなる筑波山は関東平野を一望できるちょうどいい60㎞という距離にあります。 紅葉が綺麗に見られるエリアは梅林周辺で… -
赤城公園でハイジのブランコと赤城神社へ赤城山の紅葉絶景へ
日本百名山の1つでもある赤城山は標高1,800mほどに位置し、群馬県を代表する名山です。 特に山頂部の火山の爆発でできたカルデラ湖の大沼周辺は、県立赤城公園として観… -
三国峠猿ヶ京温泉の赤谷湖畔水鏡紅葉と江戸時代の関所跡見学へ
国道17号で三国峠を目指す途中にある温泉街の猿ヶ京には、関所と相俣ダムによってできた赤谷湖が観光スポットになっています。 そして紅葉になると周囲の三国連山が綺麗… -
富津市の紅葉名所もみじロードへ上総湊駅や浜金谷駅からバスで行く
JR内房線の上総湊駅と浜金谷駅からバスで行くことができますが、もみじロードは10㎞もあるので歩いて全てを見ることはかなり難しいと思いますので、それぞれ行ける範囲… -
伊香保温泉365段の石段の先に紅葉ライトアップされた河鹿橋絶景へ
石段と温泉街で古くから観光客が多く訪れる伊香保温泉には、群馬県の紅葉スポット人気1位・全国でもトップクラスの紅葉スポットがあります。 石段をゆっくりと登ってい…