• ベストアンサー

COUNTIF セルに色を塗るとカウントされないようにするには?

EXCEL2003です。    A 1 あいうえお 2 かきくけこ 3 さしすせそ 4 あいうえお 5 あいうえお と、セルに入っていたとします。 A6のセルに =COUNTIF(A1:A5,"あいうえお") と入力。 すると、3と返してきます。 今からやりたいのは、もし、A1のセルの「あいうえお」に色が付いたら、 それはカウントせず、2と返してくる。というのは、出来るのでしょうか?

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

2つの方法を書きます。ワークシート関数ではセル背景色の有無は取得できませんから、どちらもユーザ定義関数を使用します。 まず以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい Function irrCOUNTIF(ByVal trg As Range, par As String) As Long Dim r As Range  For Each r In trg   If r.Interior.ColorIndex = xlNone And r.Value = par Then    irrCOUNTIF = irrCOUNTIF + 1   End If  Next r End Function Function cIndex(ByVal Target As Range) As Integer  If Target.Interior.ColorIndex = xlNone Then   cIndex = 0  Else   cIndex = Target.Interior.ColorIndex  End If End Function 方法1 ワークシート画面に戻り、適当なセルに  =irrCOUNTIF(A1:A5,"あいうえお") と入力してください。すると質問の例では「2」が返されるはずです。方法1では補助セルを使用しません。 でもこのユーザ定義関数では"あいうえお*"や"*あいうえお*"のような部分一致の場合はカウントしません。(完全一致だけでよければ方法1でよいです) 方法2 補助セルを使用する方法です。ワークシートのB1セルに  =cIndex(A1) と入力して下方向にコピーしてください。するとA列のセルのカラーインデックスを表示できます。背景色がないセルは「0」が返ります。  =SUMPRODUCT(NOT(ISERROR(FIND("あいうえお",A1:A5)))*(B1:B5=0)) で、方法1と同様に「2」を得ることができます ちなみに式を  =SUMPRODUCT((A1:A8="a")*(B1:B8=0)) に変更すれば方法1と同じく完全一致のセルだけをカウントします。

noname#248169
質問者

お礼

OKWebのサーバーが変で、お礼遅れました。^^; ありがとうございました。 関数では無理がありますね。 VBAで出来ました。

その他の回答 (3)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

少し手がかかりますが、 A列を全て、B列にコピィ B列を選択、「置き換え」のウイザードで、「オプション」を押す 検索する文字列の書式で、付けた色を選択 置き換え後の文字は、ブランクのまま、全てを置き換え 選択した色がついた行が空白になりますので、 A6セルのIF関数をそのまま、横フィルでは、いかがでしょうか。

noname#248169
質問者

お礼

おお、盲点!その方法もあったのか!! ありがとうございました。

  • Bubuca
  • ベストアンサー率59% (532/898)
回答No.3

こんにちは エクセル2003ならば名前定義でget.cellを使えばできると思いますが、 作業列が必要になるのでお好みではないかもしれません。 ちょっと試してみましょう。 B1セルを選択しておいてcoloredという名前を定義しましょう。内容は、  =get.cell(24,A1)*1  (←1を乗じて数値に変換してます) コピーして使いますので絶対参照にならないように注意してください。 引数24はセルの文字色を調べる場合で戻り値は色番号です。 デフォルト色の場合は0が戻りますが、今回はSumproductで集計したいので、これをif文で1に変換します。 B1セルには次の式を入れます。  =if(colored=0,1,"") こうすればA1セルの文字色がデフォルトならばB1の値は1に、色が付いている場合は空白になります。 これを表の下までコピーします。 セルの背景色ならばGet.cell(39,A1)*1です。 あ、38だったかもしれません、試してみてください。 あとはカウント結果を出したいセルに  =Sumproduct((A1:A5="あいうえお")*(B1:B5=1)) これでいけると思うのですが、どうでしょうか。

noname#248169
質問者

お礼

一つの結果にも、色々な方法があるのですね。 勉強になります。 ありがとうございました。出来ました。

  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.1

VBAで関数を作っちゃえば可能かもしれません。

noname#248169
質問者

お礼

ありがとうございました。やってみます

関連するQ&A

専門家に質問してみよう