- ベストアンサー
条件付き書式で色塗りしたセルをカウントする方法
- 条件付き書式で色塗りされたセルをカウントする方法を知りたいです。色のついたセルをカウントするために、マクロを使用するか他の方法を教えてください。
- A1:Y30の表について、1行ごとに色塗りされたセルをカウントしたいです。結果はZ1,Z2,Z3,Z4...に表示される形にしたいです。COUNTIF関数は使用せずに、他の方法で色塗りセルのカウントを行いたいです。
- 条件付き書式でセルを色塗りし、それぞれの行で色塗りされたセルの数をカウントしたいです。色塗りされたセルのカウント結果は、Z1,Z2,Z3,Z4...といった形で表示したいです。マクロを使用するか、他の方法を教えてください。
- みんなの回答 (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.. というわけにはいかないですけどね。要件を整理しなきゃ。
その他の回答 (5)
- tsubuyuki
- ベストアンサー率45% (699/1545)
伝え忘れ。 「行」と「列」の区別は“ハッキリ”させたほうが今後のために良いですよ。 では、失礼。
- tsubuyuki
- ベストアンサー率45% (699/1545)
つまり、 > ちなみに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、という形でご回答いただければ大変助かります。 「作らされている」感が満載なので、これを以って私は本件からは撤退します。 あとは適宜応用するなり、親切な回答者さまの回答をお待ち下さい。
- end-u
- ベストアンサー率79% (496/625)
>これを標準モジュールに張り付けて実行すれば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までコピー、という話なんですが。
補足
試しにやって気づきましたが、これだと、一列おきに入っているカウントしたくないところも入りますよね。だから、色付きセルのみカウントできるマクロが知りたかったのです。
- end-u
- ベストアンサー率79% (496/625)
「条件付き書式」の結果、色が塗られたセルをカウントするには。 通常の書式設定で色が塗られたセルをカウントする方法と同じやり方ではできません。 # ウラ技的に書式を固定してあげればできない事はないですが # それはおいといて。 「条件付き書式」の対象セル範囲を調べて「条件付き書式」の「条件」が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、という形でご回答いただければ大変助かります。 よろしくお願いします。
- tsubuyuki
- ベストアンサー率45% (699/1545)
正直なところを言わせて頂くと > マクロに詳しくないので、どう利用したらよいかわかりません。 なら、マクロは使わないほうが良いですよ。 理解できないものを理解できないまま使っても後の応用は出来ません。 手直しも出来ませんし、自分好みにカスタマイズすることも出来ませんから。 踏まえて、「マクロの使い方」までお教えするつもりはありませんが、 わかりやすく(?)注釈をつけたコードです。 難しい文は使っていないつもりです。 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」が入力されてしまいます。
お礼
「一行おき」と補足に書いたのは間違いでした。最初の質問に書いた通り「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)) もう諦めようと思っていましたが、本当に助かりました。ご親切に教えてくださり、本当にありがとうございました!