Excel(VBA) 背景色・文字色のColorIndexを取得

文字色や背景色から何かしたいから、背景色・文字色を取得

作成日:2021-03-02, 更新日:2021-03-02

基本的な流れ

  1. VBAを起動して、ユーザー関数を作成
  2. 任意のセルにユーザー関数をセット
  3. 保存

VBAを起動して、ユーザー関数を作成

  1. Excelのバージョンによっては出し方が異なる(ショートカットは同じかも?)
    • Excelから「ツール:マクロ」→「Visual Basic Editor(V)」(※ショートカット:ALT+F11)
    • Excelから「開発」→「Visual Basic」(※ショートカット:ALT+F11)
      ※メニューに開発が無いとき:「ファイル→オプション」で「リボンのユーザー設定」を開き、「開発」にチェック
  2. 左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」

・ワークシート:そのシートに対して操作をするとき
・標準モジュール:すべてのシートに対して操作をするとき

任意のセルにユーザー関数をセット

例えば、「ユーザー関数:CellColor」を作成したら任意のセルに「=CellColor()」のようにセット

ユーザー関数は戻り値が自動で変わらないので・・・再計算を行う(ショートカット:ALT+Ctlr+F9)

▼再計算不要

  1. ユーザー関数作成
  2. セルにセット

▼再計算必要

  1. ユーザー関数作成
  2. セルにセット
  3. ユーザー関数を修正
  4. 再計算(ショートカット:ALT+Ctlr+F9)

保存

保存時にフィルの種類を「Excel マクロ有効ブック(.xslm)」にする

サンプル:背景色を返す

▼透明背景色は「0」、他は背景色(ColorIndex)を返す

Function CellColor(ByVal rng As Range)
With rng.Cells(1, 1).Interior
If .ColorIndex = xlNone Then
CellColor = 0
Else
CellColor = .ColorIndex
End If
End With
End Function

▼任意のセルで

=CellColor(A1)

サンプル:文字色を返す

文字色を返す

Function FontColor(ByVal rng As Range) As String
FontColor = rng.Cells(1, 1).Font.ColorIndex
End Function

▼任意のセルで

=FontColor(A1)

黒文字以外は文字色(ColorIndex)を返す

これが一番欲しかった処理・・・文字色から処理を変更したかった
※文字色の「黒」は「ColorIndex=1」だけど、「自動」は異なる・・・マイナス値

Function FontColor(ByVal rng As Range)
With rng.Cells(1, 1).Font
If .ColorIndex <= 1 Then
FontColor = ""
Else
FontColor = .ColorIndex
End If
End With
End Function

※ひとまず「1、0、マイナス値」とそれ以外で分岐させる(マイナス値が「自動」以外にあるのかどうかは不明・・・)

▼任意のセルで(黒文字以外のときに内容を出力)

=IF(FontColor(A1)="","",A1)