゚Д゚)こんばんは、こんにちは、おはようございます。今回は、フォームコントロールで作成した「オプションボタン」をマクロとVBAで操作してみようと思います。言っても背景色の変更です。使用に必要な道具Excel「それ、いらね~」ってものから「やっぱり!いる!」って思うこともあるかと。「フォームコントロール」のオプションボタンを3つ作成します。作成方法は以下の順番に作成していきます。開発タブ内の挿入コマンドのメニューにある「フォームコントロール」の「オプションボタン」を選択しましょう。➊オプションボタンを作成したい場所が決まったら、マウスの左ボタン押して右下へ➋ドラッグ(ボタンを押したまま)させます。➌任意の場所でマウスのボタンから指を外しましょう、オプションボタンが作成されました。オプションボタン「フォームコントロール」の設定オプションボタンの書式設定の表示の仕方になります。➊作成したオプションボタンにマウスポインタを近づけて手のマークが出たら、➋マウスを右クリックしましょう。➌オプションボタンが選択されました。➍さらにマウスの右クリックを行い➎メニューを表示させて➏コントロールの書式設定を選択しましょう。➐「コントロールの書式設定」ダイアログが表示されます。リンクセルを設定します、➊を左クリックして➋の入力バーを表示させます。➌リンクさせるセルを選択しましょう、左クリックをして➍決定しておきましょう。➎場所が良ければ左クリックしましょう。➏リンクするセルの入力欄に表示されている値ならば➐「OK」ボタンを押しましょう。➑オプションボタンを➒選択して➓リンクするセルに数値が表示されたら出来上がりになります。同様にして後2つ、オプションボタンを作成しておきましょう。(はてな君)作っちゃお!オプションボタンの名前を取得(はてな君)どうやったら、教えてくれるんだろう?(えっちゃん)まずは、名前を取得するコードを伝えるよ!色を配色するには、対象となるオブジェクト名が必要になります。「フォームコントロール」のオプションボタンの名前を取得するには次の方法が便利です。動的配列を使用する(はてな君)動的配列ってなに?(えっちゃん)簡単に言うと建てる前のマンション(はてな君)?(えっちゃん)世帯数に合わせて建てたら全部の部屋に住めるでしょう。(はてな君)そっか~!VBAで一つ一つ名前を取得しても大丈夫なのですが、せっかくなのでシート上にあるオートシェイプ(オプションボタン)すべてを調べてみたいと思います。最初にシートの上にあるオートシェイプ数を数えます。ActiveSheet.Shapes.Countで変数にアクティブ状態のシートにある数が変数に代入されます。次に配列(動的配列)を宣言しておきます。動的配列宣言を行うときは要素数は指定しませんので()のみの記述になります。動的配列にする理由は、要素数が増加した場合に自動的に対処するためです。Stringただし、このままでは幾つの配列が指定されているのかが不明です。そのためには、要素数を代入しなくてはなりません。動的配列の要素数を変更させるためにはRedimステートメントを使用します。変数2(変数1)を記述します。あとは、作成した動的配列にシート上にあるオートシェイプの名前を代入するのみです。オートシェイプの名前を取得するには.Nameプロパティを使用します。Worksheets(シート名1).shapes(変数).Nameで取得できます。今回は、動的配列にも指定した変数1(オートシェイプの数)だけ名前を取得したいので、変数1まで数をカウントさせるために変数3を整数型Integerで宣言をします。Integer次に繰り返しの構文であるFor~Nextを用いて動的配列にシート上のオートシェイプの名前を代入させていきます。変数3これで動的配列にシート上のオプションボタン(オートシェイプ)の名前すべてが取得できます。動的配列に代入した値(オプションボタンの名前)ですが、Msgboxを活用し目視で確認するのも良いのですが、今回は記述ミスをなくすために別シートに転記します。先ほど使用した変数3と変数2(変数3)を再活用します。転記する際は繰り返し構文のFor~Nextを用います。変数3上記でオブジェクト名の名前が所得できます。上図ではシート名”公園”の中にあるオプションボタンのオブジェクト名をシート名”倉庫”のセルの1列目、1行目から3行目に転記させました。この名前を用いて色を付けていきたいと思います。上記のコードになります。Sub判断基準と色の設定方法オプションボタンのクリックで判断をするオプションボタンは、ONかOFFでの判断になります。そこで今回は「ON」のときに配色するようにしてみます。Ifちなみに「フォームコントロール」のオプションボタンの「ON」の状態時は「1」を「OFF」の状態時は「-4146」の値が戻り値になります。今回はコードには「ON」時の「xlOn」を使用しております。「OFF」時は「xlOff」になります。色の設定にWorksheetメソッドを使用するWorksheet.OptionButtonsを使用して配色をしていきます。単純に書くとオブジェクト.Interior.Color=色番号になります。Excel2007以降のバージョンでは約1600万色の色彩に対応しましたのでColorプロパティで進めてみたいと思います。.Interior.Colorは背景色を指定する場合に活用します。背景色の指定は16進数で設定してみました。「塗りつぶし」は.Colorプロパティにはありません。代わりに.ColorIndexで指定をします。xlNoneのように記述します。マクロの作成オプションボタンのマクロの登録コードを記述する前準備を行います。➊オプション1を「右クリック」して、➋表示されたメニューの中の➌「マクロの登録」を選択し「左クリック」してください、➍マクロの登録ダイアログが表示されます。マクロ名に「オプション1_Click」と表示されていることが確認できましたら➎「新規作成」のボタンを押してください。ダイアログの表示が消え、代わりにVBAエディタが起動します。Subと記述されてました。同様にオプションボタン2と3も➊~➎の手順でコードを作成しておきます。➐のようにオプションボタンの1~3を作成しました。それでは、コードを作成しましょう。Sub今回の変数宣言は、Worksheetオブジェクトの記述を短くするための宣言のみになります。この宣言をするとワークシート名を幾たびも記述しなくて済みます。Set構文で代入をしておきましょう。Withで記述の省略をしております。このWith構文を使用すると、何度も同じオブジェクト名を記述しなくてもよくなる点です。If上記はWorksheets(“公園”)は5回記述しています。With構文を使用しますと以下のようになります。WithWorksheets(“公園”)の記述が1回で終わります。いかがでしょうか便利だと思います。それではコードの説明になります。’シートオブジェクトの変数を宣言しています。’マクロの登録時についていたプロシージャ名です。Worksheets(“公園”)’シート名の記述をなくすために変数に代入しています。’さらに短くしたシート名を1回で済ませるようにWith構文でくくりました。’IF~構文を用いて判断をさせています。xlOn」真の場合は以下の処理をします。