コントロールの状態を表す値を取得する(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 | 入力されているテキスト。 |
例えば CheckBox
や OptionButton
では選択されているかどうかを調べることができ、 ComboBox
などでは選択されている行の指定の列の値を取得できます。 TextBox
の場合は Text
プロパティと同じ値が設定されます。
Value
プロパティの値は参照するだけでなく設定することもできます(ただし ComboBox
で Value
プロパティの値を変更しても、対象の値は変更されません)。
それでは例として CheckBox
コントロールを使って試してみます。 CheckBox
コントロールの場合、 Value
プロパティのデフォルトの値は「False」となっており、選択されていない状態です。
ユーザーフォームを表示してみると、 3 つのチェックボックスはすべて選択されていない状態となっています。
それでは 2 番目のチェックボックスの Value
プロパティの値を「True」に変更します。 Value
プロパティの値を変更する場合は、ドロップダウンメニューから選択などではなく直接値を入力する必要があります。値を「True」に書き換えると、チェックボックスにチェックが表示されて選択された状態となりました。
ユーザーフォームを表示してみると、 2 つ目ののチェックボックスだけが選択されている状態になっているのが確認できます。
今度は Value
プロパティの値を参照してみます。ユーザーフォーム上でチェックボックスを選択したあとコマンドボタンをクリックしてください。コマンドボタンには Click
イベントに対するイベントプロシージャを記述してあり、それぞれのチェックボックスの Value
プロパティの値を取得して結果をメッセージボックスに表示するようにしてあります(実際のコードはこのページの後半に記載しています)。
チェックボックスが選択されているかどうか Value
プロパティの値を参照することで調べることができました。
このように Value
プロパティの値を変更したり参照することで、対象のコントロールの状態を変更したり現在の状態を取得することができます。
VBAのプログラムの中でValueプロパティを設定する
プロパティウィンドウを使って Value
プロパティの値を変更する代わりに、 VBA のコードを記述して Value
プロパティの値を変更することもできます。
プログラムの中で Value
プロパティを設定する場合は次の書式を使用します。
オブジェクト.Value [= Variant ]
対象のオブジェクトの Value
プロパティに対して適切な値を代入してください。どのような値を代入するのかはコントロールによって異なります。
簡単なサンプルで試してみます。ユーザーフォームが表示される前に発生する Initialize
イベントに対するイベントプロシージャを作成し、その中で Value
プロパティの値を設定します。ユーザーフォームが表示される前にコントロールのプロパティの設定が行われます。
※ Initialize
イベントに対するイベントプロシージャの使い方については「ユーザーフォームを表示する直前に発生するイベント(Initializeイベント)」を参照されてください。
ユーザーフォームのコントロールが何もないところをダブルクリックしてください。
ユーザーフォームの規定のイベントである Click
イベントに対するイベントプロシージャが表示されます。
今回はユーザーフォームの 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
これでコードの記述は完了です。では実際に試してみます。「Sub/ユーザーフォームの実行」をクリックしてください。
ユーザーフォームが表示されました。 3 つのチェックボックスの中で、 Value
プロパティに「True」を設定したチェックボックスが選択された状態になっています。
コマンドボタンをクリックすると、 3 つのチェックボックスが現在選択されているかどうか Value
プロパティの値を参照して結果をメッセージボックスで表示します。
このように VBA のプログラムの中で Value
プロパティの値を変更したり参照したりすることができました。
-- --
Excel のユーザーフォームで Value プロパティを使ってコントロールの状態を表す値を取得する取得する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。