【Excel VBA】セルに色を塗りつぶした部分にフラグを立てる

■実装する概要

任意のセルについて、塗りつぶした部分にフラグとして、セルに「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」が出力される。

■参考

本ツール作成にあたり、参考となる内部リンクを以下に示す。

コメント

タイトルとURLをコピーしました