【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

オートシェイプの複数選択

マクロでオートシェイプを複数選択するとき、RangeにNameの配列を渡します。

ActiveSheet.Shapes.Range(Array("Picture 1", "Rectangle 1")).Select

Excel 2003ではNameプロパティの数字部分は自動で割り振られていたのですが、Excel 2007ではコピーすると同じNameのままになってしまうため、目的のものがうまく選択できないという問題が発生しました。Rangeに渡す配列には序数も指定できるため、それを使って回避しました。

ActiveSheet.Shapes.Range(Array(1, 2)).Select

序数はShapes(index)のindexですが、Shapeオブジェクトから直接取得できないため、ForループでShapesを走査して対象のShapeオブジェクトを見付ける必要があるようです。