ユーザーフォームに配置したコマンドボタンの文字色を条件に応じて変更したいと思いませんか?
Excel-VBAのForeColorプロパティとStaticステートメントを使うことで、コマンドボタンをクリックするたびに黒色文字と赤色文字が交互に表示できるようになります。
ForeColorプロパティ
エクセルに標準機能として用意されているVBA「ForeColorプロパティ」は、RGBの色番号を指定することで文字色を変更することができます。
文字色変更するVBAコード
まず基本となるユーザーフォームに配置したコマンドボタン1をクリックすると文字色を初期設定の「黒色」から「赤色」に変更するだけならば、下記のようにVBAコードを記述すれば簡単にできます。
Private Sub CommandButton1_Click()
UserForm1.CommandButton1.ForeColor = RGB(255, 0, 0)
End Sub
- コマンドボタン1がクリックされたら
- ユーザーフォーム1のコマンドボタン1の文字色を赤色にする
- マクロ記録終了

これで赤色の文字に変更できるのですが、このVBAコードには色を戻すことはできないので、次に戻せるようにVBAコードを追加します。
IFステートメント追加で戻せるようにする
それでは、次に黒色文字の時にクリックすると赤色文字になり、赤色文字の時は黒色文字に変更できるようにするには、条件分岐のIFステートメントを追加します。
Private Sub CommandButton1_Click()
Static onoff As Boolean
If onoff Then
CommandButton1.ForeColor = RGB(0, 0, 0)
Else
CommandButton1.ForeColor = RGB(255, 0, 0)
End If
onoff = Not onoff
End Sub
- コマンドボタン1がクリックされたら
- Staticステートメントを宣言してonoffという変数名で真偽を判定する
- もし変数名onoffの状態が
- コマンドボタン1の文字色が黒色だったら
- コマンドボタン1の文字色を赤色にする
- そうではなかったら
- 赤色ならば黒色へ、黒色ならば赤色にする
- マクロ記録終了
このようなVBAコードを記述すると、コマンドボタンをクリックするたびに文字色が黒色と赤色を繰り返し表示されるようになります。
Staticステートメント
マイクロソフトのサイトを見るとこのように記載されています。
プロシージャ レベルで変数を宣言し、ストレージ領域を割り当てるために使用します。 Static ステートメントで宣言された変数は、コードが実行されている間はその値を保持します。
マイクロソフト公式サイトより引用
難しいことが書いてありますが、簡略すると・・・
好きな名前で変数を宣言(ここではonoff)してEnd Ifまでは、状態が有効になっているので、文字色が今何色なのかを見続けることができています。
そして真偽を判定でき「Boolean (ブール型変数)」を使う事で、黒色の場合・赤色の場合と判定ができるようになります。
そして最後に「変数」=Not「変数」でスイッチのように入り切りできるようになるので、黒文字と赤文字がクリック毎に切り替わるようになります。


よく見られているページ
-
エクセルの計算式の値を数字として読み取るVALUE関数
-
VBAの画面のちらつきがたった1行で解決して処理高速化する方法
-
COUNT関数を使って参加人数を自動的に数えるエクセル関数使用法
-
エクセルの時刻表示を0:00ではなく24:00にする方法
-
チェックボックスでチェック有と無しそれぞれの処理を変える方法
-
1クリックで上書き保存してエクセルファイルを閉じる方法
-
エクセル計算式が#VALUE!エラーになったセルを空欄にする方法
-
条件に一致したセルを繰り返し探してVBAで文字色を変える方法
-
コマンドボタンの色をクリックするたびに黒色と赤色を入れ替える方法
-
エクセルシートの保護したらマクロエラーになった時のVBA対処法


新着ページ