- ベストアンサー
オブジェクトをカウントする
エクセルで、オブジェクトのカウントをすることはできるのでしょうか。 例えば、A4とC4にオブジェクトを配置する。 E4にそのオブジェクトをカウントした数(2)を表示させると言うことです。 可能でしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> エクセルにデフォルトで存在する星型のオブジェクト 使用している色をいちいち数値や色名で指定すると煩雑ですので、 数えたい色(例えば赤)の星型をひとつ選択した状態で実行します。 エラー処理はしてませんので、オブジェクトを選択しないで実行すると エラーになります。 Sub Test1() Dim shp, Col, C Col = Selection.ShapeRange.Fill.ForeColor.SchemeColor '(A) For Each shp In ActiveSheet.Shapes If shp.AutoShapeType = msoShape5pointStar Then '(B) If shp.Fill.ForeColor.SchemeColor = Col Then C = C + 1 '(C) End If Next Range("E4").Value = C End Sub (A):選択している星型の色を取得しています。 (B):種類がオートシェイプの星形かどうかを判断しています。 (C):星型の色が最初に選択していたものと同じ色ならカウントします。
その他の回答 (3)
- misatoanna
- ベストアンサー率58% (528/896)
> A5に黄色の星の数 > B5に赤色の星の数 > C5に緑色の星の数 > を表示する 単純に、前回の操作を応用するだけでよいのではないですか? > 1.A5:A35を赤、B5:B35を青、C5:C35を緑、D5:D35を黄 → A5:A35を黄、B5:B35を赤、C5:C35を緑 > 2.A5:D35を選択した状態でマクロを実行 → A5:C35を選択した状態でマクロを実行
お礼
ありがとうございました
- misatoanna
- ベストアンサー率58% (528/896)
#1、2です。 シート上に散在する図形のうち、指定した行にある図形の数をカウントする 場合、その行をチェックするだけではカウントできません。 そのため、1行ごとに全ての図形を参照してその左上角または右下角が対象 行内のセル番地に含まれているかどうかをチェックするか、いったん全ての 図形をチェックしてそれぞれの行番号や色を配列変数に格納しておいてから 行番号や色番号で配分するなどの処理が必要になります。 むしろ、図形ではなく記号としての "★" を利用したほうがよいのでは、と も思いますが、とりあえず「1行ごとに全ての図形を参照して‥‥」の方法 をとってみました。 > 例えばD5~Z5までの間で数えたいのです。そして行も三十行くらい 使用されている色は、赤、青、緑、黄、の4色と仮定します。 図形の範囲を E5:Z35 と仮定し、A5:D35 に色別の個数を表示する例です。 1.A5:A35を赤、B5:B35を青、C5:C35を緑、D5:D35を黄、に塗りつぶします。 2.A5:D35を選択した状態で次のマクロを実行すると、A5:D35に色別の個数が 表示されます。(のはずです) Sub Test() Dim rng, RW, AD, Col, shp, C For Each rng In Selection RW = rng.Row AD = rng.Address Col = rng.Interior.ColorIndex + 7 For Each shp In ActiveSheet.Shapes If shp.AutoShapeType = msoShape5pointStar And _ shp.TopLeftCell.Row = RW And _ shp.Fill.ForeColor.SchemeColor = Col Then _ C = C + 1 Next Range(AD).Value = C C = 0 Next End Sub ※どの色にでも対応できるはずですが、「白」または「塗りつぶしなし」は 使わないで下さい。
補足
本当にご丁寧にありがとうございます。 大変感謝をしております。 そして、誠に申し訳ないのですが またしてもこちらの説明不足です。 1行の中に3つの☆が入って A5に黄色の星の数 B5に赤色の星の数 C5に緑色の星の数 を表示する感じです。 (A6...A7...A8...も同様) 成績表を作っておりまして、 一番点数が高かった者のその点数の欄に☆をつけるのです。 だから、オブジェクトの方がよかったのですが 手間であれば、点数の隣に記号の☆を配置する欄を設けて それをカウントする方がいいかもしれませんね。 いかがでしょうか。 もし、尚ご助力いただけましたら幸甚でございます。
- misatoanna
- ベストアンサー率58% (528/896)
一般機能ではできません。マクロで次のように記述します。 シート全体の中の個数 Sub TEST1() Range("E4").Value = ActiveSheet.Shapes.Count End Sub 限られた範囲(例、B5:G20)の中の個数 ※左上端が範囲内に入っているオブジェクトを数える例です。 Sub TEST2() Dim shp, C For Each shp In ActiveSheet.Shapes If Not Intersect(Range("B5:G20"), shp.TopLeftCell) _ Is Nothing Then C = C + 1 Next Range("E4").Value = C End Sub オブジェクトの種類を限定して数える場合は、更にその旨の記述が 必要です。
補足
迅速かつ的確なお返事をありがとうございます。 とても助かります。 エクセルにデフォルトで存在する星型のオブジェクトなのですが 緑、赤、黄で色分けしています。 その限定で数え分けるマクロ(ということなのですね)を お教えいただけましたら幸甚でございます。
補足
本当にありがとうございます。 動作して、数も数えられました。 しかし、大変申し訳ございません。 まるっきりこちらの説明不足なのですが 具体的に申し上げます。 例えばD5~Z5までの間で数えたいのです。 そして、行も三十行くらいあり、 各行で計測したいのです。 行数は毎月変動します。 列も日増しに増えていきます。 計測範囲に関しては、前回説明してくださった中にあったかと思うのですが、当方全くの素人で、まるっきり応用が利きません。 大変申し訳ないのですが、もう一度ご助力いただけましたらさいわいです。