教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA フォーム&コントロール】フォームが表示されていても他の操作ができる/できない状態にする方法を教えて!

構文

構文は以下の通りです。

モーダルフォームとして表示する場合の構文
UserForm1.ShowModal

解説

モーダルフォームを表示するには、UserForm1という名前のフォームのShowModalプロパティを設定します。UserForm1が表示されている間は、そのフォームがアクティブで他の操作ができなくなります。ユーザーがUserForm1を閉じるまで、他のExcelの操作はブロックされます。

モードレスフォームとして表示する場合の構文
UserForm1.Show

解説

モードレスフォームを表示するには、UserForm1という名前のフォームをShowメソッドを呼び出します。モードレスフォームは、表示したまま他のExcelの操作を行うことができます。

使い方

具体的な使い方を以下に紹介します。

1.モーダルフォームとして表示する場合

Private Sub btnShowModal_Click()
    UserForm1.ShowModal
End Sub

この例では、UserForm1という名前のフォームをモーダルとして表示します。ShowModalプロパティがTrue(デフォルト値)のため、ユーザーがUserForm1を閉じるまで、他の操作はできなくなります。

2.モードレスフォームとして表示する場合

Private Sub btnShowModeless_Click()
    UserForm1.Show
End Sub

この例では、UserForm1をモードレスとして表示します。ShowModalプロパティを指定しない場合は、デフォルトでFalse(モードレス)として扱われます。この場合、UserForm1を表示したまま、他のExcel操作を行うことができます。

プログラミング例

以下に、プログラミング例を幾つか紹介します。

例1: ユーザーに名前を入力させるモーダルフォーム

Private Sub btnShowModal_Click()
    UserForm1.ShowModal
    ' モーダルフォームが閉じられた後に名前を表示
    MsgBox "入力された名前は " & UserForm1.TextBox1.Value & " です。"
End Sub

この例では、ユーザーフォームが表示された後、モーダルとして名前を入力させ、OKボタンがクリックされるまで他の操作ができなくなります。フォームが閉じられた後に、入力された名前がメッセージボックスで表示されます。

例2: ユーザーフォームで数値計算を行うモードレスフォーム

Private Sub btnShowModeless_Click()
    UserForm1.Show
End Sub

Private Sub btnCalculate_Click()
    Dim inputNumber As Double
    inputNumber = CDbl(UserForm1.TextBox1.Value)
    ' 計算結果を表示
    MsgBox "入力された数値の2倍は " & inputNumber * 2 & " です。"
End Sub

この例では、ユーザーフォームがモードレスで表示され、他の操作も行えるようになります。フォーム内のテキストボックスに数値を入力し、「計算」ボタンをクリックすると、入力された数値の2倍を計算して結果がメッセージボックスで表示されます。

まとめ

フォームのモーダルとモードレスを使い分けることで、ユーザーの操作性を向上させることができます。モーダルは、フォームの入力が完了するまで他の操作を防ぎ、データの正確性を高める際に適しています。一方、モードレスは、フォームの情報を参照しながら他の操作を行いたい場合に便利です。是非活用してください。