アプリ版:「スタンプのみでお礼する」機能のリリースについて

オートシェイプに名前を付け、名前毎に個数をカウントしたいです。
マクロやVBAでカウントできますか?
出来るなら、具体的にどのようにしたらよいでしょうか?

質問者からの補足コメント

  • すみません。エクセル初心者です。なので、具体的に例をあげます。
    添付のようなもので、「あ」「い」「う」・・・のような集計表を作りたいです。
    一度には無理かもしれませんが、「あ」を選択して、数量が確認できる・・・でもいいです。
    これを実現できるマクロを教えてください。
    よろしくお願いいたします。

    「オートシェイプに名前を付け名前毎に個数を」の補足画像1
      補足日時:2021/11/14 16:49

A 回答 (5件)

No.4です。


前回回答のVBAのコードに宣言文がひとつ漏れていたようです。

Dim buf As Long

を追記してください。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2021/11/16 14:42

VBAでの解決方法について、ご質問者の同様のご質問


https://oshiete.goo.ne.jp/qa/12672371.html
で、Qchan1962さんがコードをお示しになっておられます。
以下はQchan1962さんのコードを修正したものです。
繰返しと若干の変更を加えて、とりあえず集計表が作成される状態にしてあります。

Sub Count_Shapes()

Dim shp As Shape
Dim i As Long
Dim adrs As String
Dim ct As Long

For i = 3 To 9
ct = -1
adrs = "A" & i
For Each shp In ActiveSheet.Shapes
On Error Resume Next
If shp.TopLeftCell.Address(0, 0) = adrs Then buf = shp.Fill.ForeColor.RGB
Err.Clear
Next shp

For Each shp In ActiveSheet.Shapes
If shp.Fill.ForeColor.RGB = buf Then ct = ct + 1
Next shp
Range(adrs).Offset(0, 2).Value = ct
MsgBox adrs & "セルのシェイプと同じ色の数は" & ct & "個です"
Next
End Sub

図形のサンプルを作成して、上記コードを実行させた結果が添付画像になります。
「オートシェイプに名前を付け名前毎に個数を」の回答画像4
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
皆様のご指導のもと、いろいろと試してみましたがうまくできませんでした。VBAの勉強を始めたばかりなので・・・
とても助かりました。

お礼日時:2021/11/16 14:42

マクロで可能です。

ただしvba に詳しくないと難しいでしょう。
まずNo1の方のソースをアレンジしてください。
オートシェイプには属性がありますから、
No1の方のフォー・イーチの中のイフ文を加工してください。

オートシェイプの形や色を変数に代入
その上で形や色を判定して、件数をカウントする
Select case 形、色
丸、ピンク:あ = あ + 1
丸、赤い色:い = い + 1
End Select

セレクト文よりはIF文の方がよいかもしれません。
シェイプの属性が何かは、マクロを録音ボタンを使って生成してみて、
どんなものがあるか参考にしたり、
ネットでシェイプ属性に何があるか調べましょう。
およそ上記で言っている事が、
理解できるようになれば、マクロは作れます。
後は集計した個数を数量の列に表示するだけですね。
<開始>ボタンを配置して、
ボタンを押したら集計結果が表示されるようにするとよいでしょう。
がんばってみてくださいね。
    • good
    • 0
この回答へのお礼

お返事が遅くなり申し訳ございません。
VBAの勉強を始めたばかりなので、いろいろと試してみましたが、
うまくいきませんでした。
しかし、いろいろと勉強になりました。
ありがとうございました。

お礼日時:2021/11/16 14:42

名前というより分類ですね。


No.1の方がおっしゃるようにオートシェイプの名前(Name)はユニークなままにしておいた方がよさそうです。
Nameプロパティはコピーしても勝手に変わります。
「あ」とか「い」とかは代替テキスト(AlternativeText)に設定して、それを見て数えるのはどうでしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
お礼が遅くなり申し訳ございません。
ご指摘ありがとうございました。いろいろと勉強になりました。
ありがとうございました。

お礼日時:2021/11/16 14:42

こんにちは



>マクロやVBAでカウントできますか?
できるとは思いますけれど・・・

>名前毎に個数をカウントしたいです。
同じ名前のシェイプを作っちゃうと、後々、区別するのが面倒だと思いますけれど。
(通常は、ユニークな名前にしておく)

そんなことはどうでもいい、とおっしゃるのなら…

Const searchName = "hoge"
Count = 0

For Each shp In ActiveSheet.Shapes
 If shp.Name = searchName Then Count = Count + 1
Next shp

MsgBox searchName & "の数は" & Count & "です"

のような感じで可能かと。
※ 対象はActivesheet内のシェイプとしてあります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
お礼が遅くなり申し訳ございません。
勉強不足で申し訳ございません。いろいろと勉強になりました。

お礼日時:2021/11/16 14:42

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