フォームコントロールのオプションボタンを利用するための2つのグループ化の方法です。
GroupBoxオブジェクトとGroupメソッドについて説明します。
こんにちは、じゅんぱ店長(@junpa33)です。
先回で、フォームコントロールのオプションボタンを設置することが出来るようになりました。
今回は、次の課題の
- ボタンをいくつ作っても「1個だけ」しか選択できない問題
- ボタンを削除する時、例えば30個作ったボタンを削除する方法問題
のような、基本設定的な問題の解決方法を説明します。
オプションボタンのシート設置記事編成
- ActiveXとフォームの両コントロールのオプションボタンをエクセルシートに手動設置する
- フォームコントロールのオプションボタンをエクセルシートにVBA配置する
コンテンツ
オプションボタンの用途の違う2つのグループ化
上の①や②の問題は、
イメージとしては、「括りを作ってまとめて処理しましょう!」的な解決法かな、と想像が付くでしょう。
よく利用するActiveXのオプションボタンであれば、「GroupName」プロパティで解決します。けれども、フォームコントロールにはグループネームプロパティはありません。
代わりにフォームコントロールで使えるのは、「GroupBoxオブジェクト」と「Groupメソッド」になります。
GroupBoxオブジェクトでのグループ化
「GroupBox(グループボックス)」は、ActiveXの「Frame(フレーム)」と同様に、複数のコントロール (オプション ボタンやチェック ボックスなど) を 1 つにまとめることができます。
この「GroupBox(グループボックス)」を利用することで、
- ボタンをいくつ作っても「1個だけ」しか選択できない問題
を解決することが出来ます。
シート上からの操作では、リボン「挿入」からツールボックスを表示して選択する「グループボックス」の設置という形になっています。
ただし、VBAでは、そこまで単純ではなく、設置の構文を知っておくことが必要です。
「GroupBox(グループボックス)」はオプションボタンと同列のオブジェクトになりますので、チェックボックスとは別物として「GroupBox(グループボックス)」を設置する必要があります。
Sub フォームCNTLオプションボタン5()
'グループボックスを設置
With Range(Cells(1, 2), Cells(10, 2))
Worksheets("Sheet2").GroupBoxes.Add(.Left, .Top, _
.Width, .Height).Select
With Selection
.Characters.Text = "グループ名1"
.Name = "選択グループ名1"
End With
End With
End Sub
チェックボックスの設置と同様な構文でグループボックスを設置します。
場所は「Sheet2」のセルB1からB10の範囲に設置しています。
- グループ名は「.Name = 選択グループ1」
- グループ表題は「.Characters.Text = グループ名1」
グループ表題を「空白」にすると何も表示されなくなります。
グループを囲む外枠は、このVBAコードだけでは消去できません。(調べていませんが、恐らく消去できないでしょう)セルに罫線を引いて覆い隠すのが良いかもしれません。
グループ名は、グループ識別になりますので、後々のため省略しないようにしましょう。
設置後はグループ内だけでこのように ” 5個中の1個の選択 ” を行えるようになりました。
同様にほかの2つのグループボックスも設置します。
Sub フォームCNTLオプションボタン6()
'グループボックスを設置
With Range(Cells(1, 4), Cells(10, 4))
Worksheets("Sheet2").GroupBoxes.Add(.Left, .Top, _
.Width, .Height).Select
With Selection
.Characters.Text = "グループ名2"
.Name = "選択グループ名2"
End With
End With
End Sub
Sub フォームCNTLオプションボタン7()
'グループボックスを設置
With Range(Cells(1, 6), Cells(10, 6))
Worksheets("Sheet2").GroupBoxes.Add(.Left, .Top, _
.Width, .Height).Select
With Selection
.Characters.Text = "グループ名3"
.Name = "選択グループ名3"
End With
End With
End Sub
グループごとにボタンを選択できるようになりました。
Groupメソッドでのグループ化
Groupメソッドは、Shapesコレクションなどで使われます。指定したオブジェクトが一つのグループにまとめられます。
この「Group(グループメソッド)」を利用することで、
- ボタンを削除する時、例えば30個作ったボタンを削除する方法問題
を解決することが出来ます。
シート上の操作では、「Ctrl」+左クリックでボタンを1つづつ選択 からの右クリックメニューの「グループ化」となります。
VBAコードで記述するについて、最初にグループのメンバーとなるオプションボタンそれぞれを1つづつ指定して行く必要があります。
1つづつ指定していくには、オプションボタンそれぞれに名前を付けていきます。
その上で、選択したボタンをグループ化することになります。
「Sheet3」に見出し表示「ボタン1」(ボタン名botan1)から「ボタン15」(ボタン名botan15)までのオプションボタンを設置します。
Sub フォームCNTLオプションボタン8()
Dim n, s, t As Long
'Sheet3のセルにオプションボタンを設置
n = 1
For s = 2 To 6 Step 2
For t = 2 To 10 Step 2
With Cells(t, s)
Worksheets("Sheet3").OptionButtons.Add(.Left, .Top, _
.Width, .Height).Select
With Selection
.Characters.Text = "ボタン" & n
.Name = "botan" & n
End With
End With
n = n + 1
Next t
Next s
End Sub
オプションボタン作成時に行うと便利なメソッドやプロパティについては、別記事にて説明をします。
次に、特定のオプションボタンをグループ化することになります。
どのような方法でオプションボタンを1つずつ追加選択していくかが問題。つまり、「Ctrl」ボタンを押しながら選択項目を追加していく選択と、同じ効果のあるVBAコード記述にしないといけません。
Sub フォームCNTLオプションボタン9()
Dim n As Long
'グループにするボタンを選択します
n = 1
For Each ob In Worksheets("Sheet3").OptionButtons
If ob.Characters.Text = "ボタン" & n Then
ob.Select Replace:=False
End If
n = n + 1
If n >= 6 Then Exit For
Next ob
' Selection.ShapeRange.Group.Name = "グループ名1"
Selection.Group.Name = "グループ名1"
Range("A1").Select
End Sub
それぞれのオプションボタンに「ボタン名」と「見出し」を付けていますが、以下のコードでは「見出し」を抽出要素として作成しています。
ボタンのみ見出し無しの場合も多くあるので、「ボタン名」を抽出要素にしておく方が良いかもしれません。
If ob.Characters.Text = "ボタン" & n Then
ob.Select Replace:=False
End If
オプションボタンを1つづつ選択していくコードは以下のコードを使っています。
Falseの場合はSelectによる選択範囲を広げます。
Trueの場合は選択範囲が移ります。
オプションボタンをすべて選択してから、以下のコードでグループ化を行います。
' Selection.ShapeRange.Group.Name = "グループ名1"
Selection.Group.Name = "グループ名1"
Range("A1").Select
「ShapeRange」オブジェクトから「Group」メソッドを利用してグループ化します。
今回は名前を「グループ名1」としています。
また「ShapeRange」オブジェクトを利用しなくても同じ結果が得られます。
グループ化後は、フォーカスをセルA1にはずしておきます。
2つのグループ化のまとめ
オプションボタンを利用する場合は、グループ化が出来ないと利用価値が半減してしまいます。
この記事では、2種類のグループ化について説明しました。
どちらのグループ化も、オプションボタンを利用する上では非常に必要なことですので、是非覚えておきましょう。
次回は、
「ボタンで選択した内容が値として何も反映されていません。」問題について説明したいと思います。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。