Excel VBAで、フォームによる簡単ランチャーの作成事例です。
フォームを利用するメリットの一つに、フォームを開いたまま Excelのセル編集や他の作業が可能な「モードレス表示」がある点があります。
VBA業務の属人化を防止のため、できるだけシンプルな構成が望ましいです。レイアウトの自由度はないですが、次の「フォーム」ではなく「インプットボックス」やExcelのワークシート上にボタンを追加する方法で目的が達成できるなら、その方が良いと思います。
内容:
動作確認のExcelは「Microsoft® Excel® for Microsoft 365 MSO」(バージョン2503)です。
アウトプットイメージ
「フォーム」で次のようなマクロの実行メニューを作成します。
Excelのセル編集中、常にメニューを表示し、マクロを選択して実行するため、「モードレス表示」のオプションを活用した事例です。
作成手順
ステップ1: ユーザーフォームを作成
- 「開発タブ」 → 「VBAエディタを開く」(Alt + F11)
- 「挿入」 → 「ユーザーフォーム」 を選択
- フォーム上に以下のコンポーネントを追加
- リストボックス (ListBox) → メニューとして利用
- 実行ボタン (CommandButton) → 選択したマクロを起動
以下は、ユーザーフォームの作成イメージです。コンポーネントなどをクリックしたときのオブジェクト名はVBAのコードで利用するので確認しておきます。
この事例では、リストボックスを選択したとき、オブジェクト名は”ListBox1”となっています。
ステップ2: コードを記述
ユーザーフォームに以下のコードを追加します。
もし、前述のコンポーネントのオブジェクト名が違う場合は、修正します。
Private Sub UserForm_Initialize() 'リストボックスに選択肢を追加' ListBox1.AddItem "マクロ1" ListBox1.AddItem "マクロ2" ListBox1.AddItem "マクロ3" End Sub Private Sub CommandButton1_Click() Select Case ListBox1.Value Case "マクロ1" Call マクロ1 Case "マクロ2" Call マクロ2 Case "マクロ3" Call マクロ3 Case Else MsgBox "選択が無効です", vbExclamation End Select End Sub Sub マクロ1() MsgBox "マクロ1を実行しました" End Sub Sub マクロ2() MsgBox "マクロ2を実行しました" End Sub Sub マクロ3() MsgBox "マクロ3を実行しました" End Sub
ユーザーフォームにコード追加の方法
ユーザーフォームにコード追加するには、フォームを右クリック、「コードの表示」をクリックします。
以下は、上記でコード表示をした後、コードを記述イメージです。
ステップ3: 標準モジュールに「フォーム表示」の追加
次のコードを標準モジュールに追加し、ユーザーフォームを表示します。
Sub ランチャーを起動() UserForm1.Show vbModeless End Sub
補足説明
- ステップ3で、「UserForm1.Show vbModeless」にある”vbModeless”によって「モードレス表示」が指定されています。
”vbModeless”を削除した場合、フォームは「モーダル表示」になり、フォームを閉じるまでExcelの操作が制限される仕様となります。 - 実行は、標準モジュールにある「ランチャーを起動」を呼び出します。
以上、Excel VBAでフォームによる簡単ランチャーの作成事例でした。