ユーザーフォームでVBA(マクロ)を実行する方法

スポンサーリンク

ユーザーフォームを使用して、VBA(マクロ)を実行しやすくしたり、条件分岐を便利にする

作成したVBA(マクロ)のプログラムを、自分以外の人に使用してもらう場合に、ある場合はこのプログラム、別の場合にはまた他のプログラムというように条件をつけて処理を実行してもらうのは無理があります。

どんな人でも見てわかりやすく処理をできるようにする方法として、以前にマクロのボタンを作成する方法を紹介しましたが、より細かい条件をつけたり、便利に実行できるようにする方法としてユーザーフォームを使用する方法があります。

今回はユーザーフォームの作成方法についてお伝えします。

ユーザーフォームとは?

ユーザーフォームはVBA(マクロ)を実行するためのコントロールパネルみたいなものです。
ユーザーフォームの特徴は自分でレイアウトを決めて作成することで、VBA(マクロ)を実行しやすい環境を作ることができることです。

フォームを作成する際に使用できるパーツにはテキストボックス、ボタン、チェックボックス、ラジオボタン(丸いチェックすると黒い点が入るボタン)などがあり、これらを組み合わせて動作を決めることができるため、VBAやマクロで記載したコードをより細かい条件分岐で実行できたり、VBA(マクロ)の知識がない人も操作しやすくなります。

スポンサーリンク

ユーザーフォームの例

私が以前に作ったフォームの例は以下のようなものがあります。
テキストボックスに入力した値を元に条件分岐したり、ボタンを数種類用意して実行するプログラムを分けたりしています。

ユーザーフォーム1 ユーザーフォーム2
ユーザーフォーム3
ユーザーフォーム4

ユーザーフォームの作成方法

ユーザーフォームのレイアウトはVBEの画面で作成します。
VBEの画面を表示させるには開発タブ → VisualBasicをクリックします。

VBEの表示

表示された画面の左に表示されている「VBAProject(ファイル名)」の部分を右クリックして挿入→ユーザーフォームを選択します。

ユーザーフォームの挿入1
ユーザーフォームの挿入2

空のユーザーフォームが表示されます。

ユーザーフォーム作成1

ユーザーフォームの編集にはプロパティウインドウとツールボックスが必要になりますので、表示されていない場合は表示 → プロパティウインドウ、
表示 → ツールボックスで表示しておきましょう。

ユーザーフォーム作成2

ツールボックスの中から設置したいパーツを選択し、フォームの中でクリックします。
今回はボタンを設置することにします。

ユーザーフォーム作成3

ユーザーフォームにボタンが設置されます。表示された「CommandButton」の文字の部分をクリックするか、プロパティウインドウのキャプションの部分をクリックすると表示名を変更することができます。
今回は「実行」というボタンにします。

プロパティウインドウで名前(オブジェクト名)も同じように変えておくとプログラムを実行させる機能を付けたときに、どのプログラムを実行するボタンなのか判別しやすいのでおすすめです。

ユーザーフォーム作成4

パーツを設置して名前を全て整えたら、ボタンにプログラムを埋め込んでいきます。

ボタンをダブルクリックするとVBAコードの記入画面が表示されます。
ここに直接VBAコードを入力しても大丈夫ですし、標準モジュールに記載したコードのプロシージャ名を記載して呼び出しても実行できます。
今回は直接メッセージボックスを表示させるVBAコードを記載します。

ユーザーフォーム作成5

作成したユーザーフォームを呼び出すのもVBAコードを使用するので、そのコードを標準モジュールに記載します。
ファイル名を右クリック→挿入→標準モジュールを選択します。

ユーザーフォーム作成6

表示された標準モジュールに以下のようにコードを記載します。

ユーザーフォーム作成7

後はExcelの表から作成したフォームを表示させるボタンを作成し、ユーザーフォームを立ち上げるコードを登録すれば完了です。

ユーザーフォーム作成8

ユーザーフォーム作成10

ユーザーフォーム作成9

ユーザーフォーム作成11

ボタンをクリックすると作成したユーザーフォームが立ち上がります。

キャンセルボタンを用意しておいて、ユーザーフォームを閉じる操作を登録しておくと本格的なフォームに近づきます。

ユーザーフォーム作成12

チェックボックスやラジオボタン・テキストボックスを作っておいて、そのチェック内容や記載内容によって条件分岐を行うプログラムを作成すると実行できる内容が大きく広がります。
以下の画像は私がAccessで作成したフォームです。Excelを使用しても同じようなユーザーフォームを作ることができます。

ユーザーフォーム作成13

コメント