アクティブシート上にある、すべての図形オブジェクト(Shape)を選択するマクロを紹介します。
すべての図形を削除したり、一括で移動したりするときに便利なマクロですね。
この処理には専用のメソッドが用意されているため、コードはとても簡単です。
Sub すべての図形を選択する() On Error Resume Next ActiveSheet.Shapes.SelectAll End Sub
Excel起動時に裏で開かれる「個人用マクロブック」などに搭載して、
ショートカットキーに登録したり、ツールバーに置いて使ってください。
使用上の注意点
このマクロは、何かのマクロに組み込むものではなく、
ユーザーがツールバーなどから実行する便利マクロです。
ActiveSheet.Shapes.SelectAll
↑このコードを普通のマクロで使用するのは、
コードによってはかなり危険なのでやめておきましょう。
一例を挙げると、
ActiveSheet.Shapes.SelectAll Selection.Delete
こんな風に「すべての図形を削除する」マクロを作ったつもりでも、
このコードを図形のないシートで実行すると、
「今の選択セルを削除する」マクロに早変わりします。
SelectAllメソッドは選択に失敗してもエラーを返さないため、
その次のSelection.Deleteは、何を消すかわからない恐怖のコードになります。
またSelectAllメソッドはSelect系のコードには珍しく、
違うシートに対しても実行ができます。
Worksheets("別のシート").Shapes.SelectAll Selection.Delete
↑このコードの1行目はエラーにならず、別のシートの図形を裏で選択してくれます。
次にそのシートをアクティブにすると、
全図形が選択されている状態になっているということですね。
そういう裏方の仕事をしてくれた後、
2行目のコードでActiveSheetの選択セルを破壊します。
Select、Activateなどの「選択する」コードは、
そのあとに続く「ユーザーの手作業」を支援するためのコードです。
図形に限らず、Rangeオブジェクト.Selectにも言えることですが、
「選択⇒選択したものを処理」
は、マクロとして組むことは極力避けましょう。
シート内の図形をすべて削除するマクロについてはこちらをどうぞ
おまけ:この操作を手作業でするには
手作業ですべての図形オブジェクトを選択するには、以下の2つの方法があります。
- F5ジャンプ ⇒ セル選択 ⇒ オブジェクト
- 図形を何かひとつ選択した状態でCtrl+A
意外と2を知らない人が多いのですが、2の方が早くて便利ですね。
「2でできるならわざわざマクロ作るほうが面倒だからいいや」
という方もいるかもしれません。
ちなみにこの二つをマクロ記録すると、2は今回紹介した、
ActiveSheet.Shapes.SelectAll
が記録されます。
一方1では、
ActiveSheet.DrawingObjects.Select
と、違うコードが記録されます。
どちらも同じ動きになるので使うのはどっちでもいいのですが、
Shapesの方が新しいオブジェクトなので一応こちらを採用しています。
DrawingObjectsは非表示のメンバなので、
少なくともMicrosoftさんは積極的には推奨していません。
なのであまり使わない方がいいのかな?とも思ったのですが、
ActiveSheet.Shapes.SelectAll MsgBox TypeName(Selection)
と、SelectAllされたオブジェクトたちのTypeNameを聞いてみると、
「DrawingObjects」と答えます。
結局同じことをしているようなので、どちらで書いても問題ないと思います。