【VBA】ユーザーフォームのボタンから標準モジュールのマクロを実行する方法

目次

はじめに

VBAでユーザーフォームを使って操作パネルを作るとき、「フォーム上のボタンをクリックしたら、標準モジュールに書いたメインの処理を実行したい」という場面は必ず出てきます。例えば、選択範囲の文字列から不要な空白を削除する、といった定型的な処理をボタン一つで実行したいケースです。

ユーザーフォームのコードと、メイン処理のコードをきちんと分離しておくことで、プログラム全体の見通しが良くなり、後からの修正や機能追加も容易になります。

この記事では、ユーザーフォームに配置したボタンをクリックした際に、標準モジュールに記述されたマクロを呼び出すための基本的な方法を、具体的な手順を追って分かりやすく解説します。


全体像と作成手順

今回作成するものの全体像は以下の通りです。

  1. 標準モジュール: メインの処理(選択範囲の空白除去)を行うマクロを記述します。
  2. ユーザーフォーム: ツールの日操作画面となるフォームを作成し、「空白を除去」ボタンを配置します。
  3. フォームのコード: 「空白を除去」ボタンがクリックされたら、標準モジュールのマクロを呼び出すコードを記述します。
  4. フォームの表示: 作成したユーザーフォームを表示するためのマクロを、別の標準モジュールに記述します。

VBAサンプルコード

手順1: メイン処理マクロを作成(標準モジュール)

まず、Module1 などの標準モジュールに、実行したいメインのマクロを記述します。ここでは、選択されたセル範囲の各セルに対して、前後の不要な空白を削除する Trim 関数を適用する処理を例にします。

【標準モジュール: Module1

' 選択範囲のセルの前後の空白を削除するメイン処理
Sub TrimSelectionSpaces()
    Dim targetCell As Range
    
    ' 選択範囲がセルでない場合は処理を終了
    If TypeName(Selection) <> "Range" Then Exit Sub
    
    For Each targetCell In Selection.Cells
        ' セルの値が文字列の場合のみ処理を実行
        If VarType(targetCell.Value) = vbString Then
            targetCell.Value = Trim(targetCell.Value)
        End If
    Next targetCell
End Sub

' ユーザーフォームを表示するためのマクロ
Sub ShowTextToolForm()
    ' TextToolForm をモードレスで表示
    TextToolForm.Show vbModeless
End Sub

手順2: ユーザーフォームを作成

VBEで「挿入」→「ユーザーフォーム」を選択し、新しいフォームを作成します。プロパティウィンドウで、フォームの (Name)TextToolForm に変更します。

次に、ツールボックスから「コマンドボタン」をフォーム上に配置し、プロパティを以下のように設定します。

  • (Name): TrimButton
  • Caption: 選択範囲の空白を除去

手順3: ボタンのクリックイベントを記述(ユーザーフォーム)

作成した「選択範囲の空白を除去」ボタンをダブルクリックして、フォームのコードウィンドウを表示させ、ボタンがクリックされたときに Module1TrimSelectionSpaces を呼び出すコードを記述します。

【ユーザーフォーム: TextToolForm

' 「空白を除去」ボタン(TrimButton)がクリックされたときの処理
Private Sub TrimButton_Click()
    ' 標準モジュールの TrimSelectionSpaces マクロを呼び出す
    Call TrimSelectionSpaces
    
    ' 処理完了のメッセージ
    MsgBox "選択範囲の空白を除去しました。", vbInformation
End Sub

コードの解説と実行方法

Call TrimSelectionSpaces

この一行が、フォームから標準モジュールのマクロを呼び出すための中心的な命令です。

  • Call: 他のプロシージャ(マクロ)を呼び出すためのキーワードです(省略可能ですが、明示すると分かりやすいです)。
  • TrimSelectionSpaces: Module1 に記述した、呼び出したいマクロの名前です。もし別のモジュールから呼び出す場合は Module1.TrimSelectionSpaces のようにモジュール名を明記すると、より確実です。

TextToolForm.Show vbModeless

作成したユーザーフォーム(TextToolForm)を表示するための命令です。

  • vbModeless: この引数を指定すると、フォームを表示したままでも、Excelのシートを操作できる「モードレス」状態でフォームが開きます。

実行方法

  1. 標準モジュールに記述した ShowTextToolForm マクロを実行します。
  2. TextToolForm が表示されます。
  3. Excelシート上で、空白を除去したいセル範囲を選択します。
  4. フォーム上の「選択範囲の空白を除去」ボタンをクリックします。
  5. 選択したセルから前後の空白が除去され、完了メッセージが表示されれば成功です。

まとめ

今回は、VBAのユーザーフォームから標準モジュールのマクロを呼び出す、基本的かつ非常に重要な方法を解説しました。

  • ボタンのクリックイベント内に Call マクロ名 と記述する。
  • フォーム(UI)と処理(ロジック)を分離することで、構造化された分かりやすいプログラムになる。

この基本構造をマスターすれば、より複雑でインタラクティブなVBAツールを作成するための第一歩となります。ぜひ、ご自身のツール開発にご活用ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次