重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

エクセルに関してご存知の方、よろしくお願いいたします。

セルの色を判断し、別のセルに文字を表示させることは可能でしょうか?

例えば、
(1)A1~A10のセルに他のシートのリンクが張ってあり、数値が表示されている。
(2)その数値がそれぞれの閾値外だった場合、セルの色を赤くする。
(3)A1~A10のセルのうち一つでも赤いセルがあった場合、A11に「異常」と表示させる。無かった場合は「正常」と表示させる。

今回教えていただきたいのは、(3)です。

意味がよく分からない場合は補足させていただきます。
アドイン等はせずに、上記方法をご存知の方がいらっしゃいましたら、
お知恵を貸していただけないでしょうか?

よろしくお願いします。

A 回答 (3件)

まずワークシート関数やアドインの関数ではセルの色を取得することはできません。

背景色の色番号を取得するには、どうしてもマクロが必要になります

でも
 >(2)その数値がそれぞれの閾値外だった場合、セルの色を赤くする。
は、もしかしたら条件付き書式を使って実現していませんか?
その場合はVBAのColorIndexプロパティでも背景色の色番号を取得できません。条件付き書式で背景色が変わっていても「セルの元の色番号」しか取得できないからです。

条件付き書式で色を変えているなら、「閾値からはみ出した」セルは、IF関数を用いて空き列に「任意の文字列」を表示させ、その列の全行が空白かどうかで「異常のあるなし」を判断させるのが良いと思います。

条件付き書式は使ってないなら、以下のようなユーザ定義関数でセルの背景色を取得できます。以下のマクロはALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。
ワークシート画面に戻って「=Cidx(A1)」と入力するとA1セルの背景色を取得できます。

Function Cidx(ByVal trg As Range) As Integer
 If trg.Cells(1, 1).Interior.ColorIndex = xlNone Then
  Cidx = 0
 Else
  Cidx = trg.Cells(1, 1).Interior.ColorIndex
 End If
End Function

その他にも古いバージョンのGET.CELLマクロを使って背景色を取得する方法はあるのですが、かえって面倒になるので、それは割愛!
    • good
    • 0

セルの色が赤(下記の例では、赤と思われる色の番号を 3 としましたが、実際の色を確認した上で、実施してください。



 次のマクロを実行させれると、A1 ~ A10 の中に色が 3(赤色)のセルが1つでもあれば、A11 に "異常" と設定されます。


Sub macro_x()
Range("A11") = ""
If ((Range("A1").Interior.ColorIndex = 3) Or _
(Range("A2").Interior.ColorIndex = 3) Or _
(Range("A3").Interior.ColorIndex = 3) Or _
(Range("A4").Interior.ColorIndex = 3) Or _
(Range("A5").Interior.ColorIndex = 3) Or _
(Range("A6").Interior.ColorIndex = 3) Or _
(Range("A7").Interior.ColorIndex = 3) Or _
(Range("A8").Interior.ColorIndex = 3) Or _
(Range("A9").Interior.ColorIndex = 3) Or _
(Range("A10").Interior.ColorIndex = 3)) Then
Range("A11") = "異常"
Else
Range("A11") = "正常"
End If
End Sub
    • good
    • 0

解答になっていないのです申し訳ないのですが、閾値が設定されているのなら


色ではなくて数値で判断させてはいかがでしょうか?
    • good
    • 0

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