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

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

A 回答 (5件)

#1さんの方法が本道だと思いますが、


「なぜ、そのセルを赤にしたのか?」を判定条件にしたらCOUNTIF関数等でもカウントできませんか?
    • good
    • 14
この回答へのお礼

おお!!確かに。灯台下暗し?でした。早速やってみます!

お礼日時:2005/02/19 14:45

すみません、自分で補足するのも変なんですが、#3、


#4の回答文は、ブラウザの環境によって文字の桁が
ずれてしまうようです。
 (注釈の矢印が意図しないところを指している)

 もし可能なら文章をテキストエディタにコピーして
等幅フォントで表示していただけると、もっと分かり
易くなると思います。
    • good
    • 1

  ★隠れ関数?「ゲットセル」の続きです。



 色つきセル(指定した書式のセル)だけを計算する方法の別解。
 (計算式に名前を付けて「 ="付けた式の名前"」で計算する)

1 色を判定する式を登録する

 (1) 「挿入」→「名前」→「定義」と進み「名前の定義」画面の
   「参照範囲」欄に…、
   「=GET.CELL(判定の種類を指定する番号,判定したいセル番地)
   を記述します。

     ※判定の種類を指定する番号の一例
                     太字か否か?:20
                     フォントの色:24
                     塗りつぶし色:63

   例   A     B
    1 赤い○ (この列で判定)←ここに判定式を書きたい場合
    2 青い○         参照範囲欄の式は
    3 黄色○         「=GET.CELL(24,A1)」
                        ↑
         ※「24」なのは、フォントの色を判定したいから
          第2引数のセル番地は後で相対参照してくれる

 (2) 「名前」欄に計算式の名前(任意だが判り易く)を入力して
   「追加」→「OK」で「名前の定義」画面を閉じます。
    例えば式「=GET.CELL(24,A1)」の名前を "フォントの色" に

2 判定結果を表示したいセルに、「 =任意に定義した式の名前」を
 記述します。

   例   A     B
    1 赤い○ フォントの色 ←判定結果は「3」と表示
    2 青い○ フォントの色 ←判定結果は「5」と表示
    3 黒い○ フォントの色 ←判定結果は「0」と表示

3 判定結果のセルを、SUMIF や COUNTIF関数等で活用、計算する。

   例   A     B
    1 赤い○ フォントの色 ←表示は「3」
    2 青い○ フォントの色 ←表示は「5」
    3 黒い○ フォントの色 ←表示は「0」
    4   (標準カラーパレットのインデックス番号を参照)
    5 =COUNTIF(B1:B3,3,A1:A3) ←A1~A3の範囲で赤い
    6              フォントのデータのある
    7              セルだけカウント
    8 =SUMIF(B1:B3,5,A1:A3) ←データが数値である場合
                   青いフォントのセルだけ
                   合計


 …以上です。自分でも何を言っているのか判らなくなるほど文章で
説明するのは難しいんですが、実際の操作は意外と簡単なのです。
 まぁ、トライ・アンド・エラーということで…。(^^;

※蛇足的な注意
  後から書式変更しても結果が自動更新されないので、NOW 関数を
 組み込んで、適宜「F9」キーで更新させると良いでしょう。
  例:「=GET.CELL(**,**)+NOW()*0」
              ↑(0を掛ければ結果に影響しない)
    • good
    • 1

 #1さんの回答にあるユーザー定義関数で第2引数に指定している


色番号とは、恐らく下記のことだと思います。

  ☆ブックの標準カラーパレットのインデックス番号
   (VBエディタのヘルプにて「ColorIndex」を検索して参照)

  1    2 白   3 赤   4 黄(薄)緑 5 青
  6 黄   7 桃色  8 水色  9 茶色   10 緑
  11 紺    (濃い緑)

以下 ~ 56 までありました。


>といっても、VBAはさっぱりなんですが・・・。

 オイラもよく分かりませんが、VBA を使ったユーザー定義関数なら
他にもいろいろ工夫された方がいるようです。以前オイラが教わった
マクロの例を紹介しておきましょう。


例その1

(1)[ツール]-[マクロ]-[VisualBasicEditor](又は Altキー+F11)
 で、VBE 画面にします。

(2)VBE画面上で[挿入]-[標準モジュール]を選択します。
 するとコードウィンドウが出ますので、以下のコードを記します。
(コピー&ペーストでも可)

 ---------------------------- 以下 ------------------------
 Function SpecialCell(targetRange As Range) As Integer
 Dim myCell As Range

 For Each myCell In targetRange
If myCell.Font.Color = vbRed _
Or myCell.Interior.Color = vbYellow Then
SpecialCell = SpecialCell + 1
End If
 Next
 End Function
 ------------------------- 以上終わり ---------------------

(3)元のワークシートに戻って、適当なセルに
 =SpecialCell(A1:E5)
などと、通常の関数の要領で、調べたい範囲を引数(例ではA1:E5)で
指定して、Enterキーを押せば答えが出るでしょう。


例その2

 次のユーザー定義関数で各色に対応できるハズです。

 ---------------------------- 以下 ------------------------
Function SpecialCell(targetRange As Range, _
intColor As Integer) As Integer
'赤は3,緑は4,青は5,黄は6
Dim myCell As Range

For Each myCell In targetRange
If myCell.Font.ColorIndex = intColor _
Or myCell.Interior.ColorIndex = intColor Then
SpecialCell = SpecialCell + 1
End If
Next
End Function
 ------------------------- 以上終わり ---------------------

赤をカウントする式は =SpecialCell(A1:E5,3)
青をカウントする式は =SpecialCell(A1:E5,5)
黄をカウントする式は =SpecialCell(A1:E5,6)

 ただし、フォント色が黄でセル色が青などというのは、どちらにも
カウントされてしまいます。


例その3

 ---------------------------- 以下 ------------------------
Function ColoredCell(rngArg As Range, rngSample As Range) As Long
For Each c In rngArg
If c.Interior.ColorIndex = rngSample.Interior.ColorIndex Then
ColoredCell = ColoredCell + 1
End If
Next
End Function
 ------------------------- 以上終わり ---------------------

 使う際には、=ColoredCell(A1:A10,A5) のように、第1引数は調べ
たい範囲を、第2引数には指定する色の(サンプル)セルを当てます。


 オイラが先人に教わった方法は以上ですが、見よう見まねのオイラ
でも、コードの貼り付けで何とか結果を確認することができました。

 ただし、これらマクロを使って作成したブックは、エクセルの環境
設定(メニュー「ツール」→「マクロ」→「セキュリティ」)により
「セキュリティレベル」を「高」にしていると、ブックをうまく開け
なかったり、「中」にしている場合はユーザー側の判断を求める警告
メッセージが出たりします。

 念のために元に戻す方法を書いておくことにします。

 ★マクロを解除する方法

1 ツール → マクロ → Visual Basic Editor を開きます

2 画面左上のプロジェクトの欄に VBAProject があり、その配下に
 モジュールがあります。
  そのモジュール配下に作成したときのマクロの名前あるはず。

3 そのモジュール配下にあるマクロの名前ところで右クリック。

4 メニューがでて、「モジュールの名前」+の削除があります。
 もしくは「モジュールの開放」が出たら、それをクリックしてみま
 しょう。

5 エクスポートしますか?と訊いてきたら「いいえ」をクリック。

6 Excelに戻り、上書き保存して終了。
  再度Excelファイルを呼び出すと、警告・確認メッセージは
 もう出てこなくなるはずです。


 このセキュリティに関する制約がうっとうしい場合はマクロを使わ
ない方法も、あることはあります。
 しかし、文章のみで説明するのはかなり難しい上に、何より字数が
尽きたようです。

 ★隠れ関数?
  「=GET.CELL(検査の種類を指定する番号,検査したいセル番地)」
    • good
    • 1

ユーザー定義関数を使えばできます。



VBAで標準モジュールにこのようなプログラムを書いておきます。
あとは、ワークシート上で =COUNTCOLOR(範囲, 色番号) の形で式を入れれば、範囲内である色番号で塗られたセルの数を表示します。
※色番号と色の対応は、パレットの設定を変えると変化します。

Function COUNTCOLOR(ByRef 範囲 As Range, ByVal 色 As Integer) As Long
Dim 個数 As Long
Dim セル As Range
Application.Volatile
個数 = 0
For Each セル In 範囲
If セル.Interior.ColorIndex = 色 Then
個数 = 個数 + 1
End If
Next
COUNTCOLOR = 個数
End Function
    • good
    • 4
この回答へのお礼

なるほどVBAを使うんですね。といっても、VBAはさっぱりなんですが・・・。とにかくトライしてみます。ありがとうございました。

お礼日時:2005/02/19 14:43

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

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