プロが教える店舗&オフィスのセキュリティ対策術

あるセル範囲にある特定色の数をカウントしたいのですが、どのようのマクロを組めばよろしいでしょうか?
たとえば、下記のURLの場合にある赤色をカウントしたい場合、具体的にどのようにマクロ組めばよいですか?
http://excel-magic.com/?no=42


実際に使いたい色は、2007から採用された色を基本として使用したいので、カラーコードの一覧表があればと思うのですが、ありますか?
塗りつぶし色
白、背景1、黒+基本色15% ⇒ -0.149998474074526
白、背景1、黒+基本色35% ⇒ -0.349986266670736
このマイナス数値がカラーコードになるんでしょうか?

A 回答 (2件)

こんばんは。



リンク先のコードは、雑なコードですから、あまり参考にすべきではありません。

少なくとも、
>Application.Volatile
Volatileを入れたところで、あまり意味がありません。これを入れなければ、不揮発性になりますが、いずれにしても、再計算させるには、
ColorCountの数式のセルに対して、F2->Enter や、
ブックに対して、Ctrl+Alt+ F9(または、Ctrl+Alt+ Shift +F9)のショートカットを使います。

>カラーコードの一覧表があればと思うのですが、ありますか?
あるのかもしれませんが、必要とあれば、ご自分で、マクロで一覧を作るのが早いと思います。

>このマイナス数値がカラーコードになるんでしょうか?
カラーコードという名称が適切かは分かりませんが、色のプロパティを数値化して-1から1までで表すものだと思います。標準値が0になるようです。

**
あまり、良いアイデアが思いつきませんし、自信はありませんが、以下は、一括で、Ifでまとめてしまうと、エラー値が3つに掛かってしまい、比較が出来ません。そこで、エラー値もひとつの値として、比較するようにすれば、旧バージョン仕様に対しても新バージョン仕様に対しても、検出可能かと思います。

'//
Function CountColor(計算範囲 As Range, 条件色セル As Range) As Long
 Dim c As Range
 Dim cnt As Long
 Dim o, p, q 'Variant型に限る
 Dim x, y, z 'Variant型に限る
 On Error Resume Next
 o = 条件色セル.Interior.ColorIndex
 p = 条件色セル.Interior.ThemeColor
 q = 条件色セル.Interior.TintAndShade
 For Each c In 計算範囲
   x = c.Interior.ColorIndex
   y = c.Interior.ThemeColor
   z = c.Interior.TintAndShade
   If (o = x And p = y And q = z) Then
    cnt = cnt + 1
   End If
  x = Empty: y = Empty: z = Empty '不要かもしれない。念のため
 Next c
 On Error GoTo 0
 CountColor = cnt
End Function

'//
    • good
    • 0

こんばんは!



個人的にはカラーコードより、カラーインデックスもしくはRGB値での表示が多いのですが・・・

仮にA1~D10セル内に
白、背景1、黒+基本色15% の色付きセルの個数を求めたい場合は

Sub Sample1()
Dim cnt As Long, c As Range
For Each c In Range("A1:D10")
If c.Interior.ColorIndex = 15 Then '←白、背景1、黒+基本色15%
cnt = cnt + 1
End If
Next c
MsgBox cnt
End Sub

としてマクロを実行してみてください。

※ 白、背景1、黒+基本色35% の場合は
カラーインデックスは 48 になると思います。

参考資料 ↓のURLにカラーインデックスのURLとカラーコードのURLを載せておきます。

カラーインデックス(RGB値 16進数)
http://homepage2.nifty.com/vbasys/vbasys/vbaUtil …

カラーコード
http://sakamoto-san.com/color_wh4var_3.html

カラーコードを知りたい場合はRGB値とカラーコードの対照表になっています。m(_ _)m
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!