ControlSourceプロパティ解説(Excel VBA)

Excel VBAのControlSource プロパティについて

Excel VBAを用いてフォームコントロールやActiveXコントロールを制御する際に、ControlSourceプロパティは非常に便利なツールとなります。この記事ではControlSourceプロパティについて詳しく解説し、その使用方法をサンプルコードと共に示します。

ControlSource プロパティとは

ControlSourceプロパティは、コントロールの値を特定のセルにリンクするために使用されます。これにより、コントロールの値が変更されると、関連付けられたセルの値も自動的に更新されます。また、セルの値が変更されると、コントロールの値も更新されます。

ControlSource プロパティの使用方法

ControlSourceプロパティの基本的な使用方法は次のとおりです:

ActiveSheet.Shapes("ComboBox1").ControlFormat.ControlSource = "A1"

このコードは、ComboBox1の値をセル”A1″にリンクします。

サンプルコード1: ControlSource プロパティを設定する

Sub SetControlSource()
    Dim shp As Shape
    Set shp = ActiveSheet.Shapes.AddFormControl(xlDropDown, Left:=100, Top:=100, Width:=100, Height:=20)
    shp.ControlFormat.ControlSource = "A1"
    MsgBox "The control source of the form control has been set to cell A1."
End Sub

このサンプルコードでは、新しいフォームコントロール(ドロップダウンリスト)を作成し、そのControlSourceをセル”A1″に設定しています。

サンプルコード2: ControlSource プロパティを取得する

Sub GetControlSource()
    Dim shp As Shape
    Set shp = ActiveSheet.Shapes("Drop Down 1")
    MsgBox "The control source of the form control is " & shp.ControlFormat.ControlSource & "."
End Sub

このサンプルコードでは、既存のフォームコントロール(ドロップダウンリスト)のControlSourceを取得し、メッセージボックスで表示しています。

これらのサンプルコードは、ControlSourceプロパティを使用してフォームコントロールの値を特定のセルにリンクする方法を示しています。この機能を使用すると、ユーザーがコントロールの値を変更すると、自動的に対応するセルの値も更新されます。これは、ユーザーの入力を直接スプレッドシートに反映させるための効率的な方法です。

サンプルコード3: 複数のコントロールとセルをリンクする

Sub LinkMultipleControls()
Dim i As Integer
Dim shp As Shape
For i = 1 To 5
Set shp = ActiveSheet.Shapes.AddFormControl(xlDropDown, Left:=100, Top:=i * 50, Width:=100, Height:=20)
shp.ControlFormat.ControlSource = "A" & i
Next i
MsgBox "Control sources of the form controls have been set to cells A1 to A5."
End Sub

このサンプルコードでは、5つの新しいフォームコントロール(ドロップダウンリスト)を作成し、それぞれをセル”A1″から”A5″にリンクしています。

サンプルコード4: ActiveXコントロールのControlSourceプロパティを設定する

Sub SetActiveXControlSource()
With ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False, Left:=100, Top:=100, Width:=100, Height:=20)
.Name = "ComboBoxActiveX"
.Object.ControlSource = "B1"
End With
MsgBox "The control source of the ActiveX control has been set to cell B1."
End Sub

このサンプルコードでは、新しいActiveXコントロール(コンボボックス)を作成し、そのControlSourceをセル”B1″に設定しています。

ControlSourceプロパティを使用すると、ユーザーのインタラクションをスプレッドシートに直接反映させることができます。これは、ダイナミックなユーザーインターフェースを作成するための強力なツールです。