この記事を読むのに必要な時間は約 9 分です。
VBAでオプションボタンとチェックボックスを制御する方法です。
前回は、チェックボックスを選択したデータの集計方法について紹介しました。
チェックがたくさんあると、一括でチェックを切り替えたり、場合によっては選択できないようにしたいこともあります。
入力項目を制御できると便利ですし、使う側のストレスを減らすことも出来ます。
例えば、「その条件なら本当はこの項目は選べない」というとき、保存したり送信するタイミングでエラーになることがありますよね。
時間をかけて真剣に選んだものが無駄になるんです。
「だったら早く言ってよ!!」
と、心の中で何度ツッコミしたことか・・・(笑)
チェックボックスが30個あったら、1つひとつ選んでいくのもメンドクサイですし。
一括選択/解除するボタンがあれば操作が楽になります。
そんな悩みを解決できるよう、チェックボックスを制御する方法について書いています。
目次(リンク)
VBAで、オプションボタンとチェックボックスの値を制御する
帳票出力をする架空のシステムを例にしてみます。
帳票を印刷するか、メールで送付する場合にはPDFを出力して、登録されているメールアドレス宛にメールが送信される感じです。
ココでは、「メールで送付する」と「印刷する」ボタンを切り替えたとき、対応しているチェックボックスの値や入力可/不可を切り替えられるようにします。
VBAということで開発タブを使うんですが、表示されていますか?
もしまだであれば、表示方法はこちらの記事の最初に書いていますのでご参考にどうぞ。
フォームコントロールで作ってみる
チェックボックスにも2種類あります。
フォームコントロールとActiveXコントロールです。
まずは使うボタンを入れていく
まずは前回の記事でも紹介した、フォームコントロールから。
開発タブの「挿入」から、使うボタンを入れていきます。
フォームコントロールのオブジェクトなら、右クリックから「テキストの編集」で文字を修正できます。
編集できました。
印刷側のボタンも入れていきます。
リンクするセルの設定です。
フォームコントロールのボタンが選択されているかどうかって、どうやって判断するんでしょうか。
それはリンクするセルで設定されているセルの値を見て判断します。
E10のセルをリンクさせてみます。
既に2つのオプションボタンをシート内に作っていたので、どちらのボタンが選択されているのかは、E10セルの値に反映されるようになりました。
チェックボックスについても、リンクするセルを設定します。
フォームコントロールの処理についてソースコードを書く
値を制御するソースコードを書いていきます。
ボタンを右クリックして、マクロの登録、
「新規作成」ボタンを押すとエディターの画面が表示されます。
オプションボタンがクリックされたときの、処理を書く枠が出来ました。
「メールで送付する」をクリックしたときには、「本紙」と「お客様控え」のチェックボックスが選択されていない状態にしたいです。
リンクするセルをI10、I11に設定したので、「= False」。
逆に「印刷する」ボタンを選択したときには、チェックボックスを選択します。
「= True」で選択された状態になります。
チェックボックスを不活性に出来ないので、値を常にFALSEにする
「メールで送付する」が選択されているときに、印刷側のチェックボックスを押されても、選択されないようにします。
ActiveXコントロールであれば不活性にすればいいんですが、フォームコントロールだと不活性に出来ません。
代わりに、クリックされたとき「False」を入れます。
利用者にとって不要な情報なので、文字の色を変えて目立たないようにします。
ActiveXコントロールで作ってみる
フォームコントロールのボタンを入れてきたように、ActiveXコントロールのボタンを入れてみました。
ボタンの文字列を変えるには、プロパティのCaptionを変更します。
さて、クリックしたときの処理を書いていきます。
デザインモードに切り替え、右クリックから「コードの表示」を選択します。
オプションボタンをクリックしたときの処理の枠が出来ました。
「メールで送付する」の処理なので、「本紙」と「お客様控え」の値をクリアして不活性にします。
チェックボックスのプロパティを変更する
「本紙」というチェックボックスを不活性にします。
そのチェックボックス、ソースコード上でどう表現すればいいんでしょうか。
チェックボックスを右クリックしてプロパティを見ると分かります。
オブジェクト名は「CheckBox1」となっています。
活性/不活性のプロパティはEnabled
通常はチェックボックスを操作できるので、
Enabled = True となっています。
ということは、不活性ならTrueの反対、Falseですね。
値はValue、選択されていればTrue
選択されているかどうかは、Valueに設定されているもので決まります。
選択されていればTrue、されていなければFalseですね。
「印刷する」のボタンについても処理を書きます。
「メールで送付する」の処理をほとんどコピペです。
オプションボタンの選択を変更してみて、動作を確認してみます。
意図した通り、チェックのON/OFFと活性/不活性が切り替わりました。
まとめ:VBAでオプションボタンとチェックボックスを制御する方法
VBAでオプションボタンとチェックボックスを制御する方法でした。
フォームコントロールの場合、プロパティが無くて制御しづらいと思いますが、代替案で何とかなりました。
ActiveXコントロールだと制御しやすいけどセルの値とリンクしていません。
関数などで集計しづらいですし一長一短です。
その場面に適したほうを選んで使ってもらえればと思います。
最後までお読みいただき、ありがとうございました。