プロが教えるわが家の防犯対策術!

色のついた文字の記載があるセルをカウントしたく
色々調べました。結局VBAで設定する方法にしたのですが
設定しテストをするとどうしてもカウント数が合いません。
全くの初心者の為何が間違っているのか全く分かりません。
どなたか教えて下さい。
VBAも全く知らない者でしたので
調べて以下のものをそのまま貼り付けました。
Function CCount(Rng As Range, idx)
Dim R As Range
Dim Cnt As Long
Application.Volatile
For Each R In Rng
  If R.Font.ColorIndex = idx Then Cnt = Cnt + 1
Next R
CCount = Cnt
End Function

Function GetIndx(Rng As Range)
If Rng.Count > 1 Then
  GetIndx = vbNullString
  Exit Function
End If
GetIndx = Rng.Font.ColorIndex
End Function
何が間違っているのでしょうか?

A 回答 (5件)

マクロの内容も使用方法も判らず、ただ貼り付けたけど動かない……と、言うことでしょうか。

そうでないのでしたら、もう少し状況等の情報が欲しい所です。

挙げられている2つの関数は、それぞれ次のような処理をします。
CCount()第一引数で指定したセル範囲中に、第2引数で指定した文字色のセルが幾つあるかカウントして返す。
GetIndx()引数で指定した1セルの文字色情報を返す。

恐らく、ユーザ関数として使用したいのだと推測しました。
次の様に使う物だと思われます。
例:セルA1の文字色と同じ文字色のセルがセル範囲C1:D10の中に幾つあるかカウント。空いているセルに↓の式を入れる。
=CCount(C1:D10,GetIndx(A1))

この回答への補足

早速ありがとうございます。本当に助かります。

なんとなくの解釈が少しずつ明確になってきました。
2つ目の関数は私には必要が無いので削除しました。
【理由は赤色の文字だけ・・と決まっています】

数式は上記に書いていただいているとうり
=CCount(C1:D10,3)
と入力しています。

それでもセル数が合いません。何か理由は考えられますでしょうか?

補足日時:2008/11/26 10:55
    • good
    • 0

> =CCount(C1:D10,3)


> と入力しています。
>
> それでもセル数が合いません。何か理由は考えられますでしょうか?

想像ですが、文字が入って居ないセルに文字色が赤に設定されているセルがある……なんて事はありませんか?CCountは、赤い文字をカウントしている訳ではなく、文字色が赤に設定されているセルをカウントしています。

外している場合、どのように異なるのか具体例を挙げてください。
    • good
    • 0
この回答へのお礼

>想像ですが、文字が入って居ないセルに文字色が赤に設定されているセルがある……なんて事はありませんか?CCountは、赤い文字をカウントしている訳ではなく、文字色が赤に設定されているセルをカウントしています。

まさしくそれでした・・・。
条件付書式で入力があれば赤文字に設定している箇所が有ります。

このVBAでは文字色が赤に設定されているセルをカウントしていたのですね・・・・
この質問で申し訳ないんですが実際赤文字になったものだけをカウントする事は出来ないのでしょうか?

お礼日時:2008/11/26 12:55

> この質問で申し訳ないんですが実際赤文字になったものだけをカウントする事は出来ないのでしょうか?



文字色=赤 かつ、値が空白以外 と言う条件で良いと思います。
マクロのIF文の中を書き換えて見てください。

If R.Font.ColorIndex = idx Then Cnt = Cnt + 1

If (R.Font.ColorIndex = idx) * (R.Value <> "") Then Cnt = Cnt + 1
    • good
    • 0
この回答へのお礼

やってみたのですが・・・・・
値が全くでなくなりました・・・
何故でしょうか?・・

お礼日時:2008/11/26 14:51

文字色「赤」を条件付書式で設定しているのですね……。



VBA中で使用している .Font.ColorIndex は、条件付書式で設定した文字色ではなく、セルに普通に割り付けられた文字色を指して居ます。
これは条件付書式で文字色が変わっても変わりません。

したがって、どの条件が成立しているのかを確認して、その条件の時の文字色を取得する事になります。しかし、ちょっと調べた範囲では、どの条件が成立しているのかを表すプロパティは無いようです。
VBAでやるのであれば、条件全てについて成立しているか否かを確認して、その時の文字色を取得する事になり、面倒です。

可能なら、文字色以外でカウントする方法を検討されてはいかがですか。
    • good
    • 0
この回答へのお礼

>文字色「赤」を条件付書式で設定しているのですね……。
そうです・・・
>VBA中で使用している .Font.ColorIndex は、条件付書式で設定した文字色ではなく、セルに普通に割り付けられた文字色を指して居ます。
これは条件付書式で文字色が変わっても変わりません。
そうだったのですね・・・

文章の意味を理解するのに時間が掛かりました。
文字色以外でカウントする方法も考えたのですが・・・

お礼日時:2008/11/28 17:18

説明不足だったので補足を…



条件付書式で設定された文字色はVBAでは取得できないようです。
やるとしたら、設定された条件を取得して、どの条件が成立しているかを確認して成立した時用の書式情報から文字色を取得する事になります。
しかし、条件付書式もセルの値・数式と対象が異なると判定も面倒になりますのでお勧めしません。

次の2つの方法で、別々にカウントし、合算してはいかがでしょう。

通常の文字色「赤」については、提示されたマクロで数をカウント。

条件付書式で設定された文字色「赤」については、別なセルに同じ条件をセル式として入れ、そのセル式が成立した数をカウント。
例:A1セルの条件付き書式の条件が「セルの値が」「次の値以上」「500」
だとしたら無関係なセルに =(A1>=500)*1 と入れると条件が成立した時に1になりますので、これらを合計します。
    • good
    • 0
この回答へのお礼

なんて表現していいのか分からないくらい感動しました。
カウントできました。

とりあえずそこまでややこしい事をしなければならないくらい
必要な条件付書式であるのかもみなししたいと思いますが
一旦上記の方法でカウントします。

本当にありがとうございます。
こういう事ってできると本当に感動しますし、うれしい気持ちになります。より深く理解できるように地道に勉強していこうと思いました。
本当にありがとうございました。

お礼日時:2008/11/28 17:23

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