フレームでグループ化、オプションボタンの使い方と選択した値の取得方法 11回

フレームでグループ化、オプションボタンの使い方と選択した値の取得方法

ユーザーフォーム講座 動画編 11回
フレームでグループ化、オプションボタンの使い方と選択した値の取得方法

動画でExcel フレームでグループ化、オプションボタンの使い方と選択した値の取得方法

【VBAユーザーフォーム】フレームでグループ化、オプションボタンの使い方と選択した値の取得方法。基礎編第11回

今回は フレームコントロールと オプションボタンをご紹介したいと思います。
コントロールにはたくさん種類があります。 それをフォームにいろいろ配置していったら まとまりがなくなって、とても使いづらくなる なんてことがよくあります。
それをグループごとに中に収めて、区別することができる、 フレームコントロールは、そういうコンテナ機能を備えたコントロールです。

マクロ動画 フレームでグループ化、オプションボタンの使い方と選択した値の取得方法

https://youtu.be/mad4SFLqAPc

フレームコントロールは先に作る

フレームコントロールを使用して、密接に関連するコンテンツを持つコントロールを グループ化すると視覚的にも、機能的にも便利です。
下図のサンプルのフォームにはフレームが一つ作成されていて、その中にテキストボックスが3 つあります。それからその外側にもテキストボックスが2つあります。

フレームコントロールの作成1

上の3つは先にフレームを作成し、その中にテキストボックスを設置したので、簡単でした。
あとから、下のテキストボックスもフレームで囲いたいという場合は、 図のようにテキストボックスの上にフレームが上に乗ってしまいテキストボックスが見えません。どのようにすればいいのでしょうか?

フレームコントロールの作成2

フレームをテキストボックスの下側に移動させれば、テキストボックスが見えるようになります。
フレームを選択して右クリックから背面へ移動を選んであげます。

フレームコントロールを背面に移動3

フレームが背面に移動したので、テキストボックスが1つ現れました。もう1回背面に移動させる操作をしましょう。

フレームコントロールを背面に移動4

フレームの中に2つテキストボックスが表示されました。 このように、後からフレームを作成すると、少々手間がかかりますので、フレームは始めに作成することをおすすめします。

フレームコントロールは先に作成5

フレームのプロパティ

フレームのプロパティにも、他のコントロールと同様のプロパティの他に、Cycle(サイクル)プロパティというのがあります。
フレーム内のコントロールを実行したあとの動作を設定するものです。
fmCycleAllFormsとfmCycleCurrentFormの2種類あります。デフォルトは1-fmCycleAllFormsです。
これはフォーム内の他のコントロールに循環移動します。

フレームコントロールのサイクルプロパティ6

実行したところで、フォームのすべてのコントロールを順番に循環することがわかります。

フレームコントロールのサイクルプロパティ7

2-fmCycleCurrentFormの場合は、現在のフレーム内を限定して循環移動します。

フレームコントロールのサイクルプロパティ8

実行したところで、フォーカスが、現在のフレーム内だけで循環することがわかります。

フレームコントロールのサイクルプロパティ9

サイクルプロパティは、フォームの状況に応じて、設定します。
Frameの外に移動する設定は、デフォルトのfmCycleAllForms
Frame内だけで移動する設定は、fmCycleCurrentFormにします。


オプションボタンとフレーム

オプション ボタン ( OptionButton) コントロールは、グループの中の項目を 1 つだけ選択することができるコントロールです。

オプション ボタンをフレームに入れる11

実行すると、フォーム上のオプションボタンから1つだけしか選択できません。

オプション ボタンをフレームに入れる11

解決策として、2つのフレーム ( Frame ) コントロールを作成します。 その中にオプション ボタン ( OptionButton) コントロールを配置すると、グループごとに1つのオプション ボタンを選択できるようになります。

オプション ボタンを選択12

実行すると、Frame1で1つ、Frame2で1つのオプション ボタン ( OptionButton) コントロールを選択することができます。

オプション ボタンを選択13

選択されたオプション ボタン ( OptionButton) コントロールの値を取得する

ボタンをクリックしたらオプションボタンの値を取得するようにします。

オプション ボタンの値を取得14

frame1とframe2それぞれについて、値を取得するためのコードを記述しました。
For Each ctrl In Me.Frame1.Controls以下のコードでは、ctrl.Value = True のボタンを探します。
同様に For Each ctrl In Me.Frame2.Controls以下のコードでも、ctrl.Value = True のボタンを探します。

オプション ボタンの値を取得15
          Private Sub CommandButton2_Click() 'コマンドボタンを押したときに実行
          Dim ctrl As Control
          Dim selectedOption1 As String, selectedOption2 As String
          'selectedOption1 がどれかを探す
          For Each ctrl In Me.Frame1.Controls
              If TypeName(ctrl) = "OptionButton" And ctrl.Value = True Then
                  selectedOption1 = ctrl.Caption
                  Exit For
              End If
          Next ctrl
          'selectedOption2 がどれかを探す         
          For Each ctrl In Me.Frame2.Controls
              If TypeName(ctrl) = "OptionButton" And ctrl.Value = True Then
                  selectedOption2 = ctrl.Caption
                  Exit For
              End If
          Next ctrl 
     

コードの後半部分です。取得した結果をDebug.Print に書き出します。

オプション ボタンの値を取得16
 If selectedOption1 <> "" Then
     Debug.Print "Frame1: " & selectedOption1 
 Else
     Debug.Print "Frame1で選択されたオプションボタンはありません。"
 End If
 
 If selectedOption2 <> "" Then
     Debug.Print "Frame2: " & selectedOption2
 Else
     Debug.Print "Frame2で選択されたオプションボタンはありません。"
 End If
End Sub

実行して値を取得ボタンをクリックすると、結果がイミディエイトウィンドーに表示されます。

NAMAE17

今回は フレームコントロールの設置の仕方とサイクルプロパティの動作と違いの説明をしました。 またフレームコントロールを利用したオプションボタンの設置と値の取得方法について解説いたしました。