• 締切済み

(EXCEL)CELLの条件付き書式で色をつけたセルをカウントする。

(EXCEL)CELLの条件付き書式で色をつけたセルをカウントしたいのですが、適切なVBAはありますか?私はVBAは初心者中の初心者です。よろしくお願いします。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

#3の回答者です。 ダメならダメで結構なのですが、曲がりなりにもある時間を費やして、#3 でVBAの回答した私に対して、なぜ、そのようにコメント避けたのは分かりません。#3 で書いたように、元の質問を元にしては、VBAでは、情報が足りなくて、解決に完全な見通しは立たないということです。 いずれにしても、サンプルとしてレイアウトを示してもらったほうが早いかもしれません。回答者のいろんな想像に対して、あれこれ書いても、おそらく、情報が不足していて、うまく行かないような気がします。 たとえば、#4の補足の中の、B1 の同じセルに、残業時間と休日出勤があるのか、同じものなのか、良く理解できません。 B1が1月の残業時間、 B1が月の休日出勤時間、 C1がその2つの合計時間です。 おそらく、どこかに項目欄(例えば、A列)があるなら、SUMPRODUCT で、 =SUMPRODUCT((A1:A100="項目")*(B1:B100>=42)) 条件:42 (時間) とすれば、カウントすることが出来るかと思います。

noname#77845
noname#77845
回答No.5

#1です。 そうゆう配置になっているなら、いったん最終行でそれぞれの列のCOUNTIFをとり、その合計を計算した方が簡単でしょうね。 500人いるなら、D501セルに一月分の小計 =COUNTIF(D1:D500,">42") として、それを3列おきにコピーし12月の小計の後で501行目の合計を求めればOKでしょう。

imadai
質問者

補足

ご回答ありがとうございます。それだと例えば1月の休日の労働時間で42時間を越えた場合、休日労働時間とその月の合計労働時間で2回とカウントされてしまうのです。あくまで私がとりたいのはその月の合計労働時間において42時間以上かどうかなんです。でもその内訳である労働時間と休日労働時間の内訳も違う種類のカウントのときに必要なので、できれば消さずに今回の計算ができないか模索中です。 親身にご相談にのっていただき感動です。 もしかしたら無理なのかもしれないと思っています。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

条件付き書式で色をつけた根拠は (1)セルの値(の大小など)で色をつけたに違いない。 質問ではその条件を書いてくれれば考えやすかったが。 (A)そこでその条件をVBAのIF文やCASE文に置き換えてプログラムを組みカウントする方法もある。 例データ 11 2 21 15 25 8 9 33 コード Sub test01() Dim a(5) For i = 1 To 8 x = Cells(i, "A") Select Case x Case Is > 40 a(1) = a(1) + 1 Case Is > 30 a(2) = a(2) + 1 Case Is > 20 a(3) = a(3) + 1 Case Is > 10 a(4) = a(4) + 1 Case Else a(5) = a(5) + 1 End Select Next i For i = 1 To 5 MsgBox "a" & i & "= " & a(i) Next i End Sub 配列は0に初期化がよいかも。 8を自動的に採ることはできるが初心者あてなので略。 (B)上記のことは条件付書式の色はとりあえず、置いといて、そのの条件の量的な面に注目して、それに基づいて関数で該当分の件数を数えル方法もあるということだ。 上例でやると 右は関数式の内容 0 =SUMPRODUCT((A1:A8>40)*1) 1 =SUMPRODUCT((A1:A8<=40)*(A1:A8>30)*1) 2 =SUMPRODUCT((A1:A8<=30)*(A1:A8>20)*1) 2 =SUMPRODUCT((A1:A8<=20)*(A1:A8>10)*1) 3 =SUMPRODUCT((A1:A8<=10)*(A1:A8>0)*1) 2007ならSUMIFSが使えるかも (2)既にセルなりに設定されている色でカウントするら やはりIF文やCASE文でプログラムコードを組む方法もある。 条件付書式は3種以下なので上例は不適当だが Colorindexについて、上記(1)(A)のような(そっくりの)プログラムを組めばよい。 Select Case x をSelect Case Cells(i,"A").interior。Colorindex  にして。 ーー しかし>VBAは初心者中の初心者です、なら上記のことも判らないかも知れないと思う。 配列 繰り返し Case文 件数の取り方(該当したとき+1) など経験者にはなんでもないことが、わかるかな。

imadai
質問者

補足

ご回答ありがとうございます。私は会社の総務をしています。そしてこの計算は労働時間の計算です。1行ごとに従業員が並んでいます。たとえばA1が鈴木さん、A2が佐藤さん、A3が山田さんです。列に月ごとに1月、2月、3月です。月の内訳として1月の残業時間と休日出勤時間、そしてその2つの時間の合計時間で1つの月の列が構成されています。たとえば鈴木さんであればB1が1月の残業時間、B1が月の休日出勤時間、C1がその2つの合計時間です。合計時間が42時間を越えている月が年間何回あるのかをカウントしたいのです。ですから残業時間と休日時間だけで42時間を越えているのはセルはカウントしたくないのです。計算しなければいけない従業員が500人前後、そして1年分となると計算労力が大変で困っています。ひとつよろしくお願いします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 #1/2 さんのご指摘の通りですね。理由は、条件付き書式で色のついているセルを数えるのは、セルオブジェクトの中では色を取得できませんから、難しいです。 >数えてほしくないセルである なら、そういうセルを数えて引けばよいのですが、内容的に漠然としていますから、その種の回答としては、今は不可能です。 条件式を取り出して、個別に検索したほうが、早いし簡単だと思います。VBAでは、無理とは言いませんが、極端に面倒なコードになります。 少なくとも、条件式は分かりませんので、VBAでは、条件付き書式を取り出して、それをセルに戻して判定して、True をカウントするという方法しかないと思います。しかし、これは、数式で設定された場合のみであって、私の知っている範囲では、条件付き書式のFormatConditionの、True or False の判定のプロパティは持っていなかったと思います。 なお、これは、A1 方式のみになっていますので、R1C1方式の場合は、ConvertFormula の中を変えてください。コードとして無理があるのは承知の上です。 Sub TestMacro1()   Dim c As Range   Dim v As Variant   Dim a As String   Dim i As Long   Application.ScreenUpdating = False     For Each c In Range("A1", Range("A65536").End(xlUp))     For Each v In c.FormatConditions       c.Select       a = Application.ConvertFormula(v.Formula1, xlA1, xlA1, xlAbsolute)       If a Like "=*" Then       If Not IsError(Application.Evaluate(a)) Then         i = i + 1       End If       Else         MsgBox "現在のマクロでは、この条件付き書式は取れません!", 48         Exit Sub       End If     Next v   Next c   Application.ScreenUpdating = True   MsgBox i End Sub

noname#77845
noname#77845
回答No.2

#1です。 COUNTIF関数は100以上のセルもカウントすることが出来ます。 質問者様が出来ないのは他に理由があるはずです。 「カウントしたいセルとカウントしたくないセルが同じ行にあります。条件付き書式はカウントしたい列に設定しています。そのカウントしたい列で100以上のセルの数を数えたい」 ではなく、もう少し具体的に示していただけると良い回答が付くと思いますよ。 例) A1からB2500までのセルの中にある100を超える数字をカウントしたい。 =COUNTIF(A1:B2500,">100")

imadai
質問者

補足

#1様ありがとうございます。 =COUNTIF(A1:A10,">100") で例えていいますとA1とA5、A9という3つのセルの中で100以上の数値のセルがいくつあるか表示させたいのです。 範囲指定でA1:A10としてしまうと、数えてほしくないセルであるA2,A3・・・の100以上のセルも拾ってしまうので困っています。 よろしくお願いします。

noname#77845
noname#77845
回答No.1

VBAじゃなきゃだめですか? 条件付書式で色を付けたのなら、COUNIFでその条件を設定すればカウントできると思いますが…。

imadai
質問者

補足

ご回答ありがとうございます。カウントしたいセルとカウントしたくないセルが同じ行にあります。条件付き書式はカウントしたい列に設定しています。そのカウントしたい列で100以上のセルの数を数えたいため、countifではできないための質問です。

関連するQ&A

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

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

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

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

  • [Excel]条件書式

    Excel2003です。 基本的なことなのかもしれないのですが、他のセルを条件とする条件付書式の設定方法を教えてください。 例えば、 「A1」が100以上なら「A2」のセルの色をグレーにするといった具合です。 条件のセルと、書式をかけるセルが同じなら使い方は分かるのですが、これらのセルが別々になると使い方がよくわかりません。

  • EXCEL2010の条件書式について

    EXCEL2010の条件書式について質問させてください。 初心者用にローマ字の練習表を作っています。 か行の「か」を表示するA1のセルには 黒の文字色でKAと入力されていて、 さらに黒の塗りつぶしがされ見えなくなっているとします。 空白だったA2に正しくKAと入力された場合、 A1の塗りつぶしが黄色になるというようなことは、 条件付き書式で可能でしょうか?

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

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

  • EXCEL2007セルの色を数式で取得したい

    EXCEL2007セルの色を数式で取得したい EXCEL2007で条件付き書式を使って現在使って特定の値が入っているセルを 条件付き書式を使って背景を赤色を変えるというシートを作成しました。 さらに、特定のセルをダブルクリックすると書式を水色に変わるという処理 をVBAで実現したのですが、既に条件付き書式によって赤くなっているセルの 背景色を水色に変えることができません。 つまり、書式設定した背景色が条件付き書式の背景色につぶされてしまいます。 書式設定した背景色(水色)の方を優先させたいので、条件付き書式の条件に セルの書式に背景色が設定されているときには条件外とするようにしたいのですが。 どうやって、数式で書式設定した背景色を取得できますか? もしくは、他の方法で実現できるアイデアがありましたら、紹介してください。 どうぞ、よろしくお願いいたします。

  • Excel VBA 条件付書式の条件満たすセル取得

    Excel2010のVBAで条件付書式の条件を満たすセルの番地を取得したい 具体的には、 Excel2010のあるシートのあるセル範囲(例えばA1~XFD1048576)に 条件付き書式が付けてあって、 (例えば、数式の条件が満たされたら背景色を赤色にするなど) この条件を満たすセルに指定した書式が付けられて表示されています。 この状態で、VBAで、この条件を満たしたセルの番地を、 順番に取得したいのですが、どのように記述すればよいでしょうか。 【追記】 数式をすべてのセルに入れて検出する方法や セルをひとつずつ数式に当てはめてみていく方法は、 セルが膨大なため容量的・時間的にNGです。 このため、条件付き書式で回避しています。 条件付き書式の判定結果である書式(この場合でしたら背景色が赤色) で判断する必要があります。(書式は背景色が赤色でなくてもいいです) よく分かりませんが、検索の中の書式で指定しても、 この条件付き書式の判定結果の書式はヒットしませんでした。

  • EXCEL2003 条件付き書式

    パソコン初心者です。 条件付き書式で前月の日付が入っているセルのみに色をつけたいです。 よろしくお願いします。

  • 条件付き書式について

    セルA1の値が1の時、セルA2のセルの色を赤で塗りつぶすみたいなことを 条件付き書式でできますか? 条件付き書式でなくても良いのですが、VBA以外で 自分以外のセルの値に応じて、塗りつぶす色を変えたいです。

  • EXCEL2003 条件付書式が狂ってくる

    条件付書式は、見ためにどのセルに入っているのかわからないというのと、複数の条件付書式が入ると、なぜかその前に決めていた条件付書式が消えてしまっているということがあって、なかなか不便に思っています。(やりかたが悪いのかもと思うのですが) それで、VBAの entireculumn というのを見つけたのですが、 これで対応できるでしょうか? やりたい事は、 1 2*--------------------------- 3*--------------------------- 4 5 6*--------------------------- 7*--------------------------- 上記のように、「*」をつけた行にだけ、行全体に色をつけておく、 というのを条件付書式で、 「数式が」「=$A1="*"」 としたもので、その設定をしているシートに、横にずっと、いろんな関数を入れていってます。 ですが、関数を入れたり、そのプロセスで列挿入などすると、 色がずれてしまうのです。 その回避策として、VBAで最初に色の設定をしておけないでしょうか? 「*がある行だけに色をつける。」 よろしくお願いします。

専門家に質問してみよう