• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:背景色のカウント方法)

Excelでセルの背景色をカウントする方法

このQ&Aのポイント
  • Excelの関数やVBAを使用して、セルの背景色をカウントする方法を教えてください。
  • 特定の範囲のセルの背景色ごとにカウントし、結果を別のセルに表示したいです。
  • 具体的な例として、B7からB17までの範囲で背景色が「青色」のセルの数を、B125セルに表示する方法を教えてください。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 7~17行目の色付けは手作業でしょうか?それとも条件付き書式によって色付けされているのでしょうか? Excel2010以降であれば、 条件付き書式で色付けされているセルが判断できる「DisplayFormatオブジェクト」が使えます。 一例です。 A列の124行目以降のセルを検索したい色にあらかじめ塗りつぶしておいてください。 Sheetモジュールです。 尚、1行目は何らかのデータが入っているという前提です。 (A列の最終行を取得するために、ダミーでもよいので1行目に何らかのデータが必要です) まず、手作業で色を付けている場合のコードです Sub 条件付き書式なし() Dim i As Long, j As Long, k As Long, endRow As Long, endCol As Long endRow = ActiveSheet.UsedRange.Rows.Count endCol = Cells(5, Columns.Count).End(xlToLeft).Column If endRow > 123 Then Range(Cells(124, "B"), Cells(endRow, endCol)).ClearContents End If For j = 2 To endCol For i = 124 To endRow For k = 7 To 17 If Cells(k, j).Interior.Color = Cells(i, "A").Interior.Color Then Cells(i, j) = Cells(i, j) + 1 End If Next k Next i Next j Range(Cells(124, "B"), Cells(endRow, endCol)).SpecialCells(xlCellTypeBlanks) = 0 End Sub 次に条件付き書式によってセルが色付けされている場合のコードです。 (内容はほとんど一緒です) Sub 条件付き書式で色付け() Dim i As Long, j As Long, k As Long, endRow As Long, endCol As Long endRow = ActiveSheet.UsedRange.Rows.Count endCol = Cells(5, Columns.Count).End(xlToLeft).Column If endRow > 123 Then Range(Cells(124, "B"), Cells(endRow, endCol)).ClearContents End If For j = 2 To endCol For i = 124 To endRow For k = 7 To 17 If Cells(k, j).DisplayFormat.Interior.Color = Cells(i, "A").Interior.Color Then Cells(i, j) = Cells(i, j) + 1 End If Next k Next i Next j Range(Cells(124, "B"), Cells(endRow, endCol)).SpecialCells(xlCellTypeBlanks) = 0 End Sub ※ 空白セルには「0」を表示するようにしていますが、「0」が目障りであれば 最後の >Range(Cells(124, "B"), Cells(endRow, endCol)).SpecialCells(xlCellTypeBlanks) = 0 の1行を削除してください。m(_ _)m

dorasuke
質問者

お礼

2つの方法の御教示をいただきありがとうございました。 お礼が遅くなり申し訳ありませんでした。 作業をする人たちに聞いて、 下記の方法を採用させていただきました。 「手作業で色を付けている場合のコードです」

その他の回答 (4)

  • ap_2
  • ベストアンサー率64% (70/109)
回答No.5

回答ふえとる・・・かぶった。関数名まで(苦笑

  • ap_2
  • ベストアンサー率64% (70/109)
回答No.4

B124に、=CountColor(B7:B17, A$124) という感じで。 Function CountColor(targetCell, colorCell)  Dim c#, n&, rng  c = colorCell.Interior.color  For Each rng In targetCell   If c = rng.Interior.color Then n = n + 1  Next  CountColor = n End Function

dorasuke
質問者

お礼

御指導いただき感謝しています。 お礼か遅くなり申し訳ありませんでした。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける public function CountColor(byval Target as excel.range, refcol as excel.range)  dim h as range  application.volatile  for each h in target   if h.interior.color = refcol.interior.color then    countcolor = countcolor + 1   end if  next end function 使い方 B124セルに =countcolor(B$7:B$16,$A124) と記入する 色を塗り直した後は,かならずF9キーなどで明示的に再計算を行わせる #注意 「条件付き書式で発色させた色」は「背景色」では無いので,こういったアプローチではカウントできない。 #参考 別セル(たとえばシートの右の方の並びのセル,あるいはシート2)にセルの塗り色をマクロで,若しくは古いマクロである4.0マクロを用いて書き出させ,それを手がかりにCOUNTIFするような方法でも出来ます。 ネットでget.cellで検索してみれば,4.0マクロを使った方法も多数ヒットするので,いわゆる通常のマクロを使いたくないならご利用になってみては。

dorasuke
質問者

お礼

御回答いただき誠に有難うございました。 上手くできました。 それぞれに頂いたご指導で迷いました。 どれもよくて。 追伸 いつもご指導いただき感謝の気持ちでいっぱいです。 またお礼が遅くなり誠に申し訳ありません。

回答No.1

逆に色を塗るのにルールがあれば条件付き書式が使えます。 基礎編と数式編 http://www.becoolusers.com/excel/conditional-formatting.html http://www.becoolusers.com/excel/conditional-formatting-fx.html 参考まで

dorasuke
質問者

お礼

参考のアドレスを提示していただきありがとうございました。 お礼が遅くなり申し訳ありませんでした。

dorasuke
質問者

補足

説明不足でお許しください 条件は特にありません。 見た目でわかりやすくするために色で区分けしているだけです。

関連するQ&A

専門家に質問してみよう