質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

4回答

4555閲覧

【至急】マクロボタン以外のグループ化

Arisa

総合スコア10

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2016/10/25 03:33

編集2016/10/25 03:34

マクロのオートシェイプのグループ化ついて。
マクロフォームボタン以外のオートシェイプをグループ化したいのですが
方法がわかりません。

ActiveSheet.DrawingObjects.Select
Selection.ShapeRange.Group.Select
上記だと全て選択されてしまいます

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
Arisa

総合スコア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

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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

Qoo

総合スコア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
ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問