- ベストアンサー
Excelで色のついたセルの数を数えたい
教えて下さい。お願いします。 3000件程のデータが入力されていて、セルの値の種類ごとに セルの色で色分けされています。 これを、赤のセルは何件、青のセル何件、というふうに 関数を使用して集計するにはどうすればいいでしょうか。 色は全部で3種類と色がないもの、合計4種類です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
----------------色番号を調べる関数------------------------------------------ Function iroban(iro) iroban = iro.Interior.ColorIndex End Function -------------------ここまで---------------------------------------- -------------------色数カウント関数--------------------------- Function irosuu(gyoutou, gyoumatu, iroban) For i = gyoutou.Row To gyoumatu.Row If Cells(i, gyoumatu.Column).Interior.ColorIndex = iroban Then irosuu = irosuu + 1 Next End Function --------------------ここまで--------------------------------------- ■「色を調べる関数」で調べたい色のセルを指定(色がなしの場合は-4142になります) ■「色数カウント関数」はカウントする列の行頭と行末のセルを指定。 「色を調べる関数」を入力したセルを指定するか、色番号を入力。 再計算はしてくれないのでユーザー関数の数式バーで、一部分をクリックして、[Enter]キーを押す必要があります。(マクロにしておくと楽だと思います)
その他の回答 (3)
- Raistlin
- ベストアンサー率63% (65/102)
こんにちは >セルの値の種類ごとにセルの色で色分けされています。 とありますが、その色分けのルールで判定したほうが正確かつ早くないですか? 余計なアドバイスだったらすみません。
- b-takeda
- ベストアンサー率33% (7/21)
あまり詳しくはないもので・・ >ユーザー関数を設定してセル上の値として表記したい 結果をセル上に出すだけでなく、関数もセル上に表記するということですか? 私が書いたものだとボタンと結果しかセルに出ませんね。 すみませんがわかりません。 範囲と色は引数として下記の関数になげれば良いと思います。 ちょっと改造が必要ですが・・ >色の指定のないセルもカウントしたいので ・ ・ For i = 0 To 253 "行数を指定 in_color = ActiveCell.Interior.ColorIndex Select Case in_color Case 3 count1 = count1 + 1 Case 2 ・ ・ Case Else"Elseにはそれ以外(色に指定が無い)物が来ると思うんですがだめですかねー? count2 = count2 + 1 End Select Next ActiveCell.Offset(0, 1).Value = count1"ちょっと変更しました ActiveCell.Offset(0, 2).Value = count2
補足
お答えありがとうございます。 ちょっとやってみたのですが、上手く集計ができませんでした。 Worksheets("Sheet1").Range("K3").Activate '始める位置を指定 の「K3」というのは答えを表記したいセルの指定ですよね? それと For i = 0 To 253 '行数を指定 は何の行数を指定するのでしょうか。すみません。VBAは初心者なので よくわからないんです。 お答えいただいたプログラムをVBAで記載して、集計したい範囲を ドラッグしてからコマンドボタンを押すと、「0」と「254」としか (この場合、宣言している色は赤のみ)セルにでてきません。 もちろん、赤色のセルはいくつかあります。 私のやり方に問題があるのかもしれません。 それと、集計するデータの範囲とか、色とかがその都度違うのですが その場合はVBのエディタでそれを変更することになりますよね。 となると、多少のVBの知識が必要となり、誰でもこれを使用できるわけでは なくなってくるので、できれば、関数のマクロを組めればと思ったわけです。 もし、何か解決方法があるならばお手数ですが教えて下さい。
- b-takeda
- ベストアンサー率33% (7/21)
エクセル上にコマンドボタンを配置してVBAを起動させます。 そのプロシージャに以下のようなプログラムを書けばできるのでは ないかと思います。 Private Sub CommandButton1_Click() Dim count1 As Long "色の数だけ宣言してください Dim count2 As Long Dim in_color As Long Dim i As Long count1 = 0 count2 = 0 Worksheets("Sheet1").Activate Worksheets("Sheet1").Range("K3").Activate "始める位置を指定 For i = 0 To 253 "行数を指定 in_color = ActiveCell.Interior.ColorIndex Select Case in_color "ColorIndexはヘルプで参照できます Case 3 "3は赤です count1 = count1 + 1"色の数だけSelect文を増やして下さい Case Else count2 = count2 + 1 End Select ActiveCell.Offset(1, 0).Activate Next ActiveCell.Offset(1, 0).Activate ActiveCell.Value = count1 "赤のセルの数を表示します ActiveCell.Offset(0, 1).Activate ActiveCell.Value = count2 "それ以外を表示します End Sub
補足
お答えありがとうございます。 しかし、できることならば、ユーザー関数を設定して セル上の値として表記したいのですが。 範囲と色の指定のできるユーザー関数です。 それと、色の指定のないセルもカウントしたいので その場合はColorIndexでは指定できないので どうしたらいいでしょうか。 全体から、色つきセルの合計を引けばいいんですが できれば、その方法ではない方法でできないものかと・・。 お手数ですが、よろしければ教えて下さい。
お礼
お答えありがとうございます。大変参考になりました。 これを元に集計作業ができるようになりました。 ありがとうございました。