[VBA] エクセルマクロでステータスにより背景色を変更する(複数色可)
VBA ステータスにより背景色を変更する(複数色可)
目的
- ステータスの変更をキーに、対象行の指定列の背景色を変更する
仕様
- エクセルのマクロを利用する。
- キー列の変更により、対象行の色を変更する。(今回の場合はステータス列)
- 色を変化させる列を指定することにより、範囲内の列の色を変化させる。
プログラムソース
下記ソースを、シートオブジェクトに記載してください。(シートの対象列の変化をキーに色変更を実施するため、標準モジュールに記載しても動作しません。。おそらくですが(´・ω・`)
Option Explicit
'# ---------------------------------------------------------
'# 変数定義
'# ---------------------------------------------------------
'# 行:列情報
Private Const COL_NO_CHECK As Integer = 2 '# チェックする対象行を判断する列番号
Private Const COL_NO_TRIGGER As Integer = 6 '# 色を変化させるトリガーとなる列番号
Private Const COL_COLOR_START As Integer = 2 '# カラー変更開始列番号
Private Const COL_COLOR_END As Integer = 9 '# カラー変更終了列番号
Private Const ROW_SEARCH_START As Integer = 5 '# 開始行番号
'# ステータス情報
Private Const STATUS_NONE As String = "未着手"
Private Const STATUS_NOW As String = "仕掛中"
Private Const STATUS_CHECK As String = "確認中"
Private Const STATUS_DONE As String = "完了"
'# ---------------------------------------------------------
'# ステータス変更により背景色を変更
'# ---------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
'# ステータス列以外が変更された場合は起動しない
If Target.Column <> COL_NO_TRIGGER Then
Exit Sub
End If
'# 変数宣言
Dim int_row_num As Integer '# 行番号
Dim str_status As String '# ステータス名
'# 初期化
int_row_num = ROW_SEARCH_START
'# 現在のシートを対象とする
With ActiveSheet
'# -----------------------------------------------------
'# 最終行まで、ステータスを確認しながら背景色変更
'# -----------------------------------------------------
Do While .Cells(int_row_num, COL_NO_CHECK).Value <> ""
'# ステータス情報取得
str_status = CStr(.Cells(int_row_num, COL_NO_TRIGGER).Value)
'# カラーチェンジ
If str_status = "" Or str_status = STATUS_NONE Then
'# 空欄または未着手の場合は背景は白色
Range(Cells(int_row_num, COL_COLOR_START), Cells(int_row_num, COL_COLOR_END)).Interior.ColorIndex = 2
ElseIf str_status = STATUS_CHECK Then
'# 仕掛中は背景を黄緑色
Range(Cells(int_row_num, COL_COLOR_START), Cells(int_row_num, COL_COLOR_END)).Interior.ColorIndex = 43
ElseIf str_status = STATUS_NOW Then
'# 仕掛中の場合は背景は赤
Range(Cells(int_row_num, COL_COLOR_START), Cells(int_row_num, COL_COLOR_END)).Interior.ColorIndex = 22
ElseIf str_status = STATUS_DONE Then
'# 完了の場合は背景はグレー
Range(Cells(int_row_num, COL_COLOR_START), Cells(int_row_num, COL_COLOR_END)).Interior.ColorIndex = 15
End If
'# 行番号を更新
int_row_num = int_row_num + 1
Loop
End With
End Sub
登録:
コメントの投稿
(
Atom
)


0 件のコメント :
コメントを投稿