知識の倉庫の整理はてなブログからワードプレスに引っ越しました。ここでは中小企業診断士の勉強記や経理、派遣社員として働いて気づいたこと、その他にプログラミング関連やVBAについて思ったことを書いています。現在はJavaScriptを勉強中。VBAJavaScript自己紹介サイトマップExcelVBAでシートにあるフォームコントロールのボタンの文字色を変更する方法2019.02.10Excelで普段何気なく使っているボタンですが、このボタンに書かれている文字の「色」から、どんな「役割」があるのかがなんとなく識別できるのではないでしょうか。文字色の基本は「黒」です。普段の日常生活でも書類にボールペンやシャーペンで自分の名前を書いたりすることもあるかと思います。そのようにExcelのシートに最初に入力した時に表示される文字列の色は黒です。Excelのリボンに各種設定されたボタンに付随している文字列もほとんどが黒です。一方で文字色に設定される色で黒以外でもすぐに役割がわかるのが「青色」です。パソコンで使われる文字色の「青」で多くの人がイメージするのが「リンク」ではないでしょうか。青色、もしくは水色に近い青色の文字があったら、「何かのページに繋がっているのかな」と考える人が多いかと思います。何らかの注意書きや強調は「赤色」を使ったりします。他にも文字に設定できる色はたくさんありますが、それぞれの文字色にその人ごとのイメージがあるでしょう。同様に、フォームのボタンでもシートに設置したボタンでも状況によってそのボタンの文字色が「グレー」になっていると、「あぁ、このボタンは今は使えないんだな」という風に識別している人が多いのではないでしょうか。以下の前回の過去記事では次のように書いていました。今回のコードではフォームコントロールを形として「無効」にすることはできますが、同時に文字色までは変えることはできません。ActiveXコントロールだとEnabled=Falseにすると文字色もグレーになって無効になったことがわかりやすいのですが、フォームコントロールだと自動では文字色は変更されません。そのため、必要であればフォームコントロールの文字色を変更するコードが別途必要になります。上記の過去記事ではシート上に設置するフォームコントロールを「無効」にする方法について書きました。確かに「無効」にはできるんですが、それを見る人がわかりやすいようにボタンの文字色を「グレー」もしくは「灰色」にする、という処理まではできていませんでした。シート上に設置するボタンにおいてActiveXコントロールだと、コードを使って無効にすれば自動的にそのコントロールの文字色も灰色になります。フォームコントロールのボタンの場合だと仕様のためか自動的には文字色は灰色にはなりません。そこで今回は、ExcelVBAを使ってシートに設置したフォームコントロールのボタンの文字色を変更する方法について整理していってみます。目次ExcelVBAでシートにあるフォームコントロールのボタンの文字色を変更するコードシート上のフォームコントロールのボタンの文字色を変更する上での注意点まとめあわせて読みたいExcelVBAでシートにあるフォームコントロールのボタンの文字色を変更するコード結論としては次のコードになります。以下のコードの動作を確認した環境はExcel2013になります。Sub順番にコードの解説をしていきます。Each...Nextステートメントでシート上にあるフォームコントロールのボタンを順番に見ていきます。その中でそのボタンの状態ごとに文字色を変えていく、というコードになります。詳しく見ていくと、2行目で変数cを宣言。Sheets(“Sheet1”).Shapesで「Sheet1」シート上にある全ての描画オブジェクトを変数cに順番に格納していきます。Thenでシート名が「Sheet1」シートを指します。加えてそのシート内のオブジェクトが格納された「c」からNameプロパティでオブジェクト名を取得。取得したオブジェクト名に該当するオブジェクトをDrawingObjectで個別に選択。Enabled=Falseで、指定したオブジェクトのEnabledプロパティがFalseであればIf文の中に入る、という条件文になっています。15では、ボタンのフォントの文字色を15(ここでは灰色)に変更します。EnabledプロパティがTrueの場合に適用される条件になります。1では、ボタンのフォントの文字色を1(ここでは黒色)に変更します。Each...Nextステートメントに対応しており、次のオブジェクトを変数cに格納して再度4行目に戻って繰り返す、というコードになります。今回のコードの注意点としては、コードを実行できるフォームコントロールは「ボタン」だけになります。フォームコントロールのボタンとはActiveXコントロールでいうところの「コマンドボタン」になります。15という風に、そのボタン内にある「Font」オブジェクトを指して色を変更するようにしています。そのため、最初から「文字を設定できない」とか「文字がない」フォームコントロール、例えばチェックボックスやスピンボタン等で上記のコードを使おうとするとエラーになってしまいます。eachを使わないか、もしくはIf文で特定のボタンだけ指定するようにした方が良いでしょう。フォームコントロールの「ラベル」は文字を設定できるので、これも同様のコードで文字色を変更できるかのように思えます。試してみたのですが、今回のコードで文字色を変更しようとするとエラーになってしまいました。ラベルなどのコントロールは文字を設定できるので別のコードを使えば変更できるのかもしれませんが、とりあえず自分が試してみた範囲、今回のコードではラベルの文字色は変更できませんでした。まとめインターネットでExcelVBAを使ったボタンの文字色の変更方法について調べてみると、目にする情報のほとんどが「フォーム」の「コマンドボタン」の文字色の変更方法についてです。今回の記事のように、ExcelVBAを使ってシートにあるフォームコントロールのボタンの文字色の変更方法についてのまとまった情報は、自分の調べた範囲ではちょっと見つけらなかったです。自分の探し方が悪かったり、気づいていないだけという可能性も十分あり得ます。以下の過去記事でも書いたのですが、そもそもシートに設置するフォームコントロールは「仕様的に無効にはできない」から、それに伴ってボタンの文字色も変更する必要はない、もしくはできないだろう、と多くの人が考えていたのではないでしょうか。確かに気持ちはわかります。「仕様でできない」のであれば、わざわざ無理をしなくても代替案として「フォームを使えばいい」わけなので。言うものの、前回の過去記事の内容と今回の記事の文字色の変更方法から、シート上に設置するフォームコントロールのボタンを無効にして文字色も変更することができる、ことは確認できました。シートを使ったシステムでフォームコントロールのボタンを使う時も、状況によってユーザーを上手く誘導できるようになるのではないかと思います。コメントをキャンセルメールアドレスが公開されることはありません。