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

Excelのチェックボタンをクリックしたときにシート1のセル"C4:G50"内に条件付書式により着色(ColorIndex =7)されたセルがあった場合、エラーメッセージ(" ヶ所 日付が入力されていません")を表示したいのですが?
下記のコードでセルに直接着色("C7")されたものは添付のようにメッセージが出たのですが条件付書式による着色がカウントしメッセージが出るようにしたいのですが、コード表示が解る方どうかよろしくお願いします。
尚、C列とG列のみ50行まで条件下で着色するよう同じ条件付書式が入っています。

Sub チェック()
Dim CheckRange As Range
Dim rng As Range
Dim cnt As Long

Set CheckRange = Range("C4:G50")
For Each rng In CheckRange
If rng.Interior.ColorIndex = 7 Then
cnt = cnt + 1
End If
Next

If cnt > 0 Then
MsgBox cnt & "ヶ所、日付が入力されていません。", vbCritical
Exit Sub
End If

Worksheets("sheet1").Range("D1") = "1"

End Sub

「シート内セルに条件付着色でエラーメッセー」の質問画像

A 回答 (2件)

>条件付書式による着色がカウントし



方法が無いこともないですが、相当面倒です。セルをクリップボードにコピーし、html形式のデータを取り出し、色を表現する部分を取り出すなんてワザがあります。
元ネタはmougですが、既に消えています。
こちらに保管している方がいます。ご参考まで。
https://gist.github.com/honda0510/3088353
    • good
    • 0
この回答へのお礼

有難うございます。

お礼日時:2013/03/17 16:09

>条件付書式により着色



残念ながら、条件付き書式で着色されたColorIndexは取得出来ません。

簡単な対応策は、色を判別するのではなく対象セルが条件を満たしているか
を判別する事です。条件が小さくて見えませんので勝手に条件を想像しますと

E列の入力があってC列の入力がない場合
同様にI列に入力があってG列に入力のないものをカウントします。

C4からC50とG4からG50をチェック対象にします。
Set CheckRange = Range("C4:C50,G4:G50")

For Each rng In CheckRange
  'このrngにはC列G列が入ってきます。
  '基準セルより右に2いったセルに入力があれば(CならばE,GならI)
  IF rng.Offset(,2).Value <> "" Then
    '対象セルが未入力なら
    IF rng.Value = "" Then
      cnt = cnt +1
    End IF
  End IF
End IF


条件が簡単であれば上記のような方法でもいいですが、
条件付き書式の条件を複数使っていると
難易度が格段に上がります。

"条件付き書式 色 カウント"で検索してみて下さい。
かなり面倒くさいです。

発想を変えて、作業列を使うなんてのはどうですか?

例えば R4 = IF(E4<>"",IF(C4="",1,0),0) E列の入力のみならR4を1にする
R列を見て、1が一つでもあれば処理を中止する

これだと簡単になりますね。
    • good
    • 0
この回答へのお礼

有難うございます。大変助かりました。

お礼日時:2013/03/17 16:10

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