コントロールの状態を表す値を取得する(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
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。