「Excel」VBA!オプションボタンの背景色をオシャレにする!

 

( ノ゚Д゚)こんばんは、こんにちは、おはようございます。おやすみなさい! とっちーです。

「フォームコントロール」や「ActiveXコントロール」、「フォーム」等種類もあるのですが、

今回は、フォームコントロールで作成した「オプションボタン」をマクロとVBAで操作してみようと思います。と言っても背景色の変更です。

材料

「フォームコントロール」のオプションボタン3個

使用に必要な道具

Excel

「それ、いらね~」ってものから「やっぱり!いる!」って思うこともあるかと。

 

 

 

オプションボタン「フォームコントロール」の作成

 

 

「フォームコントロール」のオプションボタンを3つ作成します。

 

作成方法は以下の順番に作成していきます。

 

 

 

 

開発タブ内の挿入コマンドのメニューにある「フォームコントロール」の「オプションボタン」を選択しましょう。

 

 

 

 

➊オプションボタンを作成したい場所が決まったら、マウスの左ボタン押して右下へ➋ドラッグ(ボタンを押したまま)させます。

 

➌任意の場所でマウスのボタンから指を外しましょう、オプションボタンが作成されました。

 

オプションボタン「フォームコントロール」の設定

 

 

 

 

 

オプションボタンの書式設定の表示の仕方になります。

 

➊作成したオプションボタンにマウスポインタを近づけて手のマークが出たら、➋マウスを右クリックしましょう。➌オプションボタンが選択されました。

 

➍さらにマウスの右クリックを行い➎メニューを表示させて➏コントロールの書式設定を選択しましょう。➐「コントロールの書式設定」ダイアログが表示されます。

 

 

 

リンクセルを設定します、➊を左クリックして➋の入力バーを表示させます。

 

➌リンクさせるセルを選択しましょう、左クリックをして➍決定しておきましょう。➎場所が良ければ左クリックしましょう。

 

➏リンクするセルの入力欄に表示されている値ならば➐「OK」ボタンを押しましょう。

 

➑オプションボタンを➒選択して➓リンクするセルに数値が表示されたら出来上がりになります。

 

同様にして後2つ、オプションボタンを作成しておきましょう。

 

 

(はてな君)
作っちゃお!

 

オプションボタンの名前を取得

 

(はてな君)
どうやったら、教えてくれるんだろう?
(えっちゃん)
まずは、名前を取得するコードを伝えるよ!

 

 

 

色を配色するには、対象となるオブジェクト名が必要になります。「フォームコントロール」のオプションボタンの名前を取得するには次の方法が便利です。

 

動的配列を使用する

 

(はてな君)
動的配列ってなに?
(えっちゃん)
簡単に言うと建てる前のマンション
(はてな君)
(えっちゃん)
世帯数に合わせて建てたら全部の部屋に住めるでしょう。
(はてな君)
そっか~!

 

VBAで一つ一つ名前を取得しても大丈夫なのですが、せっかくなのでシート上にあるオートシェイプ(オプションボタン)すべてを調べてみたいと思います。

 

 

最初にシートの上にあるオートシェイプ数を数えます。

 

 

変数1 = ActiveSheet.Shapes.Countで変数にアクティブ状態のシートにある数が変数に代入されます。

 

 

次に配列(動的配列)を宣言しておきます。動的配列宣言を行うときは要素数は指定しませんので()のみの記述になります。

 

 

動的配列にする理由は、要素数が増加した場合に自動的に対処するためです。

 

Dim 変数2() As String

 

ただし、このままでは幾つの配列が指定されているのかが不明です。

 

そのためには、要素数を代入しなくてはなりません。

 

 

動的配列の要素数を変更させるためにはRedimステートメントを使用します。

 

今回はオートシェイプの数を代入するために、Redim 変数2(変数1)を記述します。

 

 

あとは、作成した動的配列にシート上にあるオートシェイプの名前を代入するのみです。

 

オートシェイプの名前を取得するには.Nameプロパティを使用します。

 

Worksheets(シート名1).shapes(変数).Nameで取得できます。

 

今回は、動的配列にも指定した変数1(オートシェイプの数)だけ名前を取得したいので、変数1まで数をカウントさせるために変数3を整数型Integerで宣言をします。

 

Dim 変数3 As Integer

 

次に繰り返しの構文であるFor~Nextを用いて動的配列にシート上のオートシェイプの名前を代入させていきます。

 

For 変数3 = 1 To 変数1

変数2(変数3) =Worksheets(シート名1).shapes(変数3).Name

Next 変数3

 

これで動的配列にシート上のオプションボタン(オートシェイプ)の名前すべてが取得できます。

 

取得した値を別の場所へ転記

 

 

動的配列に代入した値(オプションボタンの名前)ですが、Msgboxを活用し目視で確認するのも良いのですが、今回は記述ミスをなくすために別シートに転記します。

 

 

先ほど使用した変数3と変数2(変数3)を再活用します。

 

 

また、転記する際は繰り返し構文のFor~Nextを用います。

 

For 変数3 = 1 To 変数1

Worksheets(シート名2).Cells(変数3, 1) = 変数2(変数3)

Next 変数3

 

上記でオブジェクト名の名前が所得できます。

 

 

 

上図ではシート名”公園”の中にあるオプションボタンのオブジェクト名をシート名”倉庫”のセルの1列目、1行目から3行目に転記させました。

 

この名前を用いて色を付けていきたいと思います。

 

上記のコードになります。

 

 

 

判断基準と色の設定方法

 

 

オプションボタンのクリックで判断をする

 

オプションボタンは、ONかOFFでの判断になります。そこで今回は「ON」のときに配色するようにしてみます。

 

If Worksheets(“公園”) .OptionButtons(“Option Button 1”).Value = xlOn Then

End If

ちなみに「フォームコントロール」のオプションボタンの「ON」の状態時は「1」を「OFF」の状態時は「-4146」の値が戻り値になります。今回はコードには「ON」時の「xlOn」を使用しております。「OFF」時は「xlOff」になります。

 

色の設定にWorksheetメソッドを使用する

 

 

Worksheet.OptionButtonsを使用して配色をしていきます。

 

構文

 

Worksheets(シート名).OptionButtons(“Option Button 番号”).Interior.Color = 色番号

 

 

単純に書くとオブジェクト.Interior.Color=色番号になります。

 

Excel2007以降のバージョンでは約1600万色の色彩に対応しましたのでColorプロパティで進めてみたいと思います。

 

.Interior.Colorは背景色を指定する場合に活用します。

 

背景色の指定は16進数で設定してみました。

 

ただし、「塗りつぶし」は.Colorプロパティにはありません。代わりに.ColorIndexで指定をします。

 

オブジェクト名.Interior.ColorIndex = xlNoneのように記述します。

 

マクロの作成

 

オプションボタンのマクロの登録

 

 

 

 

コードを記述する前準備を行います。

 

➊オプション1を「右クリック」して、➋表示されたメニューの中の➌「マクロの登録」を選択し「左クリック」してください、➍マクロの登録ダイアログが表示されます。

 

マクロ名に「オプション1_Click」と表示されていることが確認できましたら➎「新規作成」のボタンを押してください。ダイアログの表示が消え、代わりにVBAエディタが起動します。

 

コードウインドウ内には、Sub オプション1_Click()~ End Subと記述されてました。同様にオプションボタン2と3も➊~➎の手順でコードを作成しておきます。

 

➐のようにオプションボタンの1~3を作成しました。

 

それでは、コードを作成しましょう。

 

 

 

 

 

今回の変数宣言は、Worksheetオブジェクトの記述を短くするための宣言のみになります。この宣言をするとワークシート名を幾たびも記述しなくて済みます。

 

必ずSet構文で代入をしておきましょう。しないと動きません。

 

さらにWith~End Withで記述の省略をしております。

 

このWith構文を使用すると、何度も同じオブジェクト名を記述しなくてもよくなる点です。

 

 

If Worksheets(“公園”).OptionButtons(“Option Button 1”).Value = xlOn Then
  

  Worksheets(“公園”).OptionButtons(“Option Button 1”).Interior.Color = &HFFCCCC
  Worksheets(“公園”).OptionButtons(“Option Button 2”).Interior.ColorIndex = xlNone
  Worksheets(“公園”).OptionButtons(“Option Button 3”).Interior.ColorIndex = xlNone

  Worksheets(“公園”).Range(“a1”).Value = 1

Else
End If

 

上記はWorksheets(“公園”)は5回記述しています。With構文を使用しますと以下のようになります。

 

With Worksheets(“公園”)

If .OptionButtons(“Option Button 1”).Value = xlOn Then

.OptionButtons(“Option Button 1”).Interior.Color = &HFFCCCC
.OptionButtons(“Option Button 2”).Interior.ColorIndex = xlNone
.OptionButtons(“Option Button 3”).Interior.ColorIndex = xlNone

.Range(“a1”).Value = 1

Else
End If
End With

 

Worksheets(“公園”)の記述が1回で終わります。いかがでしょうか便利だと思います。

 

それではコードの説明になります。

 

Option Explicit

Dim w1 As Worksheet    ’シートオブジェクトの変数を宣言しています。
Dim w2 As Worksheet

Sub オプション1_Click()   ’マクロの登録時についていたプロシージャ名です。
Set w1 = Worksheets(“公園”)’シート名の記述をなくすために変数に代入しています。
Set w2 = Worksheets(“倉庫”)
With w1          ’さらに短くしたシート名を1回で済ませるようにWith構文でくくりました。

If .OptionButtons(“Option Button 1”).Value = xlOn Then ’IF~構文を用いて判断をさせています。

                             ’Worksheets(“公園”).OptionButtons(“Option Button 1”).Value が、押されたとき「 xlOn」真の場合は以下の処理をします。

.OptionButtons(“Option Button 1”).Interior.Color = &HFFCCCC     ’オプション1のボタンの背景色「.Interior.Color」は「=」、色(16進数)「 &HFFCCCC 」にします。
.OptionButtons(“Option Button 2”).Interior.ColorIndex = xlNone    ’オプション2のボタンの背景色「.Interior.ColorIndex」は「=」、塗りつぶしなし「xlNone 」にします。
.OptionButtons(“Option Button 3”).Interior.ColorIndex = xlNone          ’オプション3のボタンの背景色「.Interior.ColorIndex」は「=」、塗りつぶしなし「xlNone 」にします。

.Range(“a1”).Value = 1   ’リンクするセルを設定した場合は不要になるコードになります。設定しない場合などに記述を行いましょう。

Else ’’Worksheets(“公園”).OptionButtons(“Option Button 1”).Value が、押されたとき「 xlOff」偽の場合は以下の処理をします。今回はありません
End If ’IF構文を終了します。
End With ’With構文を終了します。
Set w1 = Nothing ’オブジェクト変数に代入した値をなくします。
Set w2 = Nothing
End Sub ’終わり

 

 

以上でオプションボタンの背景色の変更方法を終了します。

 

まとめ

 

オプションボタンの背景色をコードで変更させてみました。

 

コードで設定しなくても色の変更はできます。はい。あえてしてみたいと思ってしまいましたので。ついコードにしてみました。

 

ちなみにリンクするセルを指定させるより、コードで割り当てたると何かと好都合です。

 

今回は、「フォームコントロール」の「オプションボタン」を「VBA」で何かできるのかを試してみたものでした。

 

読んでいただき、誠にありがとうございます。

 

 

スポンサーリンク