VBAマクロ登録するボタンはフォームかActiveXのどっちがいいのか?

はじめに

VBAをユーザーに実行してもらうのに「マクロをボタンに登録」という機能を使うことがあると思います。実はこのボタンには2種類あることをご存知でしょうか?開発タブの挿入から選ぶことができるのですが、ボタンにはフォームコントロールボタンとActiveXコントーロールの2つのボタンが用意されています。

この2つのボタンですが、どちらもそれぞれ長所と短所が有り、目的に応じて使い分けることでよりVBAマクロが使いやすくなるという特徴があります。今回はこのフォームコントロールボタンとActiveXコントーロールの2つのボタンに関して違いを取り上げながら紹介したいと思います。

フォームコントロールとActiveXコントーロールの違いとは

Microsoftのオンラインリファレンスに以下の記事があります「ワークシート上のフォーム、フォーム コントロール、ActiveXコントロールの概要」

これによると、コントロール自体にはフォームコントロールとActiveXコントーロール以外のものもあるのですが、今回はあくまでフォームコントロールとActiveXコントーロールに絞ってご紹介させていただきたいとおもいます。上記のサイトでは、以下のようにフォームコントロールとActiveXコントーロールが紹介されています

フォーム コントロールに関して

フォーム コントロール
フォーム コントロールは、以前のバージョンの Excel (Excel 5.0 以降) と互換性のある独自のコントロールです。 XLM マクロ シートでも使用できるように設計されています。

フォーム コントロールは、VBA コードを使用しないでセルのデータを簡単に参照および操作する場合や、コントロールをグラフ シートに追加する場合に使用します。
「ワークシート上のフォーム、フォーム コントロール、ActiveXコントロールの概要」

フォームコントロールは基本的にはVBAの使用を前提とされていないようです。なので、VBA側からフォームコントロールを扱おうとすると少々苦労します(後述)。

ActiveXコントーロールに関して

ActiveX コントロール
ActiveX コントロールは、ワークシート フォーム (VBA コードを使用することもできます) および VBA のユーザー フォームで使用できます。 通常、フォーム コントロールよりも柔軟な設計要件が必要な場合に ActiveX コントロールを使用します。 ActiveX コントロールには、外観、動作、フォント、およびその他の特性をカスタマイズできる広範なプロパティがあります。

また、ActiveX コントロールを操作したときに発生するさまざまなイベントを制御することもできます。
「ワークシート上のフォーム、フォーム コントロール、ActiveXコントロールの概要」

フォームコントロールに対して、ActiveXコントロールはVBA側から制御するのに適しているようです。実際、ActiveXコントロールのボタンは押下したときのイベントをVBAで補足できるなど、コントロールするのに便利な機能がたくさんあります。

フォームコントロールとActiveXコントーロールにマクロ登録する方法

それではフォームコントロールとActiveXコントーロールにマクロ登録する方法を見ていきましょう!

フォームコントロールにマクロ登録する方法

フォームコントロールにマクロ登録するには、ボタンを挿入したあとに右クリックからマクロ登録画面を開きます。

予め標準モジュールなどにマクロを記録してあると、一覧にマクロが表示されますので、あとは登録することでフォームボタンを押下したときにマクロが実行されます。

ActiveXコントロールにマクロ登録する方法

フォームコントロールに対して、ActiveXにマクロ登録するにはVBAのソースコードから記述する必要があります。ちなみにActiveXコントロールのボタンを挿入したあとプロパティを開くと以下のように細かな設定項目が出てきますが、フォームのようにカンタンにマクロ登録する画面などは出てきません。ちなみに赤線のcaptionプロパティはボタンのテキストになります。これを変えるのはこの部分なのですが、何故か英語ですし、分かりづらいですね笑。

具体的には、ボタンクリックイベントに時刻したい処理を記述する形になります。また、ボタン自身も様々なプロパティを持っており、様々な操作が可能です(シートで ActiveX コントロールを使用する)。以下に一例を示します。

Private Sub CommandButton1_Click()
    
     'クリックするとボタンが消える
     Worksheets("sheet1").CommandButton1.Visible = False

End Sub()

おわりに

本記事ではフォームコントロールとActiveXコントーロールの違いについてご紹介しました。Microsoftのオンラインリファレンスにある通り、VBAによって制御を必要とする場合、ActiveXコントロールのほうが様々な点で利用しいやすいようです。

その一方で、フォームコントロールだとVBAを使わずに直感的にマクロを登録することができるので、その点では便利と言えるかもしれません。使用環境と、その後の使用状況を確認いただいて最も適切な方を選択いただくようによろしくお願いいたします。