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

  • 2022年11月30日
  • 2023年11月9日
  • Excel
  • 24320View
  • 0件

Excelのワークシートにボタンやラジオボタンなどのコントロールを追加するとき、フォームコントロールActiveXコントロールのどっちを使えばいいか迷ったことはありませんか?
今回はそれぞれの違いについて説明します。

コントロールの種類の違い

フォームコントロールとActiveXコントロールで扱えるコントロールは異なります。
使えないコントロールがそれぞれあるので要注意です。
扱えるコントロールを表にまとめました。

フォームコントロールActiveXコントロール
ボタン
コンボボックス
チェックボックス
スピンボタン
リストボックス
オプションボタン
グループボックス
ラベル
スクロールバー
テキストボックス
イメージ
トグルボタン
コントロールの選択
テキストフィールド
リスト エディット
コンボボックス
ドロップダウン エディット
コンボボックス
※MS Excel5.0 ダイアログのみ

MS Excel5.0 とは?

古いバージョンのExcelでユーザーフォームのように使用されていたものです。
現在もシートタブを右クリックし、[挿入] から作成することができます。

選択方法の違い

【フォームコントロール】

マクロが登録されていないボタン、グループボックス、ラベルは常に移動ができる状態です。
その他のコントロールは、右クリックをすることで移動ができる状態になります。

【ActiveXコントロール】

[開発] タブのデザインモードをオンにすることで移動ができる状態になります。

選択させないようにするには?

コントロールをロックし、シートの保護をすることで選択できなくなります。

① コントロールを右クリック
② [コントロールの書式設定] を選択
③ [保護] タブの [ロック] にチェック(初期設定ではチェックされています。)

※フォームコントロールの場合

※ActiveXコントロールの場合

④ [校閲] タブを選択
⑤ [シートの保護] を選択
⑥ [OK] をクリック

プロパティ(書式設定含む)の違い

【フォームコントロール】

右クリックメニューの [コントロールの書式設定] から書式設定とプロパティの設定画面を開くことができます。

【ActiveXコントロール】

フォームコントロールと同様、右クリックメニューの [コントロールの書式設定] から書式設定とプロパティの設定画面を開くことができます。ただし、設定することができる種類(タブ)が少ないです。

さらに、 [開発] タブの [プロパティ] からプロパティの設定画面を開くことができます。
フォームコントロールでは、シートのプロパティの設定画面が開かれます。

マクロの登録方法の違い

フォームのコントロールでは、シートからマクロの登録をすることができます。
ActiveXコントロールではできません。

登録することができるマクロは、標準モジュールのマクロです。

ActiveXコントロールでは、シートモジュールにマクロをコーディングし、ヘッダーで登録するコントロールを設定する必要があります。

コーディングの違い

【フォームコントロール】

生成するコントロールに対応するコレクションを用いて操作します。

コントロールコレクション
ボタンButtons
コンボボックスDropDowns
チェックボックスCheckBoxes
スピンボタンSpinners
リストボックスListBoxes
オプションボタンOptionButtons
グループボックスGroupBoxes
ラベルLabels
スクロールバーScrollBars
'コントロールの追加
Worksheet.コレクション.Add(Left, Top, Width, Height)
'コントロールの編集
Worksheet.コレクション(インデックス).プロパティ = 設定値
'コントロールの削除
Worksheet.コレクション(インデックス).Delete

例)ボタンの場合は次のようになります。

Sub Sample()
    '1.ボタンの追加
    Dim button1 As button
    Set button1 = ActiveSheet.Buttons.Add(80, 80, 100, 50)
    '2.ボタンの編集
    Dim button2 As button
    Set button2 = ActiveSheet.Buttons(1)
    button2.Name = "test"
    '3.ボタンの削除
    Dim button3 As button
    Set button3 = ActiveSheet.Buttons("test")
    button3.Delete
End Sub

変数の型をObjectにすることも可能です。

Sub Sample()
    '1.ボタンの追加
    Dim button1 As Object
    Set button1 = ActiveSheet.Buttons.Add(80, 80, 100, 50)
    '2.ボタンの編集
    Dim button2 As Object
    Set button2 = ActiveSheet.Buttons(1)
    button2.Name = "test"
    '3.ボタンの削除
    Dim button3 As Object
    Set button3 = ActiveSheet.Buttons("test")
    button3.Delete
End Sub

そのほか詳しい内容はこちらのサイトに書かれています。

エクセルの神髄

リボンの開発タブにコントロールの挿入があります。フォームコントロールをシートに配置してVBAで扱う場合の解説になります。…

【ActiveXコントロール】

ActiveXコントロールはOLEObjectなので、
OLEObjectのコレクションOLEObjectsを用いて操作します。

'コントロールの追加
Worksheet.OLEObjects.Add (ClassType, FileName, Link, DisplayAsIcon, IconFileName, IconIndex, IconLabel, Left, Top, Width, Height)
'コントロールの編集
Worksheet.OLEObjects(インデックス).プロパティ = 設定値
'コントロールの削除
Worksheet.OLEObjects(インデックス).Delete

例)ボタンの場合は次のようになります。

Sub Sample()
    '1.ボタンの追加
    Dim button1 As OLEObject
    Set button1 = ActiveSheet.OLEObjects.Add( _
                ClassType:="Forms.CommandButton.1", _
                Link:=False, DisplayAsIcon:=False, _
                Left:=0, Top:=0, Width:=100, Height:=50)
    '2.ボタンの編集
    Dim button2 As OLEObject
    Set button2 = ActiveSheet.OLEObjects(1)
    button2.Name = "test"
    '3.ボタンの削除
    Dim button3 As OLEObject
    Set button3 = ActiveSheet.OLEObjects("test")
    button3.Delete
End Sub

Shapesコレクションを使用することで操作することも可能です。
その場合は、変数の型をObjectにする必要があります。

Sub Sample()
    '1.ボタンの追加
    Dim button1 As Object
    Set button1 = ActiveSheet.OLEObjects.Add( _
                ClassType:="Forms.CommandButton.1", _
                Link:=False, DisplayAsIcon:=False, _
                Left:=0, Top:=0, Width:=100, Height:=50)
    '2.ボタンの編集
    Dim button2 As Object
    Set button2 = ActiveSheet.Shapes(1)
    button2.Name = "test"
    '3.ボタンの削除
    Dim button3 As Object
    Set button3 = ActiveSheet.Shapes("test")
    button3.Delete
End Sub

そのほか詳しい内容はこちらのサイトに書かれています。

エクセルの神髄

リボンの開発タブにコントロールの挿入があります。ActiveXコントロールをシートに配置してVBAで扱う場合の解説になり…

OLEObjectとは?

OLEという、アプリケーション間でオブジェクトをやり取りするためのMicrosoftが開発した仕組みで、やり取りを行うオブジェクトのことをOLEObjectといいます。

まとめ

いかがでしたか?同じオブジェクトに見えて、違う箇所が多くありますね。
実装する内容に適したものを選ぶようにしましょう。