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

vbaopbtnformeyecatch

フォームコントロールのオプションボタンを、VBAだけを使ってエクセルシートに設置する方法を説明します。
動的な設置を可能にして、シートでの手作業設置の手間を排除します。

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

エクセルを使った業務では、そのシートにデータ入力のテンプレートを作成することも多くあるでしょう。

その時に使いたいのが、リボン「挿入」からツールボックスを表示させて、指定・設置する色んなコントロールツールではないでしょうか。

ツールボックスでは、「フォームコントロール」と「ActiveXコントロール」の2種類が表示されます。

2つの違いはザックリ言うと、このような感じです。

充実したプロパティからコントロールの動作を設定することが可能な「ActiveX」ただし、エクセルに特化しただけの技術ではないので、利用状態や環境によって不具合の可能性も否定できない。

シート上での操作では簡単楽々なのは「フォーム」、プロパティは便利というわけではなく、VBAコードからの動作管理も楽々とはいかない。ただ、エクセルで使うために作られているので「ActiveX」よりは安定感がある。

ということで今回は、

みんなさんが一番使いたい、「フォームコントロール オプションボタン」のエクセルシートへのVBAコード設置を説明します。

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

オプションボタンをシートに静的に設置する

vbaopbtnform011

オプションボタンのVBAコードによる使い方の解説で、実は、よく見かけるのが、ActiveXコントロールを使ってのユーザーフォームへの設置と操作設定に関するものです。

真逆パターンのフォームコントロールのエクセルシートへの設置と操作設定については、極々断片の解説のみで、ほぼ「なるほど」と理解できるものはありません。

なので、この記事では、フォームコントロールのシート設置の方法を、「最初から分かりやすく」を目標に説明して行きたいと思います。

兎に角、シートにオプションボタンを設置してみる

まず最初に、ここから説明していきます。オプションボタンをシートに静的に設置する方法です。

セルB2にオプションボタンを設置します。

設置できるVBAコードはこちらです。

VBA
Option Explicit

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

上のコードは、構文的に覚えておきましょう。

「With Rangeオブジェクト ~ End With」で、オプションボタンを設置するセル位置を指定できます。

Option Button オブジェクトは、Shapeオブジェクトの1つ(描画と同じ)ですので、設置するシート名は必ず指定します。

「Left、TOP、Width、Height」は設置セルでの(起点)位置を指定しています。このコード表示はセルの左上角を起点にしています。

ところで、オプションボタンは1つでは何もできません。なので、

選択肢が3つとして、ボタンを3つ設置してみます。

失敗するVBAコード

VBA
Sub フォームCNTLオプションボタン2()
'B2からB4セルにオプションボタンを設置
        With Range("B2:B4")
            ActiveSheet.OptionButtons.Add(.Left, .Top, _
                            .Width, .Height).Select
        End With
End Sub
vbaopbtnform002

設置するセル位置をB2からB4に指定しましたが、結果、これではオプションボタンは3つ設置されません。

つまり、フォームCNTLオプションボタン1」のコードをセル位置を変えて3回実行するという事です。

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

これでオプションボタンが3つ作成されました。

ボタンクリックでは、3つの中で連携して ” どれか1つの選択 ” 機能がしっかり働いています。

vbaopbtnform004
vbaopbtnform005
vbaopbtnform006

とにかくオプションボタンをVBAコードでシートに設置する方法を知ることは出来ました。

オプションボタンをシートに動的に設置する

vbaopbtnform012

実用時にオプションボタンを利用する場合、設置位置が固定されているのなら、最悪シート上の操作でオプションボタンを設置することが出来ます。

むしろ、ケースバイケースで使用するオプションボタンの設置位置が変わる場合に、何とか対処したいということでしょう。

つまり、動的にオプションボタンを設置するVBAコードを作ることが重要ということです。

「Sheet2」のセルB2からF10の範囲にオプションボタンを設置

Sheet2のセルB2からF10の範囲の中に1つ置きにオプションボタンを設置するVBAコードです。

ループを使ってセル位置を変化させています。

設置するシートをアクティブにしておく必要はありません。例題では、Sheet2にオプションボタンを設置するようになっています。

VBA
Sub フォームCNTLオプションボタン4()
    Dim s, t As Long
'Sheet2のセルにオプションボタンを設置
        For s = 2 To 6 Step 2
            For t = 2 To 10 Step 2
                With Cells(t, s)
                    Worksheets("Sheet2").OptionButtons.Add(.Left, .Top, _
                                .Width, .Height).Select
                End With
            Next t
        Next s
End Sub
vbaopbtnform007

合計15個のオプションボタンを一度に作成することが出来ました。

「s」と「t」の変数の範囲を変化させることで、動的に設置することが出来ます。

オプションボタンの機能としては、15個のボタンで「どれか1つのみ」選択することが出来るようになっています。

vbaopbtnform008
vbaopbtnform009
vbaopbtnform010

オプションボタンのシート設置 まとめ

vbaopbtnform013

フォームコントロールのオプションボタンを、VBAコードによりシートに設置する方法を説明しました。

「うんうん 分かった」となりましたでしょうか?

けれども残念ながら、この説明では、全くまだオプションボタンが使えるようにはなっていません。

  • ボタンで選択した内容が値として何も反映されていません。
  • 15個のボタンでも5万個のボタンでも、これでは1つしか選択することが出来ません。
  • 1度作成したあと、どのようにしてボタンを削除できるのか分かりません。

などなど、解決することがまだたくさんあります。

次回以降順番に問題解決していきます。

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

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

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

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

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

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

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

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

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min