プロが教える店舗&オフィスのセキュリティ対策術

教えて下さい。お願いします。
3000件程のデータが入力されていて、セルの値の種類ごとに
セルの色で色分けされています。
これを、赤のセルは何件、青のセル何件、というふうに
関数を使用して集計するにはどうすればいいでしょうか。
色は全部で3種類と色がないもの、合計4種類です。

A 回答 (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]キーを押す必要があります。(マクロにしておくと楽だと思います)
    • good
    • 0
この回答へのお礼

お答えありがとうございます。大変参考になりました。
これを元に集計作業ができるようになりました。
ありがとうございました。

お礼日時:2001/04/06 14:09

こんにちは



>セルの値の種類ごとにセルの色で色分けされています。

とありますが、その色分けのルールで判定したほうが正確かつ早くないですか?


余計なアドバイスだったらすみません。
    • good
    • 0

あまり詳しくはないもので・・


>ユーザー関数を設定してセル上の値として表記したい
結果をセル上に出すだけでなく、関数もセル上に表記するということですか?
私が書いたものだとボタンと結果しかセルに出ませんね。
すみませんがわかりません。
範囲と色は引数として下記の関数になげれば良いと思います。
ちょっと改造が必要ですが・・
>色の指定のないセルもカウントしたいので


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の知識が必要となり、誰でもこれを使用できるわけでは
なくなってくるので、できれば、関数のマクロを組めればと思ったわけです。
もし、何か解決方法があるならばお手数ですが教えて下さい。

補足日時:2001/04/05 10:30
    • good
    • 0

エクセル上にコマンドボタンを配置して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では指定できないので
どうしたらいいでしょうか。
全体から、色つきセルの合計を引けばいいんですが
できれば、その方法ではない方法でできないものかと・・。
お手数ですが、よろしければ教えて下さい。

補足日時:2001/04/04 12:59
    • good
    • 0

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