エクセル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行目にラベル以外にもテキストボックスにも同様に複数の取得したいセルの値があれば、その数の分だけ記述すればセルの値を取得してから、ユーザーフォームを開くことができるようになります。
関連記事
-
ユーザーフォーム
エクセルVBAのユーザーフォーム表示位置を任意の場所に変更する方法
オリジナルの入力フォームを作ったのに、シート上の文字やセルの上に表示されているので位置を変えたいと思ったことありませんか? 初期設定の画面中央から好きな位置に… -
ユーザーフォーム
エクセルファイルを開くと自動的にユーザーフォームを表示する方法
オリジナルの入力フォームを表示させる方法に悩んだことありませんか? エクセルファイルを開いたら自動的にユーザーフォームが開くようになったら手間もなく便利なので… -
ユーザーフォーム
Excel-VBAタイマー機能で数秒後にユーザーフォームを表示させる方法
エクセルを使って成績などを入力して作成した成績表で、入力漏れがなかったかどうかなどをチェックするのに数秒間だけ指定したページや範囲を表示させたいと思ったこと… -
ユーザーフォーム
ユーザーフォームのタブやエンターでカーソル移動する順番変更方法
ユーザーフォームを使っていてテキストボックスに入力してtabやenterを押したら、入力したい順にカーソルが移動しなくて困ったことありませんか? タブオーダーという機… -
ユーザーフォーム
ユーザーフォームのテキストボックスが空欄の時にVBAメッセージを出す方法
オリジナルの入力フォームを作って使用していると、入力を忘れている項目があるのにコマンドボタンを押してしまい、空欄のリストが出来上がって困ったことありませんか… -
ユーザーフォーム
ユーザーフォームを閉じて別のユーザーフォームを開く方法
エクセルVBAでオリジナル入力フォームが作れるユーザーフォームを複数使い分けている時に、表示できなくなったり同時に複数表示してしまい困ったことありませんか? 上… -
ユーザーフォーム
使っていない人が意外と多いエクセル標準機能でオリジナル入力画面を作る
エクセルで様々な数値などのデータ入力を行う時に、オリジナルの入力画面でエクセルを操作できるってご存知でしたか? この入力画面をユーザーフォームといい、ユーザー… -
ユーザーフォーム
ユーザーフォームの✖ボタンでフォーム自体閉じられないようにする
苦労してExcel-VBAを組み込んだエクセルファイルを他人に渡して使ってもらうと、エラー表示になったと言われたことありませんか? 原因は簡単で、エクセル操作をオリジ…
紅葉スポット
-
フリーパスで10月の茨城紅葉スポットへ
【茨城県内の人気紅葉スポット】 関東地方で紅葉名所といえばなんといっても日光ですが、紅葉シーズンになると平日でもいろは坂は大渋滞なのに休日ともなると日光駅周辺… -
土合駅から谷川岳ロープウェイで天神平スキー場からの天空紅葉絶景へ
谷川岳ロープウェイに乗って谷川岳天神平スキー場として冬は多くのスキーヤーに楽しまれていますが、夏は避暑地スポットとして気温22℃の涼しさを体感でき、さらに秋は一… -
城峯公園で十月桜ともみじの紅葉のピンクと赤のコラボの絶景へ
群馬県との県境で標高500mにある高台に位置し、下久保ダム(神流湖)を眺めることができる城峯公園には、なんと晩秋から初冬にかけて開花し、別名十月桜とも呼ばれてい… -
水戸偕楽園のもみじ谷ライトアップは無料で水戸駅からバスで行ける
水戸の偕楽園と言えば梅林が有名なので、訪れたことが1度はあるかもしれませんが、以外と言ったら失礼なのですが、もみじ谷と呼ばれる場所があり、約170本のもみじやか… -
国営武蔵丘陵森林公園の紅葉見ナイトの紅葉ライトアップへ
【紅葉見頃】 東京から電車で1時間ちょっとで東京ドーム65個分の広大な森林公園があり、中央口付近にあるカエデ園には500本のカエデが11月中旬~11月下旬にかけて紅葉… -
妙義山パノラマパーク紅葉へバスで上州富岡駅から滞在時間35分
山が多い群馬県の中でも、赤城山・榛名山とともに妙義山を合わせて上毛三山と呼ばれる群馬県代表の山で、日本三大奇勝でもあり、岩肌が切り立った景観が特徴でもありま…