■実装する概要
任意のセルについて、塗りつぶした部分にフラグとして、セルに「1」を出力し、それ以外(塗りつぶしなし以外)は「0」を出力する。
▼実装イメージ
■前提条件
本ツールを作成するにあたり、前提条件を以下に示す。
- 色がついているか否か判定するセルの開始行は「2」・開始列は「2」とする。
- 「塗りつぶしなし」の色コードは、あらかじめ取得した「16777215」を使用する。
- 各行列の末端判定文字は「#」とする。
- Excelのシート名は「main」とする。
- フラグ文字「0」と「1」をセルの中央に表示するため、あらかじめ、セルのフォーマットは中央ぞろえにしておく。
- 各セルの幅は、行列ともに2.42(36ピクセル)とする。
- Excel VBAのコードは、「ThisWorkbook」に記載する。
■サンプルコード
サンプルコードを以下に示す。
Option Explicit
Private Const SHEET_NAME_MAIN As String = "main"
Private Const START_ROW_NUM As Integer = 2
Private Const START_COL_NUM As Integer = 2
Private Const DELIMITER As String = "#"
' 塗りつぶしなしの色コード
Private Const DEFAULT_COLOR_CODE As Long = 16777215
' 「フラグ立て」ボタン押下処理
Public Sub btn_click_build_flg()
' 変数宣言
Dim sht_main As Worksheet
Dim i_row As Integer
Dim i_col As Integer
' 例外エラーハンドリング
On Error GoTo btn_click_build_flg_err
' [main]シートをセット
Set sht_main = ThisWorkbook.Worksheets(SHEET_NAME_MAIN)
' 行カウンタ初期化
i_row = START_ROW_NUM
' [main]シートにフォーカス
With sht_main
' 区切り文字まで繰り返し(行方向)
Do While .Cells(i_row, START_COL_NUM).Value <> DELIMITER
' 列カウンタ初期化
i_col = START_COL_NUM
' 区切り文字まで繰り返し(列方向)
Do While .Cells(i_row, i_col).Value <> DELIMITER
' 塗りつぶしなしの場合
If .Cells(i_row, i_col).Interior.Color = DEFAULT_COLOR_CODE Then
' フラグ立てない
.Cells(i_row, i_col).Value = 0
Else
' フラグ立てる
.Cells(i_row, i_col).Value = 1
End If
' 列カウンタインクリメント
i_col = i_col + 1
Loop
' 行カウンタインクリメント
i_row = i_row + 1
Loop
End With
MsgBox "完了"
' 終了処理へ移動
GoTo btn_click_build_flg_exit
' 例外処理
btn_click_build_flg_err:
' 例外エラーを出力
MsgBox Err.Description
' 終了処理へ移動
GoTo btn_click_build_flg_exit
' 終了処理
btn_click_build_flg_exit:
' シートオブジェクト解放
Set sht_main = Nothing
End Sub
■実行結果
・「フラグ立て」ボタンに、関数「btn_click_build_flg()」を紐づけ、押下する。
・「完了」のメッセージボックスを出力し、処理対象のセルについて、「0」または「1」が出力される。
■参考
本ツール作成にあたり、参考となる内部リンクを以下に示す。