- ベストアンサー
COUNTIFで色の判別は出来ますか?
エクセルで、 1 2 3 4 5 6 7 ・・・ A ○ × ○ × ○ × ○ ↑ ↑ ↑ ↑ ↑ ↑ ↑ 白 白 赤 赤 白 赤 赤 (塗りつぶし) のように○×にそれぞれ色違いのものがある状態で入力されていたとします。 赤で塗りつぶしのされたセルの中身を計算したいのですが、うまくいきません・・・(この場合赤で塗りつぶしされているセルが4つありますからその4つ分のみ計算したい) ただ色の付いたセルの個数を数えることは出来たのですが、 それだと○と×の区別ができなく別々に計算させることができませんでした。 調べてみるとGET.CELL関数で色番号を取得し、 その番号からSUMIF関数で計算することができるようなのですが、 A行以下にもデータが入力されているため、色番号を取得させる行を追加させていくのは難しいので、別の方法を考えています。 COUNTIFでそれぞれ色と○と×を条件として数える方法はないでしょうか? 最終的にはA8のセルに(赤○の数×10 + 赤×の数 ×10) のような感じになればいいと思っています。 説明文がわかり辛いと思いますがよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
思われていることと違っていましたらすみませんが、ユーザ関数を作成して計算させてはどうでしょうか。 Alt+F11キー → Microsoft Visual Basicを開きます。 メニューの挿入(I) → 標準モジュール(M) 下記のコードを貼り付けてください。 Function 赤マルの数(セル範囲) Application.Volatile Dim セル As Range Dim カラー番号, カウント As Long カウント = 0 For Each セル In セル範囲 カラー番号 = セル.Interior.ColorIndex If カラー番号 = 3 Then If セル = "○" Then カウント = カウント + 1 End If End If Next セル 赤マルの数 = カウント End Function Function 赤バツの数(セル範囲) Application.Volatile Dim セル As Range Dim カラー番号, カウント As Long カウント = 0 For Each セル In セル範囲 カラー番号 = セル.Interior.ColorIndex If カラー番号 = 3 Then If セル = "×" Then カウント = カウント + 1 End If End If Next セル 赤バツの数 = カウント End Function Microsoft Visual Basicの画面を×で閉じます。 A8のセルに =赤マルの数(A1:A7)*10+赤バツの数(A1:A7)*10 を貼り付けてください。計算されていると思います。 ただし、赤色の箇所を変更した際は、自動で更新されない(赤色のセルのカウントが更新されない)ため、F9キーを押してください。 もしくは、○×のシートがSheet1であれば下記のコードをSheet1のコードに貼り付ければ、Enterキーや矢印キーでセルが移動したら再計算されます。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Calculate End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
私にとっては、またこの手の質問が出たとうい感じです。なぜなら 関数はセルの「値」を問題にする機能なのだが、文字やセルの色は書式に属し、セルの書式を関数では取得できないのです。 ですから普通には出来ません。 ーー VBAの知識があれば、出来る場合があります。 ーー >GET.CELL関数で色番号を取得し、 これはバージョン4.0(15年ぐらい前)の特殊なマクロでこれを今もって使う回答が出るが、適切ではないと思います。 ーー 例データ *はセルパターンの赤設定を示す A列 B列 C列 D列 E列 *○ ○ *○ * 2 * ○ ○ * ○ 0 *○ ○ ○ * 1 コード Sub testo1() For i = 1 To 3 '本件では3行分処理 k = 0 For j = 1 To 5 'E列までの例 c = Cells(i, j).Interior.ColorIndex 'セルパターンのの色コード If c = 3 And Cells(i, j) = "○" Then 'セルパターーの色と○を条件にして数える k = k + 1 '計数合計ならk=k+Cells(i,j) End If Cells(i, "H") = k 'H列に件数セット Next j Next i End Sub
補足
早くも回答ありがとうございます。 やっぱり関数ではできないみたいですね・・・ 実際にはセルには○×ではなく文字列がはいるので、 imogasiさんのだと文字列が増えたり変わったり、行列が増えたりするたびに書き換えなくてはいけないですよね? testo1(検索範囲,検索する色番号,検索文字) = 個数 のように文字列が変わったり、色が変わったり、行列が増えたりしても対応できるようにしたいのですが・・・ そのようなこともできるのでしょうか? VBA勉強しなくてはですね。
お礼
遅くなってしまい申し訳ありません・・・ kuma3fさんの回答を元になんとか解決できそうです。 ありがとうございました。