コントロールの状態を表す値を取得する(Valueプロパティ)

ユーザーフォームに設置したコントロールの状態を表す値を取得するには Value プロパティを使用します。例えばチェックボックスやオプションボタンでは項目が選択されているかどうかを取得したり、スクロールバーであれば現在の位置を取得することができます。ここでは Excel のユーザーフォームで Value プロパティを使ってコントロールの状態を表す値を取得する方法について解説します。

(Last modified: )

コントロールの状態を表す値を取得する

ユーザーフォームに設置したコントロールの状態を表す値を取得するには Value プロパティを使用します。デフォルトの値は対象のコントロールによって異なります。

それぞれのコントロールで Value プロパティを参照するとどのような値を取得できるのかは次のようになっています。

コントロール説明
CheckBox項目が選択されているかどうか。選択されていれば True 、選択されていなければ False 、 Null の場合はどちらでもない。
OptionButton項目が選択されているかどうか。選択されていれば True 、選択されていなければ False 、 Null の場合はどちらでもない。
ToggleButton項目が選択されているかどうか。選択されていれば True 、選択されていなければ False 、 Null の場合はどちらでもない。
ScrollBar現在の位置を表す数値。 Max プロパティと Min プロパティの間の数値。
SpinButton現在の位置を表す数値。 Max プロパティと Min プロパティの間の数値。
ComboBox現在選択されている行の BoundColumn プロパティの値が示す列の値。
ListBox現在選択されている行の BoundColumn プロパティの値が示す列の値。
CommandButton常にFalseを返します。
MultiPage現在のアクティブページを表す数値。 0 が最初のページ。
TextBox入力されているテキスト。

例えば CheckBoxOptionButton では選択されているかどうかを調べることができ、 ComboBox などでは選択されている行の指定の列の値を取得できます。 TextBox の場合は Text プロパティと同じ値が設定されます。

Value プロパティの値は参照するだけでなく設定することもできます(ただし ComboBoxValue プロパティの値を変更しても、対象の値は変更されません)。

それでは例として CheckBox コントロールを使って試してみます。 CheckBox コントロールの場合、 Value プロパティのデフォルトの値は「False」となっており、選択されていない状態です。

コントロールの状態を表す値を取得する(1)

ユーザーフォームを表示してみると、 3 つのチェックボックスはすべて選択されていない状態となっています。

コントロールの状態を表す値を取得する(2)

それでは 2 番目のチェックボックスの Value プロパティの値を「True」に変更します。 Value プロパティの値を変更する場合は、ドロップダウンメニューから選択などではなく直接値を入力する必要があります。値を「True」に書き換えると、チェックボックスにチェックが表示されて選択された状態となりました。

コントロールの状態を表す値を取得する(3)

ユーザーフォームを表示してみると、 2 つ目ののチェックボックスだけが選択されている状態になっているのが確認できます。

コントロールの状態を表す値を取得する(4)

今度は Value プロパティの値を参照してみます。ユーザーフォーム上でチェックボックスを選択したあとコマンドボタンをクリックしてください。コマンドボタンには Click イベントに対するイベントプロシージャを記述してあり、それぞれのチェックボックスの Value プロパティの値を取得して結果をメッセージボックスに表示するようにしてあります(実際のコードはこのページの後半に記載しています)。

コントロールの状態を表す値を取得する(5)

チェックボックスが選択されているかどうか Value プロパティの値を参照することで調べることができました。

コントロールの状態を表す値を取得する(6)

このように Value プロパティの値を変更したり参照することで、対象のコントロールの状態を変更したり現在の状態を取得することができます。

VBAのプログラムの中でValueプロパティを設定する

プロパティウィンドウを使って Value プロパティの値を変更する代わりに、 VBA のコードを記述して Value プロパティの値を変更することもできます。

プログラムの中で Value プロパティを設定する場合は次の書式を使用します。

オブジェクト.Value [= Variant ]

対象のオブジェクトの Value プロパティに対して適切な値を代入してください。どのような値を代入するのかはコントロールによって異なります。

サンプルコード

簡単なサンプルで試してみます。ユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャを作成し、その中で Value プロパティの値を設定します。ユーザーフォームが表示される前にコントロールのプロパティの設定が行われます。

Initialize イベントに対するイベントプロシージャの使い方については「ユーザーフォームを表示する直前に発生するイベント(Initializeイベント)」を参照されてください。

ユーザーフォームのコントロールが何もないところをダブルクリックしてください。

VBAのプログラムの中でValueプロパティを設定する(1)

ユーザーフォームの規定のイベントである Click イベントに対するイベントプロシージャが表示されます。

VBAのプログラムの中でValueプロパティを設定する(2)

今回はユーザーフォームの Initialize イベントに対するイベントプロシージャ使用するので、コードウィンドウで次のようにイベントプロシージャを追加で記述してください。またコマンドボタンがクリックされたらチェックボックスが選択されているかどうか確認してメッセージボックスに表示するように、コマンドボタンの Click イベントに対するイベントプロシージャを次のように記述してください。

Private Sub UserForm_Initialize()
    CheckBox1.Value = True
    CheckBox3.Value = True
End Sub

Private Sub CommandButton1_Click()
    Dim msg As String
    
    If CheckBox1.Value = True Then
        msg = msg & "チェックボックス1 は 選択" & vbNewLine
    Else
        msg = msg & "チェックボックス1 は 非選択" & vbNewLine
    End If
    
    If CheckBox2.Value = True Then
        msg = msg & "チェックボックス2 は 選択" & vbNewLine
    Else
        msg = msg & "チェックボックス2 は 非選択" & vbNewLine
    End If
    
    If CheckBox3.Value = True Then
        msg = msg & "チェックボックス3 は 選択"
    Else
        msg = msg & "チェックボックス3 は 非選択"
    End If
    
    MsgBox msg
End Sub

VBAのプログラムの中でValueプロパティを設定する(3)

これでコードの記述は完了です。では実際に試してみます。「Sub/ユーザーフォームの実行」をクリックしてください。

VBAのプログラムの中でValueプロパティを設定する(4)

ユーザーフォームが表示されました。 3 つのチェックボックスの中で、 Value プロパティに「True」を設定したチェックボックスが選択された状態になっています。

VBAのプログラムの中でValueプロパティを設定する(5)

コマンドボタンをクリックすると、 3 つのチェックボックスが現在選択されているかどうか Value プロパティの値を参照して結果をメッセージボックスで表示します。

VBAのプログラムの中でValueプロパティを設定する(6)

このように VBA のプログラムの中で Value プロパティの値を変更したり参照したりすることができました。

-- --

Excel のユーザーフォームで Value プロパティを使ってコントロールの状態を表す値を取得する取得する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。