エクセルの条件付書式によるセル着色でエラーメッセージを表示したい

このQ&Aのポイント
  • エクセルのチェックボタンをクリックしたときにシート1のセル"C4:G50"内に条件付書式により着色されたセルがあった場合、エラーメッセージを表示したいです。
  • 現在のコードでは、直接セルに着色されたものはエラーメッセージを表示するようになっていますが、条件付書式による着色されたものもカウントしてエラーメッセージを表示するようにしたいです。
  • 条件付書式による着色されたセルの数をカウントし、カウントが0より大きい場合にエラーメッセージを表示するようにしたいです。
回答を見る
  • ベストアンサー

シート内セルに条件付着色でエラーメッセージ

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

質問者が選んだベストアンサー

  • ベストアンサー
  • nofx35
  • ベストアンサー率82% (14/17)
回答No.1

>条件付書式により着色 残念ながら、条件付き書式で着色された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が一つでもあれば処理を中止する これだと簡単になりますね。

kuma0220
質問者

お礼

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

その他の回答 (1)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

>条件付書式による着色がカウントし 方法が無いこともないですが、相当面倒です。セルをクリップボードにコピーし、html形式のデータを取り出し、色を表現する部分を取り出すなんてワザがあります。 元ネタはmougですが、既に消えています。 こちらに保管している方がいます。ご参考まで。 https://gist.github.com/honda0510/3088353

kuma0220
質問者

お礼

有難うございます。

関連するQ&A

  • エクセル VBA セルの色をSheet1とSheet2の両方を変えたいのですが・・・

    最近困っているところが表題の通りなのですが Sheet1のB2を右クリックするとB2のセルの色を変えて Sheet2のB2のセルも色を変えたいというものです。 現状で Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim Rng As Range, myRng As Range Dim RngA As Range, myRngA As Range Set Rng = Range("B3:W3,b7:w8,b12:w12,d13:w13,d17:w18,d22:w23") Set myRng = Intersect(Target, Rng) If myRng.Interior.ColorIndex = xlColorIndexNone Then myRng.Interior.ColorIndex = 37 Else If myRng.Interior.ColorIndex = 37 Then myRng.Interior.ColorIndex = 45 Else myRng.Interior.ColorIndex = xlColorIndexNone End If End If Cancel = True End Sub とここまではあるのですが、これをどう改造すればSheet2の同じセルの色もかわるのでしょうか? 宜しくお願いいたします

  • マクロで条件付き書式(セルの塗りつぶし)

    2003のため、条件付書式を5つ作るのにマクロが必要なのですが触ったことないので全くわかりません。以下のマクロ作ったのですが、"コンパイルエラー End Subが必要です"と出てしまいます。どこが悪いのか見当も付きません(TT)。添削をお願いします。 やりたいことは、「決まっている範囲内に入力されている単語別にセルの色を分ける」です。 Sub 条件() Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range Set rng = IntersectC9: F28 If rng Is Nothing Then Exit Sub Dim x As Range For Each x In rng Dim myColor As Integer Select Case x.Value Case "りんご": myColor = 3 '赤色 Case "ばなな": myColor = 45 'オレンジ色 Case "みかん": myColor = 6 '黄色 Case "いちご": myColor = 5 '青色 Case "他": myColor = 4 '緑色 Case Else: myColor = xlNone End Select x.Interior.ColorIndex = myColor Next x Set rng = Nothing Set x = Nothing End Sub

  • VBA? 色のついた文字のセルを数えたい

    色のついた文字の記載があるセルをカウントしたく 色々調べました。結局VBAで設定する方法にしたのですが 設定しテストをするとどうしてもカウント数が合いません。 全くの初心者の為何が間違っているのか全く分かりません。 どなたか教えて下さい。 VBAも全く知らない者でしたので 調べて以下のものをそのまま貼り付けました。 Function CCount(Rng As Range, idx) Dim R As Range Dim Cnt As Long Application.Volatile For Each R In Rng   If R.Font.ColorIndex = idx Then Cnt = Cnt + 1 Next R CCount = Cnt End Function Function GetIndx(Rng As Range) If Rng.Count > 1 Then   GetIndx = vbNullString   Exit Function End If GetIndx = Rng.Font.ColorIndex End Function 何が間違っているのでしょうか?

  • 色付セルの数

    こんにちは、詳しい方よろしくお願いします。 添付画像の表内赤色セルの数の合計を表したいのですが、0になってしまいます。 VBA Function CountColorA(Rng As Range) As Long Dim myRng As Range Dim Col_cnt As Long Application.Volatile Col_cnt = 0 For Each myRng In Rng If myRng.Interior.ColorIndex > 0 Then Col_cnt = Col_cnt + 1 End If Next myRng CountColorA = Col_cnt End Function 数を表示させたいセルに =CountColorA(D3:D29)としています。 どこが間違っているかわかる方、よろしくお願いします。 勉強不足ですみません。

  • 背景を条件付きで色を付けたい

    Sub test() Dim Rng As Range For Each Rng In Range("I7:I756") If Rng.Interior.ColorIndex = xlNone Then Cells(Rng.Row, 1).Resize(, 6).Interior.ColorIndex = 35 End If Next End Sub 上記のコードだとうまくいきません>< データベースがA7:K756まであり、I 列の背景が何もない場合のみ その行のAからFまでのセルを薄い緑の背景にしたいのです。 例えばI10の背景がない場合はA10.B10.C10.D10.E10.F10のセルを薄い緑する といった感じにしたいのですがVBAはあまり詳しくないので 詳しい方ぜひアドバイスお願いします。 エクセル2010を使っています。 補足 I列の背景は条件付き書式で色付けしています。

  • 複数セル参照で塗りつぶしを変更する

    WIN:XP Off:2003 お願いします。 添付した図は入出金表です。 列Hに数値が入力されると列Eのセルが青く塗りつぶされます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range Dim aCell As Range Set Rng = Intersect(Target, Range("H:H")) If Rng Is Nothing Then Exit Sub For Each aCell In Rng If aCell.Value > 0 Then aCell.Offset(0, -3).Interior.ColorIndex = 17 Else aCell.Offset(0, -3).Interior.ColorIndex = xlNone End If Next aCell Set Rng = Nothing End Sub ここまでは出来たのですが、列Iに入力された時に列Eが赤に塗りつぶされるにはどうしたらいいでしょうか? 同じ行のHとIに同時に数値が入る事はありません。 どうかお願い致します。

  • セルを塗りつぶす

    マクロでE行のデータが無いセルを特定し黄色で塗り潰すとしたのですが止まってしまします。 下記をどのように修正したらいいですか。 空白セルを塗る Dim int_row As Long Dim int_cnt As Long int_cnt = 1 Do Until Range("B" & int_cnt) = Null Or Range("B" & int_cnt) = "" int_cnt = int_cnt + 1 Loop int_row = int_cnt - 1 If .Range("E" & int_cnt) = "" Then .Range("E" & int_cnt).Interior.ColorIndex = 65535 End If

  • 色のついたセルと文字を両方数えられるVBA

    VBAの初心者です。 エクセルで文字の色でカウントする為に以下のVBAをこちらで教えていただきました。 順調に快適にエクセルを使えていたたのですが今回同じエクセル内で 文字ではなくセルに色付けしたものもカウントしなければならなくなりました。 以下のVBAがあるからかよく言われている4.0マクロ関数ではうまくいきません。 以下のVBAに何かを足せば一方では文字色をカウントし 一方ではセル色をカウントすると言う事は可能でしょうか? どなたか力を貸してください Function CCount(Rng As Range, idx) Dim R As Range Dim Cnt As Long Application.Volatile For Each R In Rng     If R.Font.ColorIndex = idx Then Cnt = Cnt + 1 Next R CCount = Cnt End Function

  • エクセルVBAにてプログラムされているシートに別のシートからマクロのモジュールにて貼り付けるとエラーになります。

    エクセルVBAにてプログラムされているシートに別のシートからマクロのモジュールにて普通のデータを貼り付けるとエラーになります。 何卒エラーの解除方法を教えて下さい。 また、合わせて下記プログラムは四角形等のオートシェイプの書式に対応していますが、 同じシート上に写真等の図の書式があるとエラーになります。 お手数ですが、解決方法を教えて下さい。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim C As Variant Dim i As Integer Dim Rng As Range For Each Rng In Target If Not Intersect(Range("e36:i40"), Rng) Is Nothing Then Select Case Rng.Row Case 36 C = Split("3 0 0 0 0") Case 37 C = Split("0 3 0 0 0") Case 38 C = Split("0 0 3 0 0") Case 39 C = Split("0 0 0 3 0") Case 40 C = Split("0 0 0 0 3") End Select Else C = Split("0 0 0 0 0") End If For i = 0 To 4 ActiveSheet.Shapes(i + 1).Select Selection.Font.ColorIndex = C(i) Next i Next Rng Target.Select End Sub

  • 【VBA】別々のシートに列ごとコピーしていきたい

    エクセルVBA初心者です 以下のような表を、地区別にわけられたシートで、種別を選んで貼り付けていきたいのですが 地区 種別 1 大阪 金 2 東京 銀 3 名古屋 銀 4 大阪 金 5 大阪 銅 6 名古屋 銅 7 東京 金 8 名古屋 金 9 大阪 銅 金と銀のみ、地区に分けられたシートに貼り付け シート【大阪】 1 大阪 金 4 大阪 金 シート【東京】 2 東京 銀 7 東京 金 シート【名古屋】 3 名古屋 銀 8 名古屋 金 以下のVBAを加工してみましたが組んでみましたがうまくいきません どうかご教示のほどよろしくお願いします ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ Public Sub cptest() Dim sht1 As Worksheet Dim sht2 As Worksheet Dim rng As Range Dim cel As Range Dim stcrng As New Collection Dim lastRow As Integer Dim cnt As Integer Set sht1 = ThisWorkbook.Worksheets("Sheet1") Set sht2 = ThisWorkbook.Worksheets("Sheet2") lastRow = Range("G65535").End(xlUp).Row Set rng = sht1.Range("G1:G" & lastRow) For Each cel In rng If cel.Value = "あり" Then Set cel = sht1.Range(cel.Offset(0, -4), cel.Offset(0, -1)) stcrng.Add cel End If Next sht2.Cells.Clear cnt = 0 Set rng = sht2.Range("A1") For Each cel In stcrng cel.Copy rng.Offset(cnt, 0).PasteSpecial rng.Offset(cnt, 4).Value = "_" cnt = cnt + 1 Next Application.CutCopyMode = False End Sub

専門家に質問してみよう