Excel 2003のVBAで条件に一致する複数の図形を選択する方法。
仕事中に考えていた1 ものの結局思い浮かばなくて、休日なのに休めた気がしなかった。これで安心して日曜日を迎えられる。
とりあえず2番の回答者が書いたソースコードまるごと引用。ってか、仕事中に書いていたコードとほぼ一緒(何)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Sub Macro()
Dim ob As Shape
Dim st() As Variant
Dim i As Integer
i = 0
For Each ob In ActiveSheet.Shapes
ReDim Preserve st(i)
st(i) = ob.Name
i = i + 1
Next ob
ActiveSheet.Shapes.Range(st).Select
Selection.ShapeRange.Group.Select
End Sub
引用元: エクセルのワークシート上にVBAで作ったオートシェイプを、引き.. – 人力検索はてな.
つまずいていたのは Dim st() As Variant の部分。ここを Dim st() As String と書いていたので実行時エラー2 。たったこれだけで2時間も詰まっていたという…
さらにもう一点、 ActiveSheet.Shapes.Range() の引数はVariant型とヘルプに書かれていたので、
1
2
3 Dim v As Variant
v = Array("図形 1", "図形 2", "図形 3")
ActiveSheet.Shapes.Range(v).Select
のように書かないといけないものと勘違い。String型の動的配列3 静的Variant型配列4 に変換するのではなく、単純にVariant型の動的配列を書いてやればいいだけというオチ。
Variant型の扱いが未だによくわからん…
- 今の職場では、自分のPCをインターネットに繋いで検索することができない。 [↩]
- 自宅にExcel VBA環境がないのでエラーメッセージを再現できない… [↩]
- ReDim Preserve v(10) [↩]
- v = Array(“aaa”, “bbb”) [↩]







