フォームコントロールのオプションボタンを、VBAだけを使ってエクセルシートに設置する方法を説明します。
動的な設置を可能にして、シートでの手作業設置の手間を排除します。
こんにちは、じゅんぱ店長(@junpa33)です。
エクセルを使った業務では、そのシートにデータ入力のテンプレートを作成することも多くあるでしょう。
その時に使いたいのが、リボン「挿入」からツールボックスを表示させて、指定・設置する色んなコントロールツールではないでしょうか。
ツールボックスでは、「フォームコントロール」と「ActiveXコントロール」の2種類が表示されます。
2つの違いはザックリ言うと、このような感じです。
充実したプロパティからコントロールの動作を設定することが可能な「ActiveX」ただし、エクセルに特化しただけの技術ではないので、利用状態や環境によって不具合の可能性も否定できない。
シート上での操作では簡単楽々なのは「フォーム」、プロパティは便利というわけではなく、VBAコードからの動作管理も楽々とはいかない。ただ、エクセルで使うために作られているので「ActiveX」よりは安定感がある。
ということで今回は、
みんなさんが一番使いたい、「フォームコントロール オプションボタン」のエクセルシートへのVBAコード設置を説明します。
オプションボタンのシート設置記事編成
- ActiveXとフォームの両コントロールのオプションボタンをエクセルシートに手動設置する
- フォームコントロールのオプションボタンをエクセルシートにVBA配置する
コンテンツ
オプションボタンをシートに静的に設置する
オプションボタンのVBAコードによる使い方の解説で、実は、よく見かけるのが、ActiveXコントロールを使ってのユーザーフォームへの設置と操作設定に関するものです。
真逆パターンのフォームコントロールのエクセルシートへの設置と操作設定については、極々断片の解説のみで、ほぼ「なるほど」と理解できるものはありません。
なので、この記事では、フォームコントロールのシート設置の方法を、「最初から分かりやすく」を目標に説明して行きたいと思います。
兎に角、シートにオプションボタンを設置してみる
まず最初に、ここから説明していきます。オプションボタンをシートに静的に設置する方法です。
設置できるVBAコードはこちらです。
Option Explicit
Sub フォームCNTLオプションボタン1()
'B2セルにオプションボタンを設置
With Cells(2, 2)
ActiveSheet.OptionButtons.Add(.Left, .Top, _
.Width, .Height).Select
End With
End Sub
上のコードは、構文的に覚えておきましょう。
「With Rangeオブジェクト ~ End With」で、オプションボタンを設置するセル位置を指定できます。
Option Button オブジェクトは、Shapeオブジェクトの1つ(描画と同じ)ですので、設置するシート名は必ず指定します。
「Left、TOP、Width、Height」は設置セルでの(起点)位置を指定しています。このコード表示はセルの左上角を起点にしています。
ところで、オプションボタンは1つでは何もできません。なので、
失敗するVBAコード
Sub フォームCNTLオプションボタン2()
'B2からB4セルにオプションボタンを設置
With Range("B2:B4")
ActiveSheet.OptionButtons.Add(.Left, .Top, _
.Width, .Height).Select
End With
End Sub
設置するセル位置をB2からB4に指定しましたが、結果、これではオプションボタンは3つ設置されません。
つまり、「フォームCNTLオプションボタン1」のコードをセル位置を変えて3回実行するという事です。
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
これでオプションボタンが3つ作成されました。
ボタンクリックでは、3つの中で連携して ” どれか1つの選択 ” 機能がしっかり働いています。
とにかくオプションボタンをVBAコードでシートに設置する方法を知ることは出来ました。
オプションボタンをシートに動的に設置する
実用時にオプションボタンを利用する場合、設置位置が固定されているのなら、最悪シート上の操作でオプションボタンを設置することが出来ます。
むしろ、ケースバイケースで使用するオプションボタンの設置位置が変わる場合に、何とか対処したいということでしょう。
つまり、動的にオプションボタンを設置するVBAコードを作ることが重要ということです。
Sheet2のセルB2からF10の範囲の中に1つ置きにオプションボタンを設置するVBAコードです。
ループを使ってセル位置を変化させています。
設置するシートをアクティブにしておく必要はありません。例題では、Sheet2にオプションボタンを設置するようになっています。
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
合計15個のオプションボタンを一度に作成することが出来ました。
「s」と「t」の変数の範囲を変化させることで、動的に設置することが出来ます。
オプションボタンの機能としては、15個のボタンで「どれか1つのみ」選択することが出来るようになっています。
オプションボタンのシート設置 まとめ
フォームコントロールのオプションボタンを、VBAコードによりシートに設置する方法を説明しました。
「うんうん 分かった」となりましたでしょうか?
けれども残念ながら、この説明では、全くまだオプションボタンが使えるようにはなっていません。
- ボタンで選択した内容が値として何も反映されていません。
- 15個のボタンでも5万個のボタンでも、これでは1つしか選択することが出来ません。
- 1度作成したあと、どのようにしてボタンを削除できるのか分かりません。
などなど、解決することがまだたくさんあります。
次回以降順番に問題解決していきます。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。