![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
いつもお世話になります。
Win7 Excell2010 です。
背景色のついたセルを関数でカウントしたく色々と調べました。
マクロでは知識不足の私なのでなんとか関数でと思ったのですができないようです。
何かいい方法で関数ではやはり無理でしよう
カウントするには関数か若しくはVBAでご指導仰ぎたいです。
私としては申し訳ないですが知識がなく是非ご協力いただけないでしょうか。
お願いは、例えば
B7 ~ B17 で “青色” B125=1
C7 ~ C17 で “青色” C125=2
D7 ~ D17 で “赤色” D125=1
のようにカウントができればいいです。
よろしくお願いします。
![「背景色のカウント方法」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/0/284849_5497cd7e1bf6a/M.jpg)
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
2つの方法の御教示をいただきありがとうございました。
お礼が遅くなり申し訳ありませんでした。
作業をする人たちに聞いて、
下記の方法を採用させていただきました。
「手作業で色を付けている場合のコードです」
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
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マクロを使った方法も多数ヒットするので,いわゆる通常のマクロを使いたくないならご利用になってみては。
御回答いただき誠に有難うございました。
上手くできました。
それぞれに頂いたご指導で迷いました。
どれもよくて。
追伸
いつもご指導いただき感謝の気持ちでいっぱいです。
またお礼が遅くなり誠に申し訳ありません。
No.1
- 回答日時:
逆に色を塗るのにルールがあれば条件付き書式が使えます。
基礎編と数式編
http://www.becoolusers.com/excel/conditional-for …
http://www.becoolusers.com/excel/conditional-for …
参考まで
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】フォルダ内にあるPDF...
-
Excelで数値を時間数に変換する...
-
Excelの条件付き書式について
-
Excelシートに画像を貼る時
-
Excelの警告について
-
エクセルまたはGoogleスプレッ...
-
【Excel】版が同じ事を示す番号...
-
GoogleスプレッドシートでA1に...
-
【マクロ】functionプロシージ...
-
エクセルでファイルの最終更新...
-
エクセルの数式バーのフォント...
-
Excelについて
-
EXCELの散布図で日付が1900年に...
-
エクセルの問題です。絶対値の...
-
【マクロ】for nest について ...
-
EXCELで数値が異なった数字を足...
-
セルの数を求めたい
-
Excelの数式について教えてくだ...
-
【マクロ】 IFERROR関数をマク...
-
googleのスプレッドシート
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの数式バーのフォント...
-
エクセルでファイルの最終更新...
-
2列に入っているデータを1列...
-
データチェックを行うエクセル...
-
再質問です。マクロの修正箇所...
-
エクセルで 自動的に◯や数字を...
-
数字入力後他の文字等が表示さ...
-
Excel 小さくなったスクロール...
-
F9キーについて。
-
【ExcelVBA】ダブルクォーテー...
-
Excelに詳しい方! B列が「日...
-
セルの数を求めたい
-
Excelを無料で使うには? パソ...
-
IFとIFS関数
-
【Excel】別シートから条件に合...
-
EXCELの散布図で日付が1900年に...
-
ある表にフィルターをかけて出...
-
【ExcelVBA】名前を付けて保存→...
-
Excelセルを跨いで合計を出す方法
-
エクセルのツールバーから数値...
おすすめ情報