はじめに
VBAのユーザーフォームは、ツールにグラフィカルな操作画面を提供する上で欠かせない要素です。そして、その中心となるのが、ユーザーがクリックして処理を指示するための「コマンドボタン」です。
「このボタンを押したら、シートに今日の日付を入力する」といったように、ボタンのクリックという単純なアクションに、特定のVBAマクロを紐付けることができます。
この記事では、ユーザーフォームにコマンドボタンを配置し、そのボタンがクリックされたときに特定の処理を実行させるための、最も基本的で重要な手順を解説します。
ボタンでマクロを実行するVBAサンプルコード
ここでは、MainForm
というユーザーフォームに配置した RunProcessButton
という名前のボタンをクリックすると、選択したセルに「処理実行済み」というスタンプを押す処理を作成します。
ユーザーフォームのコード
このコードは、ユーザーフォームのコードモジュールに直接記述します。
- ユーザーフォームに「コマンドボタン」を配置します。
- ボタンのプロパティウィンドウで、
(Name)
をRunProcessButton
に、Caption
を処理を実行
に変更します。 - 配置した「処理を実行」ボタンをダブルクリックすると、VBEに
Private Sub RunProcessButton_Click()
というコードが自動的に生成されるので、その中に処理を記述します。
' 「処理を実行」ボタン(RunProcessButton)がクリックされたときに実行されるイベント
Private Sub RunProcessButton_Click()
' 選択範囲がセルであるかを確認
If TypeName(Selection) <> "Range" Then
MsgBox "セルを選択してから実行してください。", vbExclamation
Exit Sub
End If
' 選択されているセルの値と書式を変更
With Selection
.Value = "処理実行済み"
.Font.Bold = True
.Interior.Color = vbYellow
End With
End Sub
ボタンのキャプションをコードで設定する
ボタンの Caption
(表示されるテキスト)は、プロパティウィンドウだけでなく、VBAコードで動的に設定することも可能です。例えば、フォームが表示される直前の UserForm_Initialize
イベントで設定できます。
' フォームが初期化されるときに実行されるイベント
Private Sub UserForm_Initialize()
' RunProcessButton の Caption プロパティを設定
Me.RunProcessButton.Caption = "ここをクリックして実行"
End Sub
コードの解説
Private Sub RunProcessButton_Click()
これは特別な名前のイベントプロシージャで、RunProcessButton
という名前のコントロールがクリックされたときに、Sub
と End Sub
の間に書かれたコードが自動的に実行されます。この _Click()
イベントが、ボタン操作の基本となります。
Selection
オブジェクト
Selection
は、ユーザーが現在Excelシート上で選択しているセル範囲を指すオブジェクトです。Selection.Value = "..."
とすることで、選択されたセルの値を書き換えることができます。
Me.RunProcessButton.Caption
Me
: ユーザーフォームのコードモジュール内では、Me
はそのフォーム自身を指します。MainForm.RunProcessButton.Caption
と書くのと同じ意味ですが、Me
を使うのが一般的です。.Caption
: コントロールの表面に表示されるテキストを制御するプロパティです。
まとめ
今回は、ユーザーフォームのコマンドボタンにマクロを紐付ける、最も基本的な方法を解説しました。
- ボタンの処理は、
Private Sub ボタン名_Click()
というイベントプロシージャ内に記述する。 - ボタンの表示テキストは
.Caption
プロパティで設定できる。
ユーザーフォームの操作は、この「ボタンをクリックして、対応する _Click()
イベント内のコードを実行する」という流れが全ての基本です。この仕組みを理解すれば、様々な機能を持つインタラクティブなツールを作成できるようになります。