オプションボタンの実用設定をVBAコード化する

vbaopbtnformsetteieyecatch

設置したフォームコントロールのオプションボタンを、実用で使える設定に変更します。

VBAコードで記述することで設置数や内容変更の手間暇の問題も解決できます。

こんにちは、じゅんぱ店長(@junpa33)です。

先回の記事で、オプションボタンを設置するVBAを説明しました。

vbaopbtnformeyecatch フォームのオプションボタンを静的・動的設置する

ただこれは、単に設置しただけで、ボタンを使える状態にはなっていません。

この記事ではこの、

ボタンで選択した内容が値として何も反映されていません。」問題を解決していきます。

オプションボタンのシート設置記事編成

オプションボタンを使えるようにする設定

vbaopbtnform020

フォームコントロールのオプションボタンを、とりあえず配置できるようにするVBAコードはこのコードでした。先回の復習です。

Sub フォームCNTLオプションボタン1()
'B2セルにオプションボタンを設置
        With Cells(2,2)
            ActiveSheet.OptionButtons.Add(.Left, .Top, _
                            .Width, .Height).Select
        End With
End Sub

先回の説明の通り、これでは、どのオプションボタンをクリックしても、リアクションが何もありません。(設定していないので当たり前ですが・・・)

vbaopbtnformeyecatch フォームのオプションボタンを静的・動的設置する

1つのオプションボタンに対して行う設定

そこでこの記事では、オプションボタンについての以下の設定を行っていきます。

  • ボタン表示名の設定
  • ボタン名の名付け
  • 吐き出す値のリンク先
  • リンク先の表示文字設定

ボタン表示名の設定

オプションボタンの表示名を設置設定します。

もし設置しない場合は簡単です。コード記述しないか、「””(空白)」にするだけです。

ボタン表示名の設置はCharactersオブジェクトを利用して設定します。

.Characters.Text = “(見出し) 」として記述

VBA
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
vbaopbtnform016

見出しの文字のサイズ、色、フォント種などは変更することは出来ません。

ボタン名を付ける

ボタン名を付ける事は重要です。

それぞれのボタンを識別するために必ずつけるようにしておきましょう。

ボタン名は、Nameプロパティを使用します。

VBA
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プロパティを使用します。

VBA
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」がリンク先セルに吐き出されます。

シート上のリンク先セルにその値が表示される時、それを見せたくない場合も多くあります。

非表示設定にしたいのですが、セルの値の表示でそれは無いので、文字色を白色で保護色化して見え難くするようにします。

他の方法では、配置したチェックボックスの下に隠すという方法もあります。

VBA
'リンクセルの文字を変更
        With Cells(3,3).Font
            .Color = RGB(255, 255, 255)
            .Bold = True
        End With

複数のオプションボタンがある時の設定

オプションボタンは1つだけでは機能しません。通常、複数個の設置になりますので、事実上こちらのVBAコードによる設定が通常設定となります。

オプションボタンを複数にするためには、設置した「ボタン表示名」や「ボタン名」が1つづつ違う必要があります。

同じ列に30個のオプションボタンを設置していく

B列にセルB2からB31まで、30個のオプションボタンを設置します。

ボタン表示名は「ボタン1」から始まり「ボタン30」までボタン名は「botan1」から「botan30」まで設定します。

VBA
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
vbaopbtnform017

ボタン17を選択したときのオプションボタンの戻り値としてセルB1に「17」が吐き出されています。

同じ列のオプションボタンをグループボックスでまとめる

同じ列のオプションボタンを一つのデータグループとして「グループボックス」でまとめます。

先の記事で説明した内容の復習です。

vbaopbtnformGroupeyecatch オプションボタン 2つのグループ化の使い分け

VBAでオプションボタンをグループボックスでまとめる時にコードの記述順があります。先に「グループボックス」を設置してから「オプションボタン」を設置します。(逆記述の不具合判明事項「リンクセル設定が解除される」)

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
vbaopbtnform018

多重列に列グループとしてオプションボタンを設置する

複数の列にオプションボタンを設置します。

その時に列ごとにグループボックスでグループ化しておきます。これで列ごとに項目を選択することが可能になります。

オプションボタンの表示名は、文字数制限「2バイト文字6文字まで」となっています。

セル幅に合わせグループボックス枠が設定されます。表示名の文字長に合わせ事前にセル幅を設定しておきます。

VBA
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
vbaopbtnform019

この様に、列ごとに項目選択が可能なオプションボタンが、任意の数で設置できるようになりました。

オプションボタンの実用設定のVBA まとめ

vbaopbtnform021

ここまでの説明で、任意の範囲でグループを作成して、選択肢の中からオプションボタンによって項目を選択できるようになりました。

より実用的にするには、「ボタン表示名」を空欄にしてオプションボタンを設置して、隣のセル(先ほどの例であればC列、E列、G列)に選択項目を設置します。

選択項目の設定・修正をより扱いやすくすることで、自由度の高い選択項目を作ることが出来ます。

次の記事では、オプションボタンを取り消し、修正、再設定するときに必ず必要な、「オプションボタンの削除」について説明をします。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min