はじめに
VBAでユーザーフォームを使って操作パネルを作るとき、「フォーム上のボタンをクリックしたら、標準モジュールに書いたメインの処理を実行したい」という場面は必ず出てきます。例えば、選択範囲の文字列から不要な空白を削除する、といった定型的な処理をボタン一つで実行したいケースです。
ユーザーフォームのコードと、メイン処理のコードをきちんと分離しておくことで、プログラム全体の見通しが良くなり、後からの修正や機能追加も容易になります。
この記事では、ユーザーフォームに配置したボタンをクリックした際に、標準モジュールに記述されたマクロを呼び出すための基本的な方法を、具体的な手順を追って分かりやすく解説します。
全体像と作成手順
今回作成するものの全体像は以下の通りです。
- 標準モジュール: メインの処理(選択範囲の空白除去)を行うマクロを記述します。
- ユーザーフォーム: ツールの日操作画面となるフォームを作成し、「空白を除去」ボタンを配置します。
- フォームのコード: 「空白を除去」ボタンがクリックされたら、標準モジュールのマクロを呼び出すコードを記述します。
- フォームの表示: 作成したユーザーフォームを表示するためのマクロを、別の標準モジュールに記述します。
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: ボタンのクリックイベントを記述(ユーザーフォーム)
作成した「選択範囲の空白を除去」ボタンをダブルクリックして、フォームのコードウィンドウを表示させ、ボタンがクリックされたときに Module1
の TrimSelectionSpaces
を呼び出すコードを記述します。
【ユーザーフォーム: 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のシートを操作できる「モードレス」状態でフォームが開きます。
実行方法
- 標準モジュールに記述した
ShowTextToolForm
マクロを実行します。 TextToolForm
が表示されます。- Excelシート上で、空白を除去したいセル範囲を選択します。
- フォーム上の「選択範囲の空白を除去」ボタンをクリックします。
- 選択したセルから前後の空白が除去され、完了メッセージが表示されれば成功です。
まとめ
今回は、VBAのユーザーフォームから標準モジュールのマクロを呼び出す、基本的かつ非常に重要な方法を解説しました。
- ボタンのクリックイベント内に
Call マクロ名
と記述する。 - フォーム(UI)と処理(ロジック)を分離することで、構造化された分かりやすいプログラムになる。
この基本構造をマスターすれば、より複雑でインタラクティブなVBAツールを作成するための第一歩となります。ぜひ、ご自身のツール開発にご活用ください。