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

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

エクセル2002を使用していますが、特定の色が付いたセルの個数を数えたいのです。
同時に「色が付いてあるセルを数える」に加えて、「色を付けたら直後、そのセルの個数が数えられる」ようにしたいのです。
「色が付いたセルの引数を数える」というのは分かるのですが、「セルだけの合計」となると分かりません…。

以前にも質問しましたが、結局分からず終いでしたので、改めてお願い致します。

例題)A1~G1を赤で色付けした時に、赤色の付いたセルの個数をA2に出す。
理想とする結果) A2に赤色のセルの合計「7」が出た。

A 回答 (5件)

ユーザー定義関数による方法です。



一般の関数のような使い方で、指定した色のセル数をカウント出来ます。
色を変更し、<Enter>等で他のセルに移動した時点で再計算します。

書式: CCount(範囲,色番号(カラーインデックス))
使用例 : CCount(A1:A100,3)   A1:A100範囲の赤色をカウント
(赤=3 ですが、他の色の番号を知るには、後述の GetIndx関数で調べられます。)

これで良かったら、詳しく操作手順を書きますので、新しいブックでテストして
みてください。

VBAコード設定方法
1.Alt + F11 で VBE(Visual Basic Editor)を開きます。
2.VBE のメニューから[挿入] -->[標準モジュール] を指定します。
3.モジュールウィンドウに下記コードをコピーして貼り付けます。
4.Alt + Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。
5.メニューから[ツール]-->[マクロ]-->[セキュリティ]で「セキュリティレベル」を
 「中」にして[OK]します。

Function CCount(Rng As Range, idx)
Dim R As Range
Dim Cnt As Long
Application.Volatile
For Each R In Rng
  If R.Interior.ColorIndex = idx Then Cnt = Cnt + 1
Next R
CCount = Cnt
End Function

Function GetIndx(Rng As Range)
If Rng.Count > 1 Then
  GetIndx = vbNullString
  Exit Function
End If
GetIndx = Rng.Interior.ColorIndex
End Function

'---------------------------------------
◎ 各色のカラーインデックスを調べる関数(付録)
コード後半は、GetIndx関数は、カラーインデックス番号を調べる関数です。
必要なときに使ってみてください。

使い方例: A1をインデックス番号を調べたい色で塗り潰します。
例えば、セルA1を任意の色で塗り潰し、B1に
 =GetIndx(A1) を入力するとそのカラーインデックス番号が表示されます。

----------------------------------------
※ CCount関数を自動再計算に対応させる設定

 色を変更しただけでは、再計算されませんので Enter等でセルを移動した時点
 で、再計算されるようにします。(シートモジュールに記述)

【 操作手順 】
・この関数を使用しているシートのシート名タブを右クリックして「コードの表示」を
 指定します。
・開いたコードウィンドウに下記コードをコピーして貼り付けます。
・Alt+ Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Calculate
End Sub

この回答への補足

お世話になります。
教えて頂いたとおりに行ないました所、完璧に出来ました!!凄いです!!
この数ヶ月、満足が得られない結果のまま過ごしてきましたが、今回の回答は本当に満足のいくものであり、大変、感謝しております。
誠にありがとうございました!!

補足日時:2004/07/03 23:18
    • good
    • 9
この回答へのお礼

お返事、有難うございます。
しかもこんなにご丁寧に教えて頂けるなんて感動です!!
早速、試してみたいと思います!!

お礼日時:2004/07/01 15:32

参考になるかどうか分かりませんが、下記URLご参照下さい。



参考URL:http://www.katch.ne.jp/~kiyopon/soft/index.htm
    • good
    • 0
この回答へのお礼

お返事、有難うございます。
教えて頂いたURLを参照しました。
今回の質問には大きく役立ちそうではありませんでしたが、エクセルの色々な手段が載っていて面白かったです。

お礼日時:2004/07/01 15:41

(1.セルに色を付ける基準)


(1)条件付き書式などで、セルの値(数値や文字列)で
色をつけている場合は、その値を使って、COUNTIF
、SUMIFやSUMPRODUCTその他の関数で
件数や合計が出せる場合があります。
(2)そうではなくて、人間の総合的な判断でセルに色を付ける場合は、関数式で判別しようがないので、関数式では不可能です。
(3)関数式では、もともとセルの色や書式を設定出来ないのがエクセルの基本原則です。
(2.即時性)>色を付けたら直後、・・・
(1)関数では、値を変えると、基本は即時に再計算され、結果が更新されます。しかし、上記1で述べたように
関数でセル色を捉えることが出来ない(旧いバージョン
での出来る回答があるかもしれないが)ので、これも難しい。
(2)VBAでやればセル色の判断や合計、件数カウントは出来るが、セル書式の変化を捉える「イベント」がエクセルに設けられていないので、1.(1)以外では難しい
と思います。
(3)そういう合計、件数カウントの計数を欲しい時に
ボタンクリックなどの「イベント」をあたえる、労を我慢するならば、VBAで小数行のコードで可能です。
Private Sub CommandButton1_Click()
Dim cl As Range
t = 0
c = InputBox("赤=3,緑=4、黄=6,ブルー=8")
For Each cl In Range("A1:G5")
If cl.Interior.ColorIndex = Val(c) Then
t = t + cl
End If
Next
Range("A6") = t
End Sub
(1)シート上にコマンドボタンを1つ貼りつけ、ダブルクリックして出てくるVBE画面に、上記を貼りつけてください。
(2)対象セル範囲は Range("A1:G5")を適当に変えること。
(3)計数をセットするセルはRange("A6") を適当に変えること。
(4)InputBox("赤=3,緑=4、黄=6,ブルー=8")
はColorIndexを調べて、適当に増やしてください。
ColorIndexは
Sub test02()
For i = 1 To 50
Cells(i, "A").Interior.ColorIndex = i
Next i
End Sub
を実行して、どんな色かシート上で見てください。
(5)セル数ならt = t + clをt = t + 1に変えてください。
(6)実行はシートのボタンをクリックすると実行されます。
    • good
    • 2
この回答へのお礼

お返事、有難うございます。
色々な方からのご回答を頂き、大変、感謝しています。
私のレベルでは相当困難な課題だと認識してはいるのですが、どうしても「数えたい」のです。
とりあえず、教えて頂いた方法も試してみたいと思います。(正直なところ、レベルが高く、回答の内容を理解するにも一苦労です)

お礼日時:2004/07/01 15:39

エクセルでカラー属性の判定はできません。


私は37年間情報処理会社におりましたが、定年を迎えるまでついに「できます」という話を聞けませんでした。
また、VB等でセル背景色の識別をするときは色を数字で指示する必要があります。例えば#FF0000であれば赤、#00FF00であれば緑、#0000FFであれば青…といった知識がないとあつかえません。老婆心ながらVBでおやりになることを想定して、赤色コード(#FF0000)を例示しておきました。
    • good
    • 1
この回答へのお礼

お返事、有難うございます。
他の方から教えて頂いた方法で試してみたいと思います。
それにしても「セルの色を数える」…単純そうに思えるのですが、シンプルなものほど難しいのでしょうか…。

お礼日時:2004/07/01 15:35

Excelの関数のみでセルの色の判定を行うのは難しいかも・・・


赤に色つけを行う判定条件をカウントすればワークシート関数のみで可能と思われます。

なお、VBAならばColorプロパティで判断できると思います。
    • good
    • 0
この回答へのお礼

お返事、有難うございます。
やはり、通常の関数では難しいですよね…。

お礼日時:2004/07/01 15:30

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

このQ&Aを見た人はこんなQ&Aも見ています