セルに意味のある色が付けられたスプレッドシートがあります。
Excelシートの現在のセルの背景色の値を返す方法を知っている人はいますか?
Cell.Interior.Color
を使用できます。特定の背景色(つまり、凡例と一致する)を持つ範囲内のセルの数をカウントするために使用しました。
テーブル、ピボットテーブル、または条件付き書式設定のあるものを見ている場合は、次のことを試すことができます。
ActiveCell.DisplayFormat.Interior.Color
これは通常のセルでも問題なく動作するようです。
このプロパティを使用できます:
ActiveCell.Interior.ColorIndex - one of 56 preset colors
そして
ActiveCell.Interior.Color - RGB color, used like that:
ActiveCell.Interior.Color = RGB(255,255,255)
以下のコードは[〜#〜] hex [〜#〜]および[〜#〜] rgb [〜#〜]範囲の値が条件付き書式を使用してフォーマットされているかどうか。条件付き書式を使用して範囲が書式設定されておらず、ExcelでiColor関数をUDFとして使用する場合。動作しません。 [〜#〜] msdn [〜#〜] からの抜粋をお読みください。
DisplayFormatプロパティは、ユーザー定義関数では機能しないことに注意してください。たとえば、次のような行を使用すると、セルの内部色を返すワークシート関数で:
Range.DisplayFormat.Interior.ColorIndex
次にワークシート関数が実行され、#VALUE! 条件付きでフォーマットされた範囲の色が見つからない場合は、むしろ使用することをお勧めします
Range.Interior.ColorIndex
そのため、関数はExcelでUDFとして使用することもできます。 iColor(B1、 "HEX")など
Public Function iColor(rng As Range, Optional formatType As String) As Variant
'formatType: Hex for #RRGGBB, RGB for (R, G, B) and IDX for VBA Color Index
Dim colorVal As Variant
colorVal = rng.DisplayFormat.Interior.Color
Select Case UCase(formatType)
Case "HEX"
iColor = "#" & Format(Hex(colorVal Mod 256),"00") & _
Format(Hex((colorVal \ 256) Mod 256),"00") & _
Format(Hex((colorVal \ 65536)),"00")
Case "RGB"
iColor = Format((colorVal Mod 256),"00") & ", " & _
Format(((colorVal \ 256) Mod 256),"00") & ", " & _
Format((colorVal \ 65536),"00")
Case "IDX"
iColor = rng.Interior.ColorIndex
Case Else
iColor = colorVal
End Select
End Function
'Example use of the iColor function
Sub Get_Color_Format()
Dim rng As Range
For Each rng In Selection.Cells
rng.Offset(0, 1).Value = iColor(rng, "HEX")
rng.Offset(0, 2).Value = iColor(rng, "RGB")
Next
End Sub