親子におすすめの新型プラネタリウムとは?

数値がランダムに入っている表に条件付き書式で指定の数式に合致するとセルを色塗りするよう設定しあります。その色塗りしたセルをカウントするにはどうすればよいか検索していましたら、下記にマクロでの手法が説明されていましたが、マクロに詳しくないので、どう利用したらよいかわかりません。

http://keep-on.com/excelyou/1999lng4/199908/9908 …

たとえば、A1:Y30の範囲の表があるとして、1行ごとに色塗りしたセルをカウントしたいです。Z1,Z2,Z3,Z4...にそれぞれ結果が表示されるようにするには、上記のマクロ(もしくは違う方法)をどのように使用したらよいんでしょうか?

ちなみに1列おきにカウントしたくない列が入っているので、COUNTIF関数を使わないでやりたいんです。色のついたセルを定義してやる方法もありましたが、条件付き書式では不可能とわかりましたので、上記の方法しかないのかなと思うんですが。詳しい方、教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

>ちなみに1列おきにカウントしたくない列が入っているので、..


>また、一行おきにカウントしたくない列が含まれているというのは..
>「一行おきに」色つきセルをカウントというのは..

..ぅーん.. -"-
「1行おき」かつ「1列おき」にカウント対象外セルがある、という意味ですかね?
つまり
B2,D2,F2,H2,J2,L2,N2,P2,R2,T2,V2,X2
B4,D4,F4,H4,J4,L4,N4,P4,R4,T4,V4,X4
...?
Z1はさっきの数式で
Z2=SUMPRODUCT((A2:Y2>=$AA$1-5)*(A2:Y2<=$AA$1+5)*MOD(COLUMN(A2:Y2),2)+(A2:Y2>=$AA$1+25)*(A2:Y2<=$AA$1+35)*MOD(COLUMN(A2:Y2),2))
Z1:Z2をZ30までコピー。

1行おきではなく全行で偶数列がカウント対象外ならZ2の式をZ1:Z30コピーで。



マクロにしたところで
Sub try()
  Dim i As Long
  Dim j As Long
  Dim c As Long
  Dim x

  With Sheets("SheetX")
    x = .Range("AA1").Value
    For i = 1 To 30
      c = 0
      For j = 1 To 25 'Step 2
        If (i Mod 2) Or (j Mod 2) Then
          With .Cells(i, j)
            If (((x - 5) <= .Value) And (.Value <= (x + 5))) Or _
              (((x + 25) <= .Value) And (.Value <= (x + 35))) Then
              c = c + 1
            End If
          End With
        End If
      Next
      .Cells(i, 26).Value = c
    Next
  End With
End Sub
>標準モジュールに張り付けて実行すればOK..
というわけにはいかないですけどね。要件を整理しなきゃ。
    • good
    • 0
この回答へのお礼

「一行おき」と補足に書いたのは間違いでした。最初の質問に書いた通り「1列おき」にしたかったのです。それも偶数列に。混乱させてしまいすみませんでした。
書いていただいた数式で試したら奇数列のみカウントされたので、自分で調べて手直ししたらできました‼↓(MODに=0を入れました)

=SUMPRODUCT((A1:Y1>=$AA$1-5)*(A1:Y1<=$AA$1+5)*(MOD(COLUMN(A1:Y1),2)=0)+(A1:Y1>=$AA$1+25)*(A1:Y1<=$AA$1+35)*(MOD(COLUMN(A1:Y1),2)=0))

もう諦めようと思っていましたが、本当に助かりました。ご親切に教えてくださり、本当にありがとうございました!

お礼日時:2013/06/19 18:40

伝え忘れ。




「行」と「列」の区別は“ハッキリ”させたほうが今後のために良いですよ。


では、失礼。
    • good
    • 0

つまり、


> ちなみに1列おきにカウントしたくない列が入っているので、
「1行おきに」のカウントですね?


だとすると

Sub Sample()
Dim myCnt As Long '変数を長整数型で宣言
Dim i As Long, J As Long

    Columns(26).Delete
    For i = 1 To 30 Step 2
        myCnt = 0
        For j = 1 To 25
            Cells(i, j).Select
            If Application.Evaluate(Cells(i, j).FormatConditions.Item(1).Formula1) = True _
                Or Application.Evaluate(Cells(i, j).FormatConditions.Item(2).Formula1) = True Then
                myCnt = myCnt + 1
            End If
        Next j
        Cells(i, 26) = myCnt
    Next i 
End Sub 




> やってみたのですが、Z列すべてに「13」が入力されてしまいます。
> これを標準モジュールに張り付けて実行すればOK、という形でご回答いただければ大変助かります。

「作らされている」感が満載なので、これを以って私は本件からは撤退します。
あとは適宜応用するなり、親切な回答者さまの回答をお待ち下さい。
    • good
    • 0

>これを標準モジュールに張り付けて実行すればOK、という形でご回答いただければ大変助かります。


いやそこまでしなくてもZ1セルに数式
=SUMPRODUCT((A1:Y1>=$AA$1-5)*(A1:Y1<=$AA$1+5)+(A1:Y1>=$AA$1+30-5)*(A1:Y1<=$AA$1+30+5))
以下Z30までコピー、という話なんですが。

この回答への補足

試しにやって気づきましたが、これだと、一列おきに入っているカウントしたくないところも入りますよね。だから、色付きセルのみカウントできるマクロが知りたかったのです。

補足日時:2013/06/18 23:03
    • good
    • 0

「条件付き書式」の結果、色が塗られたセルをカウントするには。


通常の書式設定で色が塗られたセルをカウントする方法と同じやり方ではできません。
# ウラ技的に書式を固定してあげればできない事はないですが
# それはおいといて。

「条件付き書式」の対象セル範囲を調べて「条件付き書式」の「条件」がTRUEかどうか調べると良いです。
提示されたリンク先記事はその方針で組まれたコードです。

>数値がランダムに入っている表に条件付き書式で
>指定の数式に合致するとセルを色塗りするよう設定しあります。

その指定の数式を提示してみてください。
その数式が前もってわかってるなら、「条件付き書式」を調べなくても
元のセル範囲をその数式で判定してあげれば良いです。

ちなみに、Excelのバージョンはなんでしょう?

この回答への補足

回答ありがとうございます。

条件付き書式には、下記の条件2つが設定されています。(パターン色:黄色)

=AND(A1>=$AA$1-5,A1<=$AA$1+5)
=AND(A1>=$AA$1+30-5,A1<=$AA$1+30+5)

また、一行おきにカウントしたくない列が含まれているというのは、下記の異なる条件2つを設定しているためです。

=AND(B1>=$AB$1-5,B1<=$AB$1+5)
=AND(B1>=$AB$1-7,B1<=$AB$1+7)

ただ、こちらは、パターン色でなくて、フォント色でも対応できるので、「一行おきに」色つきセルをカウントというのはしなくても大丈夫です。(が、こちらもパターン色で表示して、一行おきに(最初の2つ条件の黄色セルだけ)カウントできれば、もっと助かります。)

エクセルのバージョンは2003です。

これを標準モジュールに張り付けて実行すればOK、という形でご回答いただければ大変助かります。
よろしくお願いします。

補足日時:2013/06/18 18:31
    • good
    • 0

正直なところを言わせて頂くと


> マクロに詳しくないので、どう利用したらよいかわかりません。
なら、マクロは使わないほうが良いですよ。

理解できないものを理解できないまま使っても後の応用は出来ません。
手直しも出来ませんし、自分好みにカスタマイズすることも出来ませんから。


踏まえて、「マクロの使い方」までお教えするつもりはありませんが、
わかりやすく(?)注釈をつけたコードです。
難しい文は使っていないつもりです。

Sub Sample()
Dim myCnt As Long '変数を長整数型で宣言
Dim i As Long, J As Long

    Columns(26).Delete '念のため、26列目(X列)を削除
    For i = 1 To 30 ' 変数iの範囲は1~30(後に行指定に使用)
        myCnt = 0 ' 変数myCntを初期化(0にする)
        For j = 1 To 25 Step 2 ' 変数jの範囲は1~25(後に列指定に使用) 周期は「2」、つまり「1列おき」に処理)
            If Cells(i, j).FormatConditions.Count > 0 Then ' i行j列に「一つ以上の条件付書式が設定」されていたら
                myCnt = myCnt + 1 '変数myCntに「1」を加算
            End If ' 条件終了
        Next j ' jに「2」(Stepで指定した数)を加算して、繰り返し(上限の25に達したら繰り返し終了)
        Cells(i, 26) = myCnt ' i行26列目にmyCntの値を入力
    Next i ' iに「1」を加算して、繰り返し(上限の30に達したら繰り返し終了)
End Sub 'マクロ終了


重ねて言いますが、理解できないなら使わないほうが良いですよ。
私が「悪質な回答者」なら、このマクロでファイルを壊す可能性もあるのですから。
(そんな無益なことはしないですけどね。)



マクロの使い方、命令文の意味などは、別途コツコツ勉強なさって下さい。

この回答への補足

やってみたのですが、Z列すべてに「13」が入力されてしまいます。

補足日時:2013/06/18 18:29
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q条件付書式で色づけしたセルの数をカウントしたい

WINDOWS XP EXCELL 2003です。
いつもお世話になります。

それそれのタイトル行に 7~556の行があり、
在庫警告  D列  条件付書式で =E7<BS7 で赤色に塗りつぶしに
在庫数   E列  =F7-G7+BR7
注文    F列  =SUMPRODUCT((H7:BQ7)*(MOD(COLUMN(H7:BQ7),2)=1))
出荷    G列  =SUMPRODUCT((H7:BQ7)*(MOD(COLUMN(H7:BQ7),2)=0))
適正在庫数 BS列 数値を入力

何かいい方法をと思い色々調べましたが私が必要としているものが中々見つかりません。
条件付書式で =E7<BS7 で試行錯誤しました。
例えば 条件付書式で =(E7<BS7=”1”,””) とかで1がでればとCOUNT関数でできないとか 全然駄目ですよね。

御指導を仰ぎたいのは

E列の条件付書式で赤と塗りつぶされたセルの数をカウント

ができたらと思いますが何かいい方法はありませんでしょうか。
可能ならよろしく御願いします。

WINDOWS XP EXCELL 2003です。
いつもお世話になります。

それそれのタイトル行に 7~556の行があり、
在庫警告  D列  条件付書式で =E7<BS7 で赤色に塗りつぶしに
在庫数   E列  =F7-G7+BR7
注文    F列  =SUMPRODUCT((H7:BQ7)*(MOD(COLUMN(H7:BQ7),2)=1))
出荷    G列  =SUMPRODUCT((H7:BQ7)*(MOD(COLUMN(H7:BQ7),2)=0))
適正在庫数 BS列 数値を入力

何かいい方法をと思い色々調べましたが私が必要としているものが中々見つかりません。
条件付書式で =E7<BS7...続きを読む

Aベストアンサー

条件付き書式の「結果を」拾い上げる方法はありません(マクロを使っても不可能です)が,ご質問でやりたい事は結局
>7~556の行があり、
>在庫警告  D列  条件付書式で =E7<BS7 で赤色に塗りつぶし

つまりこの行範囲で,E7<BS7 となっている行の個数を数えたいというお話に他なりません。

計算式:
=SUMPRODUCT((E7:E556<BS7:BS556)*1)


もちろんもっともっとシンプルイズザベストに,たとえばBT行に
BT7:
=IF(E7<BS7,1,0)
のように数式を記入し,
=SUM(BT7:BT556)
のように計算してしまえば十分OKです。

Qエクセル・・色の着いたセルの個数を数える関数はある?

エクセルの表内で塗りつぶしされているセルだけを数える様な関数はありますか?
セルには文字や数値は入力されておらず、塗りつぶしているだけです。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

ユーザー定義関数で作ってみました。Ver4 マクロ関数で十分だと私は思いますが、Ver 4 マクロ関数ではケシカランというような方?は、以下のようなVBAでの解決方法が便利かなって思います。

VB Editor の標準モジュールに貼り付けてください。(挿入-標準モジュール)

なお、一般のブックの標準モジュールのユーザー定義関数に、Public キーワードをつけたところで、グローバル関数になるわけではありませんので、もしその点に不安のある方は、マニュアル等で、確認されたほうがよいかもしれませんね。

なお、以下は、引数のインデックスに0を入れると、配列出力するようにしてあります。

'------------------------------------
Function ColorCellCount(範囲 As Range, Optional インデックス As Integer = 1, Optional パターン As Integer = 0)
  Dim myRng As Range
  Dim myIndex As Integer
  Dim myPattern As Integer
  Dim myColor() As Integer
  Dim Ret() As Double
  Dim c As Range
  Dim i As Long
  Dim j As Long
  Set myRng = 範囲
  myIndex = インデックス
  myPattern = パターン
For Each c In myRng
   On Error Resume Next
   If myPattern = 0 Then
     i = WorksheetFunction.Match(c.Interior.ColorIndex, myColor, 0)
   Else
     i = WorksheetFunction.Match(c.Font.ColorIndex, myColor, 0)
   End If
   If i = 0 Then
     ReDim Preserve myColor(j)
     ReDim Preserve Ret(j)
      If myPattern = 0 Then
       myColor(j) = c.Interior.ColorIndex
      Else
       myColor(j) = c.Font.ColorIndex
      End If
      Ret(j) = 1
     j = j + 1
     On Error GoTo 0
     Else
      Ret(i - 1) = Ret(i - 1) + 1
   End If
  Next
  If myIndex <= 0 Then
   ColorCellCount = Ret()
  ElseIf myIndex > UBound(Ret) + 1 Then
   ColorCellCount = Ret(UBound(Ret()))
   Else
   ColorCellCount = Ret(myIndex - 1)
  End If
  Set myRng = Nothing
End Function

ワークシート上での使い方は、

A列
色付き
色なし
色なし
色付き
色付き

=ColorCellCount(A1:A5, 1 )

とすれば、上から数えて、1番目の色のセルの数が出ます。

=ColorCellCount(A1:A5, 2 )
を入れれば、色なしのセルの数が出ます。

=SUMPRODUCT(ColorCellCount(A1:A5, 0 ))

とすれば、全部の合計が出ます。

なお、
=ColorCellCount(A1:A5,1,1)

とすれば、文字の色を数えます。

こんにちは。

ユーザー定義関数で作ってみました。Ver4 マクロ関数で十分だと私は思いますが、Ver 4 マクロ関数ではケシカランというような方?は、以下のようなVBAでの解決方法が便利かなって思います。

VB Editor の標準モジュールに貼り付けてください。(挿入-標準モジュール)

なお、一般のブックの標準モジュールのユーザー定義関数に、Public キーワードをつけたところで、グローバル関数になるわけではありませんので、もしその点に不安のある方は、マニュアル等で、確認されたほうがよいかもし...続きを読む

QEXCEL 条件書式で反応したものだけCOUNTしたい

条件書式で、例えば赤字表示したものだけ、COUNTさせたい。
よろしくおねがいします。

例:データーの管理範囲外(条件書式の赤字)の数を調べる

Aベストアンサー

たぶん関数でやりたいということかもしれないが
関数はセルの「値」を判別したり、計算したりしかできない。
色はセルのフォントの「書式」に属する情報です。
色の判別をする関数が無い。
これをユーザー関数で作れば事は簡単だが。
Function cl(a)
clx = a.Font.ColorIndex
If clx = -4105 Then
cl = ""
Else
cl = clx
End If
End Function
上記はCOUNTIF関数では作業セル範囲を使わないと、使えない。
>条件書式の赤字
こういう風に「条件書式の」でつけた赤字と限定すると不可能に(近く)になるのです。質問者の場合の実態は、条件付き書式だけで色をつけているのでしょうが。
セルの文字のフォントの色というプロパティになると、赤は赤というプロパティになり、来歴は区別しにくくなるのです。
ーーー
残る手段は、VBAです。詳細は略。
ーーー
もうひとつは
条件付書式に設定した条件に戻って、注目し、COUNTIFなどに組み入れられないか考えることです。

たぶん関数でやりたいということかもしれないが
関数はセルの「値」を判別したり、計算したりしかできない。
色はセルのフォントの「書式」に属する情報です。
色の判別をする関数が無い。
これをユーザー関数で作れば事は簡単だが。
Function cl(a)
clx = a.Font.ColorIndex
If clx = -4105 Then
cl = ""
Else
cl = clx
End If
End Function
上記はCOUNTIF関数では作業セル範囲を使わないと、使えない。
>条件書式の赤字
こういう風に「条件書式の」でつけた赤字と限定すると不可能に(近く)に...続きを読む

Q【Excel】 色の一致するセル数をカウントしたい。

こんにちは。

ある条件にあてはまるセルに、書式でセルの色を設定してあります。
いくつかの条件で色分けしてあるのですが、これらのセルの色が「赤」は幾つ、「青」は幾つというふうに、
カウントすることは出来るのでしょうか。

よろしくお願いいたします。

Aベストアンサー

繰り返し何度も出てくる質問です。関数でと考えているなら、直接はできません。
VBAで中身たった1行のユーザー関数を作ればできます。
http://hp.vector.co.jp/authors/VA016119/hajimete/udf1.html
など
Googleで「エクセル セル 色 カウント」などで照会すると似た質問が出る。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1225959
にはCELL関数のことも載っているが、旧いバージョンの関数なので
私は、除外して言ってます。

Q背景色のカウント方法

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

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

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

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

よろしくお願いします。

Aベストアンサー

こんばんは!

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

こんばんは!

7~17行目の色付けは手作業でしょうか?それとも条件付き書式によって色付けされているのでしょうか?
Excel2010以降であれば、
条件付き書式で色付けされているセルが判断できる「DisplayFormatオブジェクト」が使えます。

一例です。
A列の124行目以降のセルを検索したい色にあらかじめ塗りつぶしておいてください。

Sheetモジュールです。
尚、1行目は何らかのデータが入っているという前提です。
(A列の最終行を取得するために、ダミーでもよいので1行目に何らかのデータが必要です)

まず...続きを読む

QエクセルVBAで条件付書式の色を取得

セルに条件付書式で書式設定してあります。

A1は「値」100以下
A2は「値」500以下
A3は「値」1~10の間
B1は「数式」で=B1<A1
以下さまざまな数式があります。

条件に一致すると、セルの文字が「赤」になります。

このとき、
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox Target.Font.ColorIndex
End Sub
を実行しても、ColorIndexは、赤の「3」ではなく「-4105」と表示されます。
「-4105」は何もフォントの色を指定してないセルでも同じく表示されます。

質問1.条件付書式で、条件が一致して表示されたフォントの色は取得できないのでしょうか?

質問2.-4105とは何でしょうか?

Aベストアンサー

merlionXXさん、いつも、スレッドでおさがわせしてすみません。

今回は、別なところで、KenKen_SPさんのコードに感化されまして、私としては、良い勉強させていただいております。

さて、
>No4で教えていただいたコートが「数式が」しか対応しないなら、条件付書式の方を「セルの値が」を「数式が」に変えてやればいいわけですよね?

#9 のコードは、「数式が」でも、「セルの値が」でも、両方使えるはずだと思って作っております。

If .FormatConditions(i).Type = 2

というところで、振り分けをしています。

>「値」の定義?(等しい、間、以上、以下等)ってすべて数式で表せますよね?

一応、すべて当たってみたつもりですが、なにぶんにも夕飯前でしたので、万が一にも、おかしいようでしたら、
FormatCndOperand 関数の myOperand の中の配列の中にある文字列の等号式がおかしいことになります。

Qエクセル 塗りつぶししたセルの個数をカウントしたい

表の集計で、【セルの色を塗りつぶして区別したデータの個数】を、カウントする方法を教えて下さい。

事例ですが、飲食店の月間の宴会データ作成で、売上・客数・組数など集計表に数値で表示されているものは、SUM、COUNT関数で求めています。

質問は、【送迎付きの宴会】データがあり、集計表に数値ではなく【セルの塗りつぶし】で記録されています。目視で数えるのがめんどくさいため、この塗りつぶしの個数をカウントする良い方法がありましたら教えて下さい。

Aベストアンサー

マクロを使わない限り関数で色を指定してセルの数を数えることはできません。次のようにしてはどうでしょう。
Ctrlキーを押しながらFキーを押します。
「検索」のタブで「検索する文字列」は空白のままで「書式」をクリックします。
「パターン」タブでセルの色を選択しOKします。
元の画面で「すべて検索」をクリックすれば下方にどのセルがその色になっているかが表示されると同時に一番下の枠部分には例えば「3セルが見つかりました」のように表示されます。それが答えとなりますね。
このような操作をマクロの記録で取ることでマクロの操作からセルの数を数えることもできるようになるでしょう。

QexcelのCOUNTIF関数で、『範囲=色のついたセル』に設定したいです。

excelのCOUNTIF関数で、『範囲』の設定で、『ある一定の範囲内の色のついたセル』を
範囲として選択したい場合、どのように操作したらよいでしょうか?

たとえば、A1~A30までのセルの中で、A9、A10、A18、A19、A20、A29、A30のセルが赤で、
そのうちのA10、A18、A29、A30に「○」の記号が入っていて、その○の数を調べたい場合です。

ご存知の方、よろしくお願いいたします。

Aベストアンサー

ワークシート関数ではセルの「色番号」は取得できません。
マクロ(ユーザ定義関数)が必要です。

ユーザ定義関数で「背景色が赤で、文字列が○のセル」を数えることも可能ですが、質問は「例えば」で書かれていそうなので、あまりきっちりとマクロを書くと修正が必要になりそうです。
そこで汎用的に使えそうな「手抜きバージョン」で回答します。

まず以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。

Function Cidx(ByVal trg As Range) As Integer
 With trg.Cells(1, 1).Interior
   If .ColorIndex = xlNone Then
     Cidx = 0
   Else
     Cidx = .ColorIndex
   End If
 End With
End Function

次にVBE画面を閉じてワークシート画面に戻り、
 =Cidx(A1)
の式を1行目の空いている列(例えばB列)に入力し、30行分下にコピーします。するとA列のセルの「色番号」が表示されます(背景色なしは0)
ただしセルに値を入力した後で背景色を変更した場合は、ユーザ定義関数の結果は自動的に変わりません。Alt+Ctrl+F9で強制再計算させる必要がありますのでご注意ください

後は別の関数で赤色(色番号=3)で「○」印があるセルをカウントします
 =SUMPRODUCT((A1:A30="○")*(B1:B30=3)*1)

ワークシート関数ではセルの「色番号」は取得できません。
マクロ(ユーザ定義関数)が必要です。

ユーザ定義関数で「背景色が赤で、文字列が○のセル」を数えることも可能ですが、質問は「例えば」で書かれていそうなので、あまりきっちりとマクロを書くと修正が必要になりそうです。
そこで汎用的に使えそうな「手抜きバージョン」で回答します。

まず以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい...続きを読む

Q(EXCEL)CELLの色をカウントする。

エクセルの関数で、CELLの色パターンを数えたりできるのでしょうか。例.セルのパターンが赤色のものをカウントするなど。

Aベストアンサー

#1さんの方法が本道だと思いますが、
「なぜ、そのセルを赤にしたのか?」を判定条件にしたらCOUNTIF関数等でもカウントできませんか?

QEXCELで、色つきセルだけカウントしたい

エクセルで「条件付書式」を使って、セルに色がつけてあります。
その色が付いたものだけを、カウントして、件数を表示させたいのです。色つきセルが、3個なら、別のセルに、3というぐあいに…可能でしょうか?

Aベストアンサー

#02です
それでは折衷案で、シートの条件付き書式が設定してあるセルの値が「ある値」と同じ場合にカウントするのではどうですか?

シートを一旦保存した後で、以下のマクロを「シート名右クリック」→「コードの表示」で開く画面に貼り付けてください。その後すぐに3行目、4行目のセルアドレスを実際のシートに合わせて変更してください。(サンプルではA4,A5としています)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, clCount As Long
Const trgADRS As String = "A4" '「ある値」のセルアドレス
Const setADRS As String = "A5" '結果を格納するセルアドレス
 For Each c In ActiveSheet.Cells.SpecialCells(xlCellTypeAllFormatConditions)
  If c.Value = Range(trgADRS).Value Then
   clCount = clCount + 1
  End If
 Next
 Range(setADRS) = clCount
End Sub

シートに戻ってどこかのセルの値が変わったタイミングで結果が表示されます。

#02です
それでは折衷案で、シートの条件付き書式が設定してあるセルの値が「ある値」と同じ場合にカウントするのではどうですか?

シートを一旦保存した後で、以下のマクロを「シート名右クリック」→「コードの表示」で開く画面に貼り付けてください。その後すぐに3行目、4行目のセルアドレスを実際のシートに合わせて変更してください。(サンプルではA4,A5としています)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, clCount As Long
Const trgADRS As String = "A4" ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング