VBAでユーザーフォームのラベルの文字色を条件に応じて変更する方法

ユーザーフォーム条件に応じてラベル色変更

基本的にはクリックをして何かプログラムを作動させることが少ない「ラベル」ですが、条件に応じてラベルの文字色が赤く目立たせたいと思ったことはありませんか?

例えば、重複した時や最高値・最低値などで注意を促す意味でも目立つようにするなど、色見本を使って色の基本を覚えておけば簡単に色を変えることができますよ。

もちろん、ラベルのプロパティでも簡単にパレットから色を指定できますが、固定化されて条件に応じて変化はできません。

目次

VBAを使いラベルの色を変える

ここでは、ユーザーフォームに配置したコマンドボタンを押すことにより、ラベルの色を変更する方法をご紹介しますが、RGBで色指定するか、colorIndex番号で指定するかの2種類あり、どちらを使っても同じです。

ラベルの色を赤色に変える

数式も条件も何もない基本的な色変更なので、プロパティの設定と同じようになります。

ラベル文字を赤色にするVBA

Private Sub CommandButton1_Click()
UserForm1.Label1.ForeColor = RGB(255,0,0)
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. ユーザーフォーム1に配置したラベル1の文字色を赤色にする
  3. マクロ記録終了
初期設定のラベルは黒色
初期設定のラベルは黒色

これでユーザーフォーム1に配置したラベル1の文字色(ForeColor)が赤色に(RGBを使って)コマンドボタンを押すと変わります。

RGBを使って赤色にラベル文字色変更
RGBを使って赤色にラベル文字色変更

条件によりラベルの色を変える

今度は「セルE3とセルE4の値が同じだったら」という条件に応じて、同じ場合は目立つように「赤色文字」異なる値の場合は変更なし(初期設定の黒色文字)とします。

条件に応じて文字色を変えるVBA

Private Sub CommandButton1_Click()
If Range(“E3”).Value = Range(“E4”).Value Then
UserForm1.Label1.ForeColor = RGB(255,0,0)
End If
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. もしセル「E3」の値とセル「E4」の値が同じだったら
  3. ユーザーフォーム1に配置したラベル1の文字色を赤色にする
  4. IFステートメント終了
  5. マクロ記録終了

このように記載すると、同じ値だったら赤色文字にして、そうでなかった場合は何もしないので黒色文字のままということになります。

2つの条件によりラベルの色を振り分けて変える

先ほどは、2つのセルの値が同じだっと時のみ色変更をいう例を書きましたが、今度はそうでなかった場合にも別の条件を加えることで、できることが増えます。

  • セルの値が80点以上の時、「合格」と表示して「青色文字
  • セルの値が30点以下の時、「不合格」と表示して「赤色文字

上記条件を反映したVBAコードを書くと以下のようになります。

条件に応じて処理を振り分けるVBA

Private Sub CommandButton1_Click()
If Cells(3, 5).Value >= 80 Then
MsgBox “合格”
UserForm1.Label1.ForeColor = RGB(0,0,255)
ElseIf Cells(3, 5).Value <= 30 Then
MsgBox “不合格”
UserForm1.Label1.ForeColor = RGB(255, 0, 0)
End If
End Sub

解説
  1. コマンドボタン1がクリックされたら
  2. もし、セルE3の値が80以下だったら
  3. 「合格」とメッセージを表示する
  4. ユーザーフォーム1に配置したラベル1の文字色を「青色」にする
  5. そうではなく、セルE3の値が30以下だったら
  6. 「不合格」とメッセージを表示する
  7. ユーザーフォーム1に配置したラベル1の文字色を「赤色」にする
  8. IFステートメント終了
  9. マクロ記録終了

ここではセルの値を示すCellsを使用したので、3行目・5列目となり、セルE3を指示していますが、Range(“E3”)と置き換えても問題なく、同じ意味になります。

そして、ElseIfで2つ目の条件を付けて色分けをすることの方が実用的ですよね。

この条件でC3~C12まで順番に繰り返し色変更処理をする、より実践的な方法はマスターしたほうがいいですよ。

判定評価が2つでしたが、通知表みたいに5段階評価したいとなると、If~Thenでもできないことは無いですが、VBAコードがすごく長くなってしまうので、スッキリさせる条件分岐するSelect Caseステートメントを使いましょう。

色見本(ColorIndex一覧)

ColorIndex RGB 16進数 ColorIndex RGB 16進数
1 RGB(0,0,0) #000000 29 RGB(128,0,128) #800080
2 RGB(255,255,255) #ffffff 30 RGB(128,0,0) #800000
3 RGB(255,0,0) #ff0000 31 RGB(0,128,128) #008000
4 RGB(0,255,0) #00ff00 32 RGB(0,0,255) #0000ff
5 RGB(0,0,255) #0000ff 33 RGB(0,204,255) #00ccff
6 RGB(255,255,0) #ffff00 34 RGB(204,255,255) #ccffff
7 RGB(255,0,255) #ff00ff 35 RGB(204,255,204) #ccffcc
8 RGB(0,255,255) #00ffff 36 RGB(255,255,153) #ffff99
9 RGB(128,0,0) #800000 37 RGB(153,204,255) #99ccff
10 RGB(0,128,0) #008000 38 RGB(255,153,204) #ff99cc
11 RGB(0,0,128) #000080 39 RGB(204,153,255) #cc99ff
12 RGB(128,128,0) #808000 40 RGB(255,204,153) #ffcc99
13 RGB(128,0,128) #800080 41 RGB(51,102,255) #3366ff
14 RGB(0,128,128) #008080 42 RGB(51,204,204) #33cccc
15 RGB(192,192,192) #c0c0c0 43 RGB(153,204,0) #99cc00
16 RGB(128,128,128) #808080 44 RGB(255,204,0) #ffcc00
17 RGB(153,153,255) #9999ff 45 RGB(255,153,0) #ff9900
18 RGB(153,51,102) #993366 46 RGB(255,102,0) #ff6600
19 RGB(255,255,204) #ffffcc 47 RGB(102,102,153) #666699
20 RGB(204,255,255) #ccffff 48 RGB(150,150,150) #969696
21 RGB(102,0,102) #660000 49 RGB(0,51,102) #003366
22 RGB(255,128,128) #ff8080 50 RGB(51,153,102) #339966
23 RGB(0,102,204) #0066cc 51 RGB(0,51,0) #003300
24 RGB(204,204,255) #ccccff 52 RGB(51,51,0) #333300
25 RGB(0,0,128) #000080 53 RGB(153,51,0) #993300
26 RGB(255,0,255) #ff00ff 54 RGB(153,51,102) #993366
27 RGB(255,255,0) #ffff00 55 RGB(51,51,153) #333399
28 RGB(0,255,255) #00ffff 56 RGB(51,51,51) #333333

16進数はワードプレスプラグイン「TinyMCE Advanced」のテーブルに使用するコードから引用しています。

目次