- ベストアンサー
Excelでセルの背景色をカウントする方法
- Excelの関数やVBAを使用して、セルの背景色をカウントする方法を教えてください。
- 特定の範囲のセルの背景色ごとにカウントし、結果を別のセルに表示したいです。
- 具体的な例として、B7からB17までの範囲で背景色が「青色」のセルの数を、B125セルに表示する方法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! 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
その他の回答 (4)
- ap_2
- ベストアンサー率64% (70/109)
回答ふえとる・・・かぶった。関数名まで(苦笑
- ap_2
- ベストアンサー率64% (70/109)
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
お礼
御指導いただき感謝しています。 お礼か遅くなり申し訳ありませんでした。
- keithin
- ベストアンサー率66% (5278/7941)
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マクロを使った方法も多数ヒットするので,いわゆる通常のマクロを使いたくないならご利用になってみては。
お礼
御回答いただき誠に有難うございました。 上手くできました。 それぞれに頂いたご指導で迷いました。 どれもよくて。 追伸 いつもご指導いただき感謝の気持ちでいっぱいです。 またお礼が遅くなり誠に申し訳ありません。
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
逆に色を塗るのにルールがあれば条件付き書式が使えます。 基礎編と数式編 http://www.becoolusers.com/excel/conditional-formatting.html http://www.becoolusers.com/excel/conditional-formatting-fx.html 参考まで
お礼
参考のアドレスを提示していただきありがとうございました。 お礼が遅くなり申し訳ありませんでした。
補足
説明不足でお許しください 条件は特にありません。 見た目でわかりやすくするために色で区分けしているだけです。
お礼
2つの方法の御教示をいただきありがとうございました。 お礼が遅くなり申し訳ありませんでした。 作業をする人たちに聞いて、 下記の方法を採用させていただきました。 「手作業で色を付けている場合のコードです」