人生最悪の忘れ物

エクセルで、オブジェクトのカウントをすることはできるのでしょうか。


例えば、A4とC4にオブジェクトを配置する。

E4にそのオブジェクトをカウントした数(2)を表示させると言うことです。

可能でしょうか?

A 回答 (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):星型の色が最初に選択していたものと同じ色ならカウントします。

この回答への補足

本当にありがとうございます。

動作して、数も数えられました。

しかし、大変申し訳ございません。

まるっきりこちらの説明不足なのですが
具体的に申し上げます。

例えばD5~Z5までの間で数えたいのです。
そして、行も三十行くらいあり、
各行で計測したいのです。

行数は毎月変動します。

列も日増しに増えていきます。

計測範囲に関しては、前回説明してくださった中にあったかと思うのですが、当方全くの素人で、まるっきり応用が利きません。

大変申し訳ないのですが、もう一度ご助力いただけましたらさいわいです。

補足日時:2008/08/19 21:17
    • good
    • 0

> A5に黄色の星の数


> B5に赤色の星の数
> C5に緑色の星の数
> を表示する

単純に、前回の操作を応用するだけでよいのではないですか?

> 1.A5:A35を赤、B5:B35を青、C5:C35を緑、D5:D35を黄
   → A5:A35を黄、B5:B35を赤、C5:C35を緑
> 2.A5:D35を選択した状態でマクロを実行
   → A5:C35を選択した状態でマクロを実行
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2011/07/31 12:48

#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...も同様)

成績表を作っておりまして、
一番点数が高かった者のその点数の欄に☆をつけるのです。

だから、オブジェクトの方がよかったのですが
手間であれば、点数の隣に記号の☆を配置する欄を設けて
それをカウントする方がいいかもしれませんね。

いかがでしょうか。

もし、尚ご助力いただけましたら幸甚でございます。

補足日時:2008/08/20 18:43
    • good
    • 0

一般機能ではできません。

マクロで次のように記述します。

シート全体の中の個数
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

オブジェクトの種類を限定して数える場合は、更にその旨の記述が
必要です。

この回答への補足

迅速かつ的確なお返事をありがとうございます。

とても助かります。

エクセルにデフォルトで存在する星型のオブジェクトなのですが
緑、赤、黄で色分けしています。

その限定で数え分けるマクロ(ということなのですね)を
お教えいただけましたら幸甚でございます。

補足日時:2008/08/15 21:40
    • good
    • 0

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

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


おすすめ情報