• ベストアンサー

Excel2007で背景にカラーが付いたセルの個数

Excel2007で背景にカラーが付いたセルの個数の合計をあらわしたいです。 セルAA6から下に向かってセルAA4363以上に下に向かってデータが入ってます。データは下に向かって増えていきます。 そのデータの中に色の入ったデータが幾つかあります。一色だけです。 その色の入ったデータの個数の合計をセルAA4に表したいです。 条件付き書式ルールの管理には 数式:=And(AA6=$N7,$N7〈〉"") 適用先=$AA$6:$AE$4363 と設定しています。 お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1620/2460)
回答No.8

No7は冗長だったので(以前のコードをコピペして修正したので冗長に…)こちらに。 前のElseIfの行が駄目っぽかったので今回は分けてみました。 なお、条件付き書式でしか色を付けないのなら Else If .Cells(i, j).Interior.Pattern <> xlNone Then MyCount = MyCount + 1 End If は不要です。 Sub Example() Dim LastRow As Long Dim i As Long, j As Long, MyCount As Long With Sheets("Sheet1") For j = Range("AA:AA").Column To Range("AM:AM").Column MyCount = 0 If j = Range("AF:AF").Column Then j = Range("AK:AK").Column End If LastRow = .Cells(Rows.Count, j).End(xlUp).Row For i = 6 To LastRow If .Cells(i, j).Value = .Cells(i + 1, "N") And .Cells(i + 1, "N") <> "" Then MyCount = MyCount + 1 Else If .Cells(i, j).Interior.Pattern <> xlNone Then MyCount = MyCount + 1 End If End If Next i .Cells(4, j).Value = MyCount Next j End With End Sub

961awaawa
質問者

お礼

ありがとうございます。できました。やはりそれぞれのシートの為にソースを用意する形が望ましいでしょうか? 今回のこのマクロは、関数の形とかでは出来ない物に等しかったのでしょうか? 私の説明不足から様々な解答を頂いたので(私は素人でこれはちょっとしたことだと思ってましたが)いつも綺麗な正解をしてくださる方の場合でも戸惑ってることが想像できました。 何か悪い気がしました。 でも助かりました。

その他の回答 (10)

  • kkkkkm
  • ベストアンサー率65% (1620/2460)
回答No.11

関数はないでしょう。 このような方法でカウントできます。 http://office-qa.com/Excel/ex250.htm あちらこちらに服を脱ぎ散らかすように質問を散らかさないで、過去の質問は締め切りましょう。最初の問題が解決したら締め切って、新たな疑問があれば新しく質問しましょう、節度がありませんよ。

  • kkkkkm
  • ベストアンサー率65% (1620/2460)
回答No.10

> SUMPRODUCT((AA$6:AA$4363=$N$7:$N4364)*($N$7:$N$4364<>"")) は上手くいきましたが、AA4364をAA4364以上は空白であるAA5000にしたところ、動きはしましたが正解は得られませんでした。 それぞれの範囲の行の数を合わなくてはいけません。 ((AA$6:AA$4363=$N$7:$N4364)*($N$7:$N$4364<>"")) ↓ ((AA$6:AA$5000=$N$7:$N5001)*($N$7:$N$5001<>"")) AA6とN7を比較 かつ N7が空白か? AA7とN8を比較 かつ N8が空白か? : AA5000とN5001を比較 かつ N5001が空白か? というように演算していますので、両方の行数が合わないと計算ができない行が出てくるのでエラーになります。

961awaawa
質問者

お礼

kkkkkmさん。ありがとうございます。書式設定されていない形でセルC6からC4364まではデータが入っててそれ以降はセルC5000迄は入ってないという場合のカラーセルカウントは関数での形はどうなりますかね?

  • kkkkkm
  • ベストアンサー率65% (1620/2460)
回答No.9

> やはりそれぞれのシートの為にソースを用意する形が望ましいでしょうか? 複数のシートで同じコードを実行したいということでしょうか? シートの指定が変わりますので、その場合現在見ているシートを参照して実行するというコードに変更しなくてはいけません。 > 関数の形とかでは出来ない物に等しかったのでしょうか watabe007さんに対しての質問で bunjiiさんの回答した関数 (bunjii さんは一行ずれているのを見逃してしまったのだと思います。多分うまくいかないと返信すれば手直ししてくれたと思いますよ) をずれた状態で書き直すと =SUMPRODUCT((AA$6:AA$4363=$N$7:$N4364)*($N$7:$N$4364<>"")) これで表示できます。AM列まで右にコピーするとすべての列で表示されます。 bunjii さんも言ってますが 条件付き書式でセルの塗りつぶしをしている場合のセルだけが対象になります。 書式の設定で自分で色付けしたものはカウントしません。 watabe007さんに対しての質問にもなんかマクロという言葉が見えましたし、自分で色付けしたものがあればということと、関数はbunjiiさんが回答しているので私はマクロにしました。

961awaawa
質問者

お礼

本当にありがとうございます。 もし関数の形で空白が入った場合はどの様な形になりますか?データがきっちりと入ってる場合の =SUMPRODUCT((AA$6:AA$4363=$N$7:$N4364)*($N$7:$N$4364<>"")) は上手くいきましたが、AA4364をAA4364以上は空白であるAA5000にしたところ、動きはしましたが正解は得られませんでした。 何か良い関数はございませんか?

  • kkkkkm
  • ベストアンサー率65% (1620/2460)
回答No.7

> 後、AA列、AB列、AC列、AD列、AE列、AK列、AL列、AM列にも使えるようにするには 以下のような感じで (チップはいらないですよ。使い道がわからないので…) Sub Example() Dim LastRow As Long Dim i As Long, j As Long, MyCount As Long With Sheets("Sheet1") For j = 0 To Range("AM:AM").Column - Range("AA:AA").Column MyCount = 0 If j = Range("AF:AF").Column - Range("AA:AA").Column Then j = Range("AK:AK").Column - Range("AA:AA").Column End If LastRow = .Cells(Rows.Count, Range("AA:AA").Column + j).End(xlUp).Row For i = 6 To LastRow If .Cells(i, Range("AA:AA").Column + j).Value = .Cells(i + 1, "N") And .Cells(i + 1, "N") <> "" Then MyCount = MyCount + 1 Else If .Cells(i, Range("AA:AA").Column + j).Interior.Pattern <> xlNone Then MyCount = MyCount + 1 End If End If Next i .Cells(4, Range("AA:AA").Column + j).Value = MyCount Next j End With End Sub

961awaawa
質問者

お礼

ありがとうございました。

  • kkkkkm
  • ベストアンサー率65% (1620/2460)
回答No.6

> ElseIf .Cells(i, "AA").Interior.Pattern <> xlNone Then > が > デバッグ前に引っ掛かるんです。 というのは、実行時のエラーではなくて コードをコピペしたときに赤文字になってエラーが出る ということでしょうか。こちらではエラーが出ないのですが…。 そちらのもの全てをこちらにコピペしていただけますか。 エラーの内容も教えてください。

961awaawa
質問者

お礼

ありがとうございました(・∀・)ノ

961awaawa
質問者

補足

さっきの追加の質問なんですが各列ごとの4行目に表せれば嬉しいです。私も貴方や皆さんの様なExcel頭脳が欲しいです。うらやましい(^_^)

  • kkkkkm
  • ベストアンサー率65% (1620/2460)
回答No.5

No4は色付きセルと条件付きが重なった場合ダブルでカウントされるので訂正 こちらで Sub Example() Dim LastRow As Long Dim i As Long, MyCount As Long MyCount = 0 With Sheets("Sheet1") LastRow = .Cells(Rows.Count, "AA").End(xlUp).Row For i = 6 To LastRow If .Cells(i, "AA").Value = .Cells(i + 1, "N") And .Cells(i + 1, "N") <> "" Then MyCount = MyCount + 1 ElseIf .Cells(i, "AA").Interior.Pattern <> xlNone Then MyCount = MyCount + 1 End If Next i Range("AA4").Value = MyCount End With End Sub

961awaawa
質問者

お礼

こんにちは、kkkkkmさん。ご協力ありがとうございます。 すみませんがこのコード(と、言えば良いのか不確かなんですが) ElseIf .Cells(i, "AA").Interior.Pattern <> xlNone Then が デバッグ前に引っ掛かるんです。

  • kkkkkm
  • ベストアンサー率65% (1620/2460)
回答No.4

締め切りにでも追われているような質問攻めをしていますが 以下のような感じでしょうか。 AA4363以上にデータが入った場合条件付き書式が範囲外になりそうですが、とりあえずAA列のデータ最終行(数式含む)までを対象にしてます。 Sheet1は適宜変更してください。 '背景色(網掛け含む)有りと条件付き書式が適用されたセルを含めてカウント Sub Example() Dim LastRow As Long Dim i As Long, MyCount As Long MyCount = 0 With Sheets("Sheet1") LastRow = .Cells(Rows.Count, "AA").End(xlUp).Row For i = 6 To LastRow If .Cells(i, "AA").Value = .Cells(i + 1, "N") And .Cells(i + 1, "N") <> "" Then MyCount = MyCount + 1 End If If .Cells(i, "AA").Interior.Pattern <> xlNone Then MyCount = MyCount + 1 End If Next i Range("AA4").Value = MyCount End With End Sub

961awaawa
質問者

お礼

このソースで上手くいきました。ありがとうございます。 ちなみにシートの指定を無しにして、めくるシートの先々にも使用したいです。 後、AA列、AB列、AC列、AD列、AE列、AK列、AL列、AM列にも使えるようにするには どの様にできますか?

961awaawa
質問者

補足

チップは送れる許容限度が過ぎたのでまとめて贈りたいと思います。

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.3

Excel 2013 で検証しました。マクロなんて組む必要なし! AA4: =SUBTOTAL(3,AA6:AA4363) 範囲 AA6:AA4363 に空白セルがない場合は、超簡単! セル AA5 に[オートフィルタ]を設定して、当該セルのナビスコマークをクリック ⇒ [色フィルター]のナビスコマークをクリック ⇒ 該当色をツン 以上を理解すれば、途中に空白セルがあってもできることが分かるでせう? ただ、ソンダケぇ~!

961awaawa
質問者

お礼

ありがとうございました。(・∀・)ノ

  • SI299792
  • ベストアンサー率48% (715/1480)
回答No.2

ユーザー定義関数の方が使い勝手がいいと思います。 このマクロを入れて、 AA6 に =InteriorCount(AA6:AA443) ' Option Explicit ' Function InteriorCount(ByVal Target As Range) As Integer '   For Each Target In Target     InteriorCount = InteriorCount - (Target.Interior.Pattern <> xlNone)   Next Target End Function 条件付き書式を使っている場合、ユーザー定義関数ではできません。以下のマクロ使ってください。 ' Option Explicit ' Sub Macro1() '   Dim Cell As Range   Dim Count As Integer '   Count = 0 '   For Each Cell In [AA6:AA443]     Count = Count - (Cell.DisplayFormat.Interior.Pattern <> xlNone)   Next Cell   [AA4] = Count End Sub 同じ質問をしていますね。 ここはwatabe007 専用の様なのでなので開けておきます。

参考URL:
https://okwave.jp/qa/q9606201.html
961awaawa
質問者

お礼

すみません。ご返答暖かくかんじます。 ありがとうございました。

  • unokwave
  • ベストアンサー率58% (966/1654)
回答No.1

標準関数ではできないので、マクロを組むかそのような関数を持つaddinをWindowsにインストールして利用するしかありません。 そのような関数を持つaddinとその使い方は http://www.excel.studio-kazu.jp/DL/UFClr/index.html

961awaawa
質問者

お礼

ご返答ありがとうございました。色々な方法があるもんなんですね。

関連するQ&A

  • Excel2007で久々に質問させてください。

    お久しぶりです、watabe007さん。こんな時間にすみません。 質問させてください。 Excel2007で背景にカラーが付いたセルの個数をあらわしたいです。 セルAA6から下に向かってセルAA4363以上に下に向かってデータが入ってます。データは下に向かって増えていきます。(増えずに範囲内でも大丈夫です) そのデータの中に色の入ったデータが幾つかあります。一色(基本的なイエロー)だけです。 その色の入ったセルが何個あるかをセルAA4に表したいです。 条件付き書式ルールの管理は 数式:=And(AA6=$N7,$N7〈〉"") 適用先=$AA$6:$AE$4363 と設定しています。 お願い致します。マクロか、addinのインストールを薦めて頂きましたが私には全くわからない範囲なんで、マクロならこの人だと思いました。勝手ですみません。

  • excel2010で個数を数えたい

    Windows7でexcel2010を使用しています。 曜日を入力した行とその下の行に曜日に応じてセルの背景色が変わるように条件付き書式設定をしています。曜日の行とその下の行は同じ色になる設定です。 曜日の下の行には文字を入力します。 条件付き書式設定で変更されたセルの背景色で特定の色かつ特定の文字列が入力されたセルの個数を数えたいのですが何か方法はありますでしょうか? たとえば、A1~AE1に曜日を入力していて、平日は背景色なし、土曜日は背景色青、日曜日は背景色赤になるように条件付き書式設定をします。 A2~AE2には色々な文字を入力しますが、上のセルと同じ色になるようにしています。 A2~AE2に〇と入力されていて、且つ背景色なしのセルの個数を数えたい場合はどうすれば良いでしょうか?〇と入力されていて背景が青の場合、赤の場合のセルの個数も数えたいです。 本当は背景色ではなく文字色を条件付き書式設定で変更してその個数を数えたいのですが、色々検索したところ文字色では難しそうなので背景色を変更することにしました。 説明が下手で申し訳ありませんが、どなたかご教授しただけますと幸いです。

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

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

  • A列が今日の日付ならC列のセルの背景に色をつけたい

    A列が今日の日付ならC列のセルの背景に色をつけたい エクセル2007です。 A1に2012/03/04といれ、 下へオートフィルしています。 そしてC列に対して 「A列が今日の日付なら、セルの色を塗りつぶす」と言うようにしたいのですが 式がわかりません。 条件付き書式の 新しい書式ルール→「数式を使用して、書式設定するセルを決定」 で 「次の数式を満たす場合に値を書式設定」 に「=$A1=date()」と入れると 「入力した数式は正しくありません。」 となってしまいます。 どうすればいいでしょうか?

  • エクセルでセルの色の数

     エクセルでセルの数の計算についてお聞きします。 条件書式でセルの色分けをしました。数の合計、文字の個数などの数式はできるのですが、セルの色の個数は数えることができるのでしょうか。もし、できるのであれば、その数式を教えてください。  例えば、Aの列には、白‥3 赤‥2というようにセルの色の個数を表示します。  今までそんな発想がなく使ってきませんでした。教えていただけるとありがたいです。よろしくお願いいたします。

  • Excel2007でカウントしたいのですが

    Excel2007でカウントしたいですがご協力お願い致します。 今ところはセルU6~U4363にデータが入ってますが、それ以上にデータは増えていきます。 幾つか背景カラー(ミドリ)が入ってるセルがありまして、U列の6行目から下のカラーセルの合計個数をセルU4に表したいです。 どなたかご協力お願い致します。

  • Excel2007に関する質問です。

    列内の赤い文字(※セルは塗りつぶされていません)がついているセルの個数を数えたいのですが、その文字の色は条件付き書式(ルールを組んでいます)で色をつけています。 通常、セルの書式設定から色を変えた場合には、それらのセルの個数を数えるマクロは、過去の質問では以下のようになるそうです。 Function COUNTCOLOR(data As Range, color As Integer) Application.Volatile Count = 0 For Each c In data If c.Font.ColorIndex = color Then Count = Count + 1 End If Next c COUNTCOLOR = Count End Function それで使うときは =COUNTCOLOR(A:A,3) この場合だと赤文字のセルを数えることができるそうです。 ですが、ルールによって文字の色が変わっているセルをカウントできません。あくまでルールであり、書式上は通常の黒色になっています。どうしたら、ルールで色を付けたセルの個数を数えるマクロを組めるのでしょうか?? よろしくお願いします!!

  • Excel2003でセルの色で並び替え

    Excel2007ではセルの色で並び替えが出来るようになったようですが、2003では出来ないでしょうか?データを区別するのに、セルに色付け(一色)してたのですが、色付けしたものと処理してないもの、あるいは処理日付の新しいもの等で並び替えは出来ないでしょうか? 宜しくご教示下さい。

  • EXCEL2007 最小値のセルを目立たせたい

    指定した範囲の最小値のセルの書式が自動的に変更されるように設定したいのですが、うまく設定できないので、教えてください。 例えば、B2:D2のセルの中で最小値の書式を設定するとして、  メニュー[ホーム]-[スタイル]-[条件付き書式]-[新しいルール]をクリック  ↓ [新しい書式ルール]ダイアログ-[ルールの種類を選択してください]欄で「数式を使用して、書式設定するセルを決定」を選択  ↓ [ルールの内容を編集してください]欄の[次の数式を満たす場合に値を書式設定]のテキストボックスに「=MIN($B$2:$D$2)」と入力  ↓ テキストボックスの下の[書式]ボタンをクリックして書式を設定  ↓ [プレビュー]で書式が設定されたことを確認  ↓ [新しい書式ルール]ダイアログ-[OK]ボタンをクリック と設定してみたのですが、B2:D2のセルすべてに書式が適用されてしまいました。 ちなみに、小数点を含む数値やパーセンテージ、数式を用いているセルだとルールが設定できないということはないですよね? 詳しい方よろしくお願いします。 また、データバー、カラースケール、アイコンセットなら簡単に設定できるという意見もあると思いますが、最小値と2番目の最小値の差が0.1とか0.01単位の場合、表示の差が分かりにくいので、この場合にはちょっと使えないです。

  • [至急]行ごとにセルの個数を数え、和を1にしたい

    Excelで行ごとにセルの個数を数え、合計が1になるように値を割り振るにはどうすれば良いのでしょうか? Excelでの集計についての質問です。 添付画像の様に、A~Dそれぞれに分類したセルを行ごとに個数を数え、合計を1にするような操作をするにはどのようにすれば良いでしょうか。 元のデータを変更した時の互換性があると尚良いです。 よろしくお願いします。 使用しているのはExcel2013です。 よろしくお願い致します。

専門家に質問してみよう