■ツールの概要
「タスク進捗度表示ツール」の概要を示す。
①「タスク名」列および「進捗度(%)」列に値を入力する。
②「基準色」(P3セル)に任意の塗りつぶし色を指定する。
③「色塗り」ボタンを押下すると、各タスクの「進捗度(%)」の値に応じて、「基準色」で設定した色を「進捗ステータス」列に塗る。
■制約事項・前提条件
・Excelのシート名は「main」とする。
・「進捗ステータス」は10分割とし、「進捗度(%)」に記入した値÷10の結果分色を塗る。
なお、小数点以下は切り捨てとする。
(例)進捗度:83%の場合
83÷10=8(小数点以下は切り捨て)
→8セル分の色を塗る
・「進捗度(%)」は0~100までの値とする。
0~100以外の値が入力された場合は、エラーとしてその時点で色塗り処理を終了する。
・プログラムの実装は、「ThisWorkbook」とする。
■プログラム設計
「タスク進捗度表示ツール」のプログラム設計を以下に示す。
▼定数一覧
「タスク進捗度表示ツール」にて使用する定数を以下の表に示す。
定数 | 値 | 概要 |
---|---|---|
START_TASK_ROW | 3 | タスク開始行 |
TASK_COL | 2 | 「タスク名」列 |
TASK_STATUS_COL | 3 | 「進捗度(%)」列 |
START_COLOR_COL | 4 | 「進捗ステータス」列 |
STANDARD_COLOR_ROW | 3 | 「基準色」行 |
STANDARD_COLOR_COL | 16 | 「基準色」列 |
COLOR_DEFULT_WHITE | 16777215 | 色コード:塗りつぶしなし |
▼「色塗り」ボタン押下時の処理
「色塗り」ボタン押下時、各タスクの「進捗度(%)」の値に応じて、「基準色」で設定した色を「進捗ステータス」列に塗る処理。
・プログラム処理フロー図
■サンプルコード
「タスク進捗度表示ツール」のサンプルコードを以下に示す。
・ThisWorkbook
Option Explicit
' 定数
Private Const START_TASK_ROW As Integer = 3 ' タスク開始行
Private Const TASK_COL As Integer = 2 ' タスク名列
Private Const TASK_STATUS_COL As Integer = 3 ' 進捗度列
Private Const START_COLOR_COL As Integer = 4 ' 進捗ステータス列
Private Const STANDARD_COLOR_ROW As Integer = 3 ' 基準色行
Private Const STANDARD_COLOR_COL As Integer = 16 ' 基準色列
Private Const COLOR_DEFULT_WHITE As Long = 16777215 ' 色コード:塗りつぶしなし
' 「色塗り」ボタン押下時の処理
Public Sub btn_click_color()
Dim sht_main As Worksheet ' シート
Dim i_row As Integer ' タスク行カウンタ
Dim color_code As Long ' 基準色コード
Dim status_value As Integer ' ステータス値
Dim i_status As Integer ' ステータスカウンタ
Dim i_color_col As Integer ' ステータス列カウンタ
Dim task_name As String ' タスク名
' 例外エラーハンドリング
On Error GoTo btn_click_color_err
' 「main」シートをセット
Set sht_main = ThisWorkbook.Sheets("main")
' タスク行カウンタ初期値セット
i_row = START_TASK_ROW
' 「main」シートにフォーカス
With sht_main
' 基準色コード取得
color_code = .Cells(STANDARD_COLOR_ROW, STANDARD_COLOR_COL).Interior.Color
' タスクの数だけ繰り返し
Do Until .Cells(i_row, TASK_COL).Value = ""
' 進捗ステータス列カウンタ初期化
i_color_col = START_COLOR_COL
' タスク名を取得
task_name = .Cells(i_row, TASK_COL).Value
' 進捗ステータス < 0 もしくは 進捗ステータス > 100 の場合
If .Cells(i_row, TASK_STATUS_COL).Value < 0 Or _
.Cells(i_row, TASK_STATUS_COL).Value > 100 Then
' 入力エラーを出力
MsgBox "入力エラー:" & task_name & vbCrLf & _
"進捗度(%)の値は0~100までを入力してください"
' 終了処理へ移動
GoTo btn_click_color_exit
End If
' 進捗ステータス値を算出
status_value = .Cells(i_row, TASK_STATUS_COL) \ 10
' 10回繰り返し
For i_status = 1 To 10
' 進捗ステータス値内の場合
If i_status <= status_value Then
' 基準色で色塗り
.Cells(i_row, i_color_col).Interior.Color = color_code
Else
' 塗りつぶしなしで色塗り
.Cells(i_row, i_color_col).Interior.Color = COLOR_DEFULT_WHITE
End If
' 進捗ステータス列カウンタインクリメント
i_color_col = i_color_col + 1
Next i_status
'タスク行カウンタインクリメント
i_row = i_row + 1
Loop
End With
' 終了処理へ移動
GoTo btn_click_color_exit
' 例外処理
btn_click_color_err:
' 例外エラー出力
MsgBox "例外エラー" & vbCrLf & _
Err.Description
' 終了処理へ移動
GoTo btn_click_color_exit
' 終了処理
btn_click_color_exit:
' 「main」シートオブジェクト解放
Set sht_main = Nothing
End Sub
■実行結果
▼正常系
・「タスク名」列にタスク名、「進捗度(%)」に0~100までの値を入力し、「基準色」を水色に設定する。
・「色塗り」ボタンを押下する。
・「進捗ステータス」に色が塗られる
・「基準色」の色を変更し、「色塗り」ボタンを押下すると、「進捗ステータス」の色が変わる。
▼異常系
・「タスクB」の「進捗度(%)」を「-1」にして「色塗り」ボタンを押下する。
・「タスクE」の「進捗度(%)」を「109」にして「色塗り」ボタンを押下する。
■参考
「タスク進捗度表示ツール」を作成するにあたり、参考とさせていただいた外部リンクおよび内部リンクを以下に示す。
▼外部リンク
・割り算の商のみ取得
▼内部リンク
・色コード取得
・GitHub
コメント