「…えっ、なんでエクセルが触れないの?」
VBAを勉強して、ようやく自作の入力フォーム(UserForm)を作れた時のこと。意気揚々と実行ボタンを押したものの、フォームが開いている間は、後ろのエクセルシートを1ミリも動かせない…。
結局、シートの内容を確認するために一度フォームを閉じ、また開く。
そんな「二度手間」にイライラしたことはありませんか?
実はこれ、VBAの初期設定が「モーダル(Modal)」という、少し融通の利かない設定になっているからなのです。
今回は、この制限を解除して、フォームを表示したまま自由にシートを操作できる「モードレス(Modeless)」という設定をご紹介します。
「モーダル」と「モードレス」の違いとは?
両者には、以下のような使い勝手の違いがあります。
- モーダル(標準設定): 「頑固なレストランの店員さん」。注文をすべて決めて店員さんに伝えない限り、他のメニューを見ることすら許してくれません。
- モードレス(今回の設定): 「セルフサービスのカフェ」。トレイを持って好きなものを取っている最中も、店内の様子を見たり、席を確保したりできます。
事務作業中は、シートの数字を見ながらフォームに入力することが多いですよね。だからこそ、後者の「モードレス」が圧倒的に便利なんです。
解決策は「1行書き足すだけ」!
やり方はとても簡単です。フォームを表示させるコードに、たったひとつの単語を付け加えるだけ。
コピペで使えるコード
標準モジュールなどに貼り付けて使ってください。
Sub ShowMyForm()
' 通常の表示方法:UserForm1.Show
' これを以下のように書き換えるだけで「モードレス」になります
UserForm1.Show vbModeless
' これでフォームを出したまま、マウスでシートのセルを選択したり
' スクロールしたりできるようになります。
End Sub
もう一つの設定方法(プロパティから変更)
「コードを直接書き換えるのは避けたい」という方は、マウス操作だけで設定することも可能です。
- VBAエディタで「UserForm」を選択。
- 左下の「プロパティウィンドウ」を見る。
- 「ShowModal」という項目を探し、TrueをFalseに変更する。
これだけで、そのフォームは常に「出しっぱなしOK」の状態になります。

まとめ
VBAは単に「動けばいい」というわけではなく、「使う人がどれだけ楽になれるか」という視点が大切です。
もし、ご自身で作ったツールに対して「シートが触れなくて不便だな」と感じることがあれば、迷わず「vbModeless」を試してみてください。
たったそれだけの工夫で、あなたや周囲の方々の作業が劇的に快適になるはずです!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント