設置したフォームコントロールのオプションボタンを、実用で使える設定に変更します。
VBAコードで記述することで設置数や内容変更の手間暇の問題も解決できます。
こんにちは、じゅんぱ店長(@junpa33)です。
先回の記事で、オプションボタンを設置するVBAを説明しました。
フォームのオプションボタンを静的・動的設置するただこれは、単に設置しただけで、ボタンを使える状態にはなっていません。
この記事ではこの、
「ボタンで選択した内容が値として何も反映されていません。」問題を解決していきます。
オプションボタンのシート設置記事編成
- ActiveXとフォームの両コントロールのオプションボタンをエクセルシートに手動設置する
- フォームコントロールのオプションボタンをエクセルシートにVBA配置する
コンテンツ
オプションボタンを使えるようにする設定
フォームコントロールのオプションボタンを、とりあえず配置できるようにするVBAコードはこのコードでした。先回の復習です。
Sub フォームCNTLオプションボタン1()
'B2セルにオプションボタンを設置
With Cells(2,2)
ActiveSheet.OptionButtons.Add(.Left, .Top, _
.Width, .Height).Select
End With
End Sub
先回の説明の通り、これでは、どのオプションボタンをクリックしても、リアクションが何もありません。(設定していないので当たり前ですが・・・)
フォームのオプションボタンを静的・動的設置する1つのオプションボタンに対して行う設定
そこでこの記事では、オプションボタンについての以下の設定を行っていきます。
- ボタン表示名の設定
- ボタン名の名付け
- 吐き出す値のリンク先
- リンク先の表示文字設定
オプションボタンの表示名を設置設定します。
もし設置しない場合は簡単です。コード記述しないか、「””(空白)」にするだけです。
ボタン表示名の設置はCharactersオブジェクトを利用して設定します。
「.Characters.Text = “(見出し)“ 」として記述
Sub フォームCNTLオプションボタン10()
'B2セルにオプションボタンと表示名を設置
With Cells(2, 2)
ActiveSheet.OptionButtons.Add(.Left, .Top, _
.Width, .Height).Select
With Selection
.Characters.Text = "ボタン"
End With
End With
End Sub
見出しの文字のサイズ、色、フォント種などは変更することは出来ません。
ボタン名を付ける事は重要です。
それぞれのボタンを識別するために必ずつけるようにしておきましょう。
ボタン名は、Nameプロパティを使用します。
Sub フォームCNTLオプションボタン11()
'B2セルにオプションボタン設置とボタン名を付ける
With Cells(2, 2)
ActiveSheet.OptionButtons.Add(.Left, .Top, _
.Width, .Height).Select
With Selection
.Characters.Text = "ボタン"
.Name = "ボタン"
End With
End With
End Sub
オプションボタンの名前を「ボタン」にしました。
ボタンをクリックしたときの値が表示されるセル位置を、リンク先として指定する必要があります。
オプションボタンは、設定されたグループボックス内では個数に関わらず1つだけの値の吐き出しになります。
なので、リンク先セル位置は、グループ内共通の同じ1つのセル位置で良いでしょう。
値の表示先セルはLinkedCellプロパティを使用します。
Sub フォームCNTLオプションボタン12()
'B2セルにオプションボタン設置とリンク先セル指定する
With Cells(2, 2)
ActiveSheet.OptionButtons.Add(.Left, .Top, _
.Width, .Height).Select
With Selection
.Characters.Text = "ボタン"
.Name = "ボタン"
.LinkedCell = Cells(3, 3)
End With
End With
End Sub
オプションボタンのリンク先セルをセルC3に設定しました。
オプションボタンのリンク先セルには、ボタンクリック後の値が表示されます。
ActiveXコントロールのオプションボタンの場合は、それぞれのオプションボタンに対して、そのValueとしてクリックON時True、プリックOFFじFalseが返されます。
フォームコントロールの場合は、グループボックスのオプションボタンの値として「クリックされたオプションボタンの(ボックス内での)番号」を返します。
例えばグループボックス内にオプションボタンが5つあって、3番目のボタンがクリックされたら、「値=3」がリンク先セルに吐き出されます。
シート上のリンク先セルにその値が表示される時、それを見せたくない場合も多くあります。
非表示設定にしたいのですが、セルの値の表示でそれは無いので、文字色を白色で保護色化して見え難くするようにします。
他の方法では、配置したチェックボックスの下に隠すという方法もあります。
'リンクセルの文字を変更
With Cells(3,3).Font
.Color = RGB(255, 255, 255)
.Bold = True
End With
複数のオプションボタンがある時の設定
オプションボタンは1つだけでは機能しません。通常、複数個の設置になりますので、事実上こちらのVBAコードによる設定が通常設定となります。
オプションボタンを複数にするためには、設置した「ボタン表示名」や「ボタン名」が1つづつ違う必要があります。
B列にセルB2からB31まで、30個のオプションボタンを設置します。
ボタン表示名は「ボタン1」から始まり「ボタン30」までボタン名は「botan1」から「botan30」まで設定します。
Sub フォームCNTLオプションボタン13()
Dim i, n As Long
Dim ws As Worksheet
Set ws = ActiveSheet
n = 1
'セルB2からB31にオプションボタンを設置
For i = 2 To 31
With Cells(i, 2)
ws.OptionButtons.Add(.Left, .Top, _
.Width, .Height).Select
With Selection
.Characters.Text = "ボタン" & n
.Name = "botan" & n
.LinkedCell = Range("B1").Address
End With
End With
n = n + 1
Next i
With ws.Range("B1")
.Select
With .Font
.Size = 6
.Color = RGB(255, 255, 255)
End With
End With
End Sub
ボタン17を選択したときのオプションボタンの戻り値としてセルB1に「17」が吐き出されています。
同じ列のオプションボタンを一つのデータグループとして「グループボックス」でまとめます。
先の記事で説明した内容の復習です。
オプションボタン 2つのグループ化の使い分けVBAでオプションボタンをグループボックスでまとめる時にコードの記述順があります。先に「グループボックス」を設置してから「オプションボタン」を設置します。(逆記述の不具合判明事項「リンクセル設定が解除される」)
Sub フォームCNTLオプションボタン14()
Dim i, n As Long
Dim ws As Worksheet
Set ws = ActiveSheet
'グループボックスを設置
With Range(Cells(1, 2), Cells(31, 2))
ws.GroupBoxes.Add(.Left, .Top, _
.Width, .Height).Select
With Selection
.Characters.Text = "グループ1"
.Name = "ボタンGrp1"
End With
End With
'セルにオプションボタンを設置
n = 1
For i = 2 To 31
With Cells(i, 2)
ws.OptionButtons.Add(.Left, .Top, _
.Width, .Height).Select
With Selection
.Characters.Text = "ボタン" & n
.Name = "botan" & n
.LinkedCell = Range("B1").Address
End With
End With
n = n + 1
Next i
With ws.Range("B1")
.Select
With .Font
.Size = 6
.Color = RGB(255, 255, 255)
End With
End With
End Sub
複数の列にオプションボタンを設置します。
その時に列ごとにグループボックスでグループ化しておきます。これで列ごとに項目を選択することが可能になります。
オプションボタンの表示名は、文字数制限「2バイト文字6文字まで」となっています。
セル幅に合わせグループボックス枠が設定されます。表示名の文字長に合わせ事前にセル幅を設定しておきます。
Sub フォームCNTLオプションボタン15()
Dim s, t, n As Long
Dim ws As Worksheet
Set ws = ActiveSheet
For t = 2 To 6 Step 2
'グループボックスを設置
ws.Range("B1,D1,F1").ColumnWidth = 10.5
With Range(Cells(1, t), Cells(31, t))
ws.GroupBoxes.Add(.Left, .Top, _
.Width, .Height).Select
With Selection
.Characters.Text = "グループ" & t & "列"
.Name = "ボタンGrp" & t & "列"
End With
End With
'セルにオプションボタンを設置
n = 1
For s = 2 To 31
With Cells(s, t)
ws.OptionButtons.Add(.Left, .Top, _
.Width, .Height).Select
With Selection
.Characters.Text = "ボタン" & t & "列" & n
.Name = "botan" & t & "_" & n
.LinkedCell = Cells(1, t).Address
End With
End With
n = n + 1
Next s
With ws.Cells(1, t)
.Select
With .Font
.Size = 6
.Color = RGB(255, 255, 255)
End With
End With
Next t
End Sub
この様に、列ごとに項目選択が可能なオプションボタンが、任意の数で設置できるようになりました。
オプションボタンの実用設定のVBA まとめ
ここまでの説明で、任意の範囲でグループを作成して、選択肢の中からオプションボタンによって項目を選択できるようになりました。
より実用的にするには、「ボタン表示名」を空欄にしてオプションボタンを設置して、隣のセル(先ほどの例であればC列、E列、G列)に選択項目を設置します。
選択項目の設定・修正をより扱いやすくすることで、自由度の高い選択項目を作ることが出来ます。
次の記事では、オプションボタンを取り消し、修正、再設定するときに必ず必要な、「オプションボタンの削除」について説明をします。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。