アプリ版:「スタンプのみでお礼する」機能のリリースについて

EXCEL2003です。
   A
1 あいうえお
2 かきくけこ
3 さしすせそ
4 あいうえお
5 あいうえお
と、セルに入っていたとします。
A6のセルに =COUNTIF(A1:A5,"あいうえお") と入力。
すると、3と返してきます。

今からやりたいのは、もし、A1のセルの「あいうえお」に色が付いたら、
それはカウントせず、2と返してくる。というのは、出来るのでしょうか?

A 回答 (4件)

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と同じく完全一致のセルだけをカウントします。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/11/18 16:30

少し手がかかりますが、


A列を全て、B列にコピィ
B列を選択、「置き換え」のウイザードで、「オプション」を押す
検索する文字列の書式で、付けた色を選択
置き換え後の文字は、ブランクのまま、全てを置き換え

選択した色がついた行が空白になりますので、
A6セルのIF関数をそのまま、横フィルでは、いかがでしょうか。
    • good
    • 2
この回答へのお礼

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

お礼日時:2007/11/18 16:33

こんにちは



エクセル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))

これでいけると思うのですが、どうでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/11/18 16:32

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2007/11/18 16:29

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

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


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