プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になります。
Win7 Excell2010 です。

背景色のついたセルを関数でカウントしたく色々と調べました。
マクロでは知識不足の私なのでなんとか関数でと思ったのですができないようです。
何かいい方法で関数ではやはり無理でしよう

カウントするには関数か若しくはVBAでご指導仰ぎたいです。
私としては申し訳ないですが知識がなく是非ご協力いただけないでしょうか。

お願いは、例えば
B7 ~ B17 で “青色” B125=1
C7 ~ C17 で “青色” C125=2
D7 ~ D17 で “赤色” D125=1
 のようにカウントができればいいです。

よろしくお願いします。

「背景色のカウント方法」の質問画像

A 回答 (5件)

回答ふえとる・・・かぶった。

関数名まで(苦笑
    • good
    • 5

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
    • good
    • 2
この回答へのお礼

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

お礼日時:2014/01/25 21:55

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マクロを使った方法も多数ヒットするので,いわゆる通常のマクロを使いたくないならご利用になってみては。
    • good
    • 0
この回答へのお礼

御回答いただき誠に有難うございました。
上手くできました。
それぞれに頂いたご指導で迷いました。
どれもよくて。

追伸
いつもご指導いただき感謝の気持ちでいっぱいです。
またお礼が遅くなり誠に申し訳ありません。

お礼日時:2014/01/25 21:53

こんばんは!



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
    • good
    • 0
この回答へのお礼

2つの方法の御教示をいただきありがとうございました。

お礼が遅くなり申し訳ありませんでした。

作業をする人たちに聞いて、
下記の方法を採用させていただきました。
「手作業で色を付けている場合のコードです」

お礼日時:2014/01/25 21:48

逆に色を塗るのにルールがあれば条件付き書式が使えます。


基礎編と数式編
http://www.becoolusers.com/excel/conditional-for …
http://www.becoolusers.com/excel/conditional-for …
参考まで

この回答への補足

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

補足日時:2014/01/24 20:35
    • good
    • 1
この回答へのお礼

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

お礼日時:2014/01/25 21:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!