マクロのオートシェイプのグループ化ついて。
マクロフォームボタン以外のオートシェイプをグループ化したいのですが
方法がわかりません。
ActiveSheet.DrawingObjects.Select
Selection.ShapeRange.Group.Select
上記だと全て選択されてしまいます
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
自己解決
Sub Test()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
If shp.OnAction = "" Then '※
shp.Select False
End If
Next
Selection.ShapeRange.Group.Select
End Sub
投稿が遅くなってしまい申し訳ありません。
急ぎだったので、皆さんが投稿される前に何とか自分で解決することが出来ました。
でもこういう書き方もあるんだなと参考になりました。
皆さん本当にご協力ありがとうございました!
投稿2016/10/26 01:56
編集2016/10/26 02:01総合スコア10
0
提示いただいたコードでは、アクティブシートの「全ての描画オブジェクト」という集団を指定して選択し、グループ化しています。
しかし今回行いたいのは、その集団の中からいるもの・いらないものを選り分けてグループ化するということですので、まずは集団の中からオブジェクトを1つずつ取り出して、取捨選択する判断が必要になります。
処理の流れは
①全ての描画オブジェクト(DrawingObjects)を対象にループ処理(オブジェクトを1つずつ取り出す)
② ①で取り出したオブジェクトがグループ化対象か判別する
③ グループ化対象ならグループ化対象配列にオブジェクト名を追加する
④ループ処理が終了した時、グループ化対象配列に格納されているオブジェクトをグループ化する。
という感じになると思います。
以下はボタン1(オブジェクト名"Button 1")以外を対象にグループ化する例です。
Dim obj As Shape 'DrawingObjectsから取り出した1つのオブジェクト Dim strObjNames() As String 'グループ化するオブジェクト名を格納する配列 Dim iIdx As Integer '配列用カウンタ iIdx = 0 'アクティブシート内の全ての描画オブジェクトをループ処理 For Each obj In ActiveSheet.DrawingObjects 'MsgBox obj.Name オブジェクト名を表示 'Button 1以外のオブジェクトをグループ化対象アレイに追加 If obj.Name <> "Button 1" Then '配列の拡張 ReDim Preserve strObjNames(iIdx) '配列にオブジェクト名を格納 strObjNames(iIdx) = obj.Name '次回用にカウンタを+1 iIdx = iIdx + 1 End If Next If UBound(strObjNames) = 0 And strObjNames(0) = "" Then '配列にオブジェクトを格納していなければ終了 Exit Sub Else '配列に格納したオブジェクトをグループ化 'ActiveSheet.Shapes.Range(strObjNames).Select '配列内のオブジェクトを選択 'Selection.ShapeRange.Group.Select '選択したオブジェクトをグループ化して選択 ActiveSheet.Shapes.Range(strObjNames).Group '配列内のオブジェクトをグループ化(選択はしない) End If
投稿2016/10/25 04:45
総合スコア3020
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
グループ化したくないシェイプに名前をつけておき
それ以外のものをグループ化するのが良いかと思います。
Dim myShape As Shape Dim myNames As String With ActiveSheet For Each myShape In .Shapes If myShape.Name = "名前" Then '名前の時は何もしない Else '名前以外のときは対象にする myNames = myNames & vbTab & myShape.Name End If Next myShape ’グループ化 .Shapes.Range(Split(myNames, vbTab)).Group.Select End With
投稿2016/10/25 04:22
総合スコア1249
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
趣旨とあっているかわかりませんが、とりあえず以下でできました。
適当にやったので他に手段はあるかもしれません。
VBA
1Dim s As Shape 2For Each s In ActiveSheet.Shapes 3 If s.AutoShapeType <> msoShapeMixed Then 4 s.Select False 5 End If 6Next 7Selection.Group
投稿2016/10/25 04:10
編集2016/10/25 04:31総合スコア17000
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。