Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
ExcelのVBAで色付きセルをカウントしたい!
投稿日時: 22/11/21 15:04:26
投稿者: hiroemon_

Excelで条件付き書式で条件を満たしたセルに黄色をつけてます。
黄色の付いたセルが、
    色付き = "1"
    色なし = "0"
を表示したいです。
 
色がつくセルはL列で500レコードほど。
 
 
VBA初心者でいろいろ見ながらやりましたが、うまく反映しません。
ご教示いただけませんでしょうか。
 
よろしくお願いします。

回答
投稿日時: 22/11/21 15:24:25
投稿者: sk

引用:
Excelで条件付き書式で条件を満たしたセルに黄色をつけてます。

・「フォントの色」「罫線(のいずれかの部分)の色」「塗りつぶしの色」の
 どの設定を指しているのか。
 
引用:
黄色の付いたセルが、
    色付き = "1"
    色なし = "0"
を表示したいです。

・その判定結果や該当件数をどこに出力したいのか。
 
とりあえず、以上の 2 点について明記されることをお奨めします。

投稿日時: 22/11/21 16:18:58
投稿者: hiroemon_

アドバイスありがとうございます!
 
L列が条件付き書式を設定しており、その隣の列Mに、
黄色の付いたセルが、
    色付き = "1"
    色なし = "0"
を表示したいです。
 
を入れたいです。
 
よろしくお願いします。
 
 

sk さんの引用:
引用:
Excelで条件付き書式で条件を満たしたセルに黄色をつけてます。

・「フォントの色」「罫線(のいずれかの部分)の色」「塗りつぶしの色」の
 どの設定を指しているのか。
 
引用:
黄色の付いたセルが、
    色付き = "1"
    色なし = "0"
を表示したいです。

・その判定結果や該当件数をどこに出力したいのか。
 
とりあえず、以上の 2 点について明記されることをお奨めします。

投稿日時: 22/11/21 16:36:57
投稿者: hiroemon_

hiroemon_ さんの引用:
アドバイスありがとうございます!
 
L列が条件付き書式を設定しており、その隣の列Mに、
黄色の付いたセルが、
    色付き = "1"
    色なし = "0"
を表示したいです。
背景色のみです。フォントはなしで大丈夫です。
 
を入れたいです。
 
よろしくお願いします。
 
 
sk さんの引用:
引用:
Excelで条件付き書式で条件を満たしたセルに黄色をつけてます。

・「フォントの色」「罫線(のいずれかの部分)の色」「塗りつぶしの色」の
 どの設定を指しているのか。
 
引用:
黄色の付いたセルが、
    色付き = "1"
    色なし = "0"
を表示したいです。

・その判定結果や該当件数をどこに出力したいのか。
 
とりあえず、以上の 2 点について明記されることをお奨めします。

回答
投稿日時: 22/11/21 16:48:02
投稿者: sk

hiroemon_ さんの引用:
L列が条件付き書式を設定しており、その隣の列Mに、
黄色の付いたセルが、
    色付き = "1"
    色なし = "0"
を表示したいです。
背景色のみです。フォントはなしで大丈夫です。

(標準モジュール)
----------------------------------------------------------------------
Sub CountCellsByInteriorColor()
     
    Const EvaluatedColumn = "L"
     
    Dim wsSheet As Worksheet
    Dim lngFirstRow As Long
    Dim lngLastRow As Long
     
    Set wsSheet = ThisWorkbook.Worksheets(1)
     
    lngFirstRow = 1
    lngLastRow = wsSheet.Cells(wsSheet.Rows.Count, EvaluatedColumn).End(xlUp).Row
     
    Dim rngCell As Range
    Dim lngRow As Long
    Dim lngCount As Long
     
    lngCount = 0
    For lngRow = lngFirstRow To lngLastRow
        Set rngCell = wsSheet.Cells(lngRow, EvaluatedColumn)
        If rngCell.DisplayFormat.Interior.Color = RGB(255, 255, 0) Then
            lngCount = lngCount + 1
            rngCell.Offset(0, 1).Value = 1
        Else
            rngCell.Offset(0, 1).Value = 0
        End If
        Set rngCell = Nothing
    Next
     
    Set wsSheet = Nothing
     
    MsgBox lngCount & " 件"
 
End Sub
----------------------------------------------------------------------
 
以上のようなコードを実行なさればよろしいのではないかと。

投稿日時: 22/11/21 17:11:46
投稿者: hiroemon_

早速ありがとうございます!
説明がわかりづらく申し訳ありませんが、
 
・L列に条件に合ったセルは条件付き書式で、背景色が黄色くなる
・レコードは500件あり、黄色のセルがあった場合は、隣のM列に"1"
 セルの色がついてないセルはM列に"0"を反映したい
・色ありなしの判定は、セルごとに行いたい
・結果はMsgBoxでなく、M列のセルに1行ごと行いたい
 
です。
いまはMsgBoxで結果0件になってしまいます。。。
 
よろしくお願いします。
 
 

sk さんの引用:
hiroemon_ さんの引用:
L列が条件付き書式を設定しており、その隣の列Mに、
黄色の付いたセルが、
    色付き = "1"
    色なし = "0"
を表示したいです。
背景色のみです。フォントはなしで大丈夫です。

(標準モジュール)
----------------------------------------------------------------------
Sub CountCellsByInteriorColor()
     
    Const EvaluatedColumn = "L"
     
    Dim wsSheet As Worksheet
    Dim lngFirstRow As Long
    Dim lngLastRow As Long
     
    Set wsSheet = ThisWorkbook.Worksheets(1)
     
    lngFirstRow = 1
    lngLastRow = wsSheet.Cells(wsSheet.Rows.Count, EvaluatedColumn).End(xlUp).Row
     
    Dim rngCell As Range
    Dim lngRow As Long
    Dim lngCount As Long
     
    lngCount = 0
    For lngRow = lngFirstRow To lngLastRow
        Set rngCell = wsSheet.Cells(lngRow, EvaluatedColumn)
        If rngCell.DisplayFormat.Interior.Color = RGB(255, 255, 0) Then
            lngCount = lngCount + 1
            rngCell.Offset(0, 1).Value = 1
        Else
            rngCell.Offset(0, 1).Value = 0
        End If
        Set rngCell = Nothing
    Next
     
    Set wsSheet = Nothing
     
    MsgBox lngCount & " 件"
 
End Sub
----------------------------------------------------------------------
 
以上のようなコードを実行なさればよろしいのではないかと。

回答
投稿日時: 22/11/21 17:21:33
投稿者: taitani
投稿者のウェブサイトに移動

500件程度であれば、VBA ではなく 条件付き書式の計算式 (条件式) を隣のセルに IF 文で追加を行えばいいのではないでしょうか。
 

投稿日時: 22/11/21 17:47:06
投稿者: hiroemon_

ありがとうございます。
ちょっと考えてみます。。。
 

taitani さんの引用:
500件程度であれば、VBA ではなく 条件付き書式の計算式 (条件式) を隣のセルに IF 文で追加を行えばいいのではないでしょうか。
 

回答
投稿日時: 22/11/21 18:00:03
投稿者: WinArrow
投稿者のウェブサイトに移動

hiroemon_ さんの引用:
早速ありがとうございます!
説明がわかりづらく申し訳ありませんが、
 
・L列に条件に合ったセルは条件付き書式で、背景色が黄色くなる
・レコードは500件あり、黄色のセルがあった場合は、隣のM列に"1"
 セルの色がついてないセルはM列に"0"を反映したい
・色ありなしの判定は、セルごとに行いたい
・結果はMsgBoxでなく、M列のセルに1行ごと行いたい
 
です。
いまはMsgBoxで結果0件になってしまいます。。。
 
よろしくお願いします。
 

 
何か勘違いしていませんか?
 skさんが、提示されたコードは、
M列の「1」or 「0」がセットするようになっているはずですが・・・・
 
再度確認してみてください。

回答
投稿日時: 22/11/21 18:02:05
投稿者: WinArrow
投稿者のウェブサイトに移動

hiroemon_ さんの引用:
早速ありがとうございます!
説明がわかりづらく申し訳ありませんが、
 
・L列に条件に合ったセルは条件付き書式で、背景色が黄色くなる
・レコードは500件あり、黄色のセルがあった場合は、隣のM列に"1"
 セルの色がついてないセルはM列に"0"を反映したい
・色ありなしの判定は、セルごとに行いたい
・結果はMsgBoxでなく、M列のセルに1行ごと行いたい
 
です。
いまはMsgBoxで結果0件になってしまいます。。。
 
よろしくお願いします。
 

 
何か勘違いしていませんか?
 skさんが、提示されたコードは、
M列の「1」or 「0」がセットするようになっているはずですが・・・・
 
再度確認してみてください。

回答
投稿日時: 22/11/21 18:05:57
投稿者: sk

引用:
いまはMsgBoxで結果0件になってしまいます。。。

あくまでサンプルコードですので、そのままコピーアンドペーストしても
正常に動作する保証はありません。
 
引用:
Set wsSheet = ThisWorkbook.Worksheets(1)

・評価対象となるワークシートを正しく指定できていない。
 
引用:
Const EvaluatedColumn = "L"

引用:
lngLastRow = wsSheet.Cells(wsSheet.Rows.Count, EvaluatedColumn).End(xlUp).Row

・そのワークシートの L 列の 2 行目以降に、
 定数セルも数式セルも存在していない。
 
引用:
If rngCell.DisplayFormat.Interior.Color = RGB(255, 255, 0) Then

・条件付き書式において塗りつぶしの色として設定されている RGB 値を
 上記の比較条件式において正しく指定できていない。
 
原因および修正箇所として挙げられるのは以上の 3 つです。
 
引用:
・L列に条件に合ったセルは条件付き書式で、背景色が黄色くなる

一口に「黄色」と言っても原色なのか、多少の濃淡があるのか、
その具体的な RGB 値がどのような値であるかは、第三者には分かりません。
 
まずそのセルに表示されている塗りつぶしの色の
正確な RGB 値を把握しておいて下さい。
 
-------------------------------------------------------------
 
'アクティブセルに表示されている塗りつぶしの色の RGB 値をイミディエイトウィンドウに出力する
Debug.Print ActiveCell.DisplayFormat.Interior.Color
 
-------------------------------------------------------------

投稿日時: 22/11/22 09:46:07
投稿者: hiroemon_

みなさん、ありがとうございました。
一度整理をして上で、また不明点がありましたら教えてください。
 
よろしくお願いします。

投稿日時: 22/11/25 15:51:20
投稿者: hiroemon_

お世話になりありがとうございます!
 
 

hiroemon_ さんの引用:
早速ありがとうございます!
説明がわかりづらく申し訳ありませんが、
 
・L列に条件に合ったセルは条件付き書式で、背景色が黄色くなる
・レコードは500件あり、黄色のセルがあった場合は、隣のM列に"1"
 セルの色がついてないセルはM列に"0"を反映したい
・色ありなしの判定は、セルごとに行いたい
・結果はMsgBoxでなく、M列のセルに1行ごと行いたい
 
です。
いまはMsgBoxで結果0件になってしまいます。。。
 
よろしくお願いします。
 
 
sk さんの引用:
hiroemon_ さんの引用:
L列が条件付き書式を設定しており、その隣の列Mに、
黄色の付いたセルが、
    色付き = "1"
    色なし = "0"
を表示したいです。
背景色のみです。フォントはなしで大丈夫です。

(標準モジュール)
----------------------------------------------------------------------
Sub CountCellsByInteriorColor()
     
    Const EvaluatedColumn = "L"
     
    Dim wsSheet As Worksheet
    Dim lngFirstRow As Long
    Dim lngLastRow As Long
     
    Set wsSheet = ThisWorkbook.Worksheets(1)
     
    lngFirstRow = 1
    lngLastRow = wsSheet.Cells(wsSheet.Rows.Count, EvaluatedColumn).End(xlUp).Row
     
    Dim rngCell As Range
    Dim lngRow As Long
    Dim lngCount As Long
     
    lngCount = 0
    For lngRow = lngFirstRow To lngLastRow
        Set rngCell = wsSheet.Cells(lngRow, EvaluatedColumn)
        If rngCell.DisplayFormat.Interior.Color = RGB(255, 255, 0) Then
            lngCount = lngCount + 1
            rngCell.Offset(0, 1).Value = 1
        Else
            rngCell.Offset(0, 1).Value = 0
        End If
        Set rngCell = Nothing
    Next
     
    Set wsSheet = Nothing
     
    MsgBox lngCount & " 件"
 
End Sub
----------------------------------------------------------------------
 
以上のようなコードを実行なさればよろしいのではないかと。