[VBA] エクセルマクロでステータスにより背景色を変更する(複数色可)

0 件のコメント




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



0 件のコメント :

コメントを投稿