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

C5:T28に色付き数字セルがあるのですが、(条件付き書式で設定してる。1から18までの数字)
数字は別として、色で判別し違う数字をいれ替えるマクロを教えて欲しいです。白色が入っていたら1をいれ、灰色の場合は2、赤色の場合は3、水色の場合は4、黄色の場合は5、緑色の場合は6、橙色の場合は7、ピンク色の場合は8というふうに。
宜しくお願いします。

質問者からの補足コメント

  • もう1つの表と同じなのですが、試した所全然違うふうになりました。

    「色付き数字セル」の補足画像1
      補足日時:2019/01/16 00:18
  • この様になりました。

    「色付き数字セル」の補足画像2
      補足日時:2019/01/16 00:21

A 回答 (2件)

こんばんは!



>色付き数字セルがあるのですが・・・
条件付き書式でフォント色を設定してあるのですね。(セルの塗りつぶしではない!)

色といってもユーザー設定の色の場合はカラー番号、またはRGB値で判断する必要があると思いますので、
一案です。
↓の画像のように別シート(今回はSheet2にしています)に対応表を作成してみてはどうでしょうか?
(カラーインデックスを取得するのが一番手っ取り早い!)

A2~A9セルを対象のフォント色で塗りつぶしています。
B列に変更後の数値、D列にカラーインデックス番号を表示しています。

尚、Excel2010以降のバージョンをお使いだという前提です。
(Excel2007までだと、条件付き書式の色判定はいちいち条件を入れてやる必要があります)

対象Sheetは「Sheet1」とします。
標準モジュールにしてください。

Sub Sample1()
 Dim cN As Long
 Dim c As Range, r As Range
 Dim wS As Worksheet
  Set wS = Worksheets("Sheet2")
   For Each c In Worksheets("Sheet1").Range("C5:T28")
    If c <> "" Then
     cN = c.DisplayFormat.Font.ColorIndex
      Set r = wS.Range("D:D").Find(what:=cN, LookIn:=xlValues, lookat:=xlWhole)
       If Not r Is Nothing Then
        c = wS.Cells(r.Row, "B")
       End If
    End If
   Next c
End Sub

こんな感じではどうでしょうか?

※ Sheet2のA列塗りつぶしの色(カラーインデックス番号)は
実際の色に合わせてください。m(_ _)m
「色付き数字セル」の回答画像1
    • good
    • 0
この回答へのお礼

有難うございました。

お礼日時:2019/01/19 10:56

No.1です。



画像を拝見すると、条件付き書式でセルを塗りつぶしているのですね。
前回の回答の最初に

>>色付き数字セルがあるのですが・・・
>条件付き書式でフォント色を設定してあるのですね。(セルの塗りつぶしではない!)

という記載をしていました。
すなわち塗りつぶしではなく、フォント色を判断しています。
塗りつぶしの色の判断であれば

>If c <> "" Then
>cN = c.DisplayFormat.Font.ColorIndex

の2行を
If c.DisplayFormat.Interior.ColorIndex <> xlNone Then
cN = c.DisplayFormat.Interior.ColorIndex

に変更してみてください。

※ カラーインデックス番号を確認したい場合は
塗りつぶされているセル(1セルのみ)を選択し

MsgBox Selection.DisplayFormat.Interior.ColorIndex

というマクロを実行してみてください。
選択したセルのカラーインデックスが表示されます。

※ カラーインデックスでは色の種類が限られます。
色の種類が多い場合はカラー番号の方が良いかもしれません。(約 1677万種類の色分けが可能)

その場合は

MsgBox Selection.DisplayFormat.Interior.Color

にしてみてください。
これでカラー番号が取得できますので、
Sheet2のD列をこの「カラー番号」に変更します。m(_ _)m
    • good
    • 0

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