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

  • 2022年11月30日
  • 2023年11月9日
  • Excel
  • 46938View
  • 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コントロール無効化について最新情報 1.概要:ActiveXコントロールの無効化方…

OLEObjectとは?

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

まとめ

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