shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel VBA】フォームによる簡単ランチャーの作成事例

Excel VBAで、フォームによる簡単ランチャーの作成事例です。

フォームを利用するメリットの一つに、フォームを開いたまま Excelのセル編集や他の作業が可能な「モードレス表示」がある点があります。

VBA業務の属人化を防止のため、できるだけシンプルな構成が望ましいです。レイアウトの自由度はないですが、次の「フォーム」ではなく「インプットボックス」やExcelのワークシート上にボタンを追加する方法で目的が達成できるなら、その方が良いと思います。

shikumika.org

内容:

動作確認のExcelは「Microsoft® Excel® for Microsoft 365 MSO」(バージョン2503)です。

アウトプットイメージ

「フォーム」で次のようなマクロの実行メニューを作成します。

Excelのセル編集中、常にメニューを表示し、マクロを選択して実行するため、「モードレス表示」のオプションを活用した事例です。

リストボックスと、実行、閉じるだけのフォームです

フォームでリストボックスを使った簡単ランチャー

作成手順

ステップ1: ユーザーフォームを作成

  1. 「開発タブ」 → 「VBAエディタを開く」(Alt + F11)
  2. 「挿入」 → 「ユーザーフォーム」 を選択
  3. フォーム上に以下のコンポーネントを追加
    - リストボックス (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でフォームによる簡単ランチャーの作成事例でした。