はじめに
VBAで図形を操作する際、これまでは「Shapes("名前")
」のように、あらかじめ決められた名前の図形を対象にしてきました。しかし、場合によっては「今、自分が選んでいるこの図形の色を変えたい」といったように、操作対象を固定せず、その時々で選択したものに対して処理を行いたい場面も多いでしょう。
このような「選択中のオブジェクト」をVBAで扱う方法を知っていると、特定の書式を適用する「お気に入りツール」のようなマクロが作れて、作業効率が格段にアップします。今回は、その中心となるSelection.ShapeRange
の使い方を解説します。
主役は Selection.ShapeRange
VBAには、ユーザーが現在選択しているものを表すSelection
という特別なオブジェクトがあります。このSelection
オブジェクトは、選択されているのがセルか、グラフか、あるいは図形かによって、様々なプロパティを持ちます。
そして、ユーザーが1つ、または複数(Shiftキーを押しながらクリック)の図形を選択しているとき、それらの図形はSelection.ShapeRange
というプロパティを通じて操作できます。
このSelection.ShapeRange
を使えば、コードに対象の図形名を書き込む必要がなくなり、非常に汎用性の高いマクロを作成できるのです。
実践コード:選択した図形を「強調スタイル」にする
事前準備
特にありません。ワークシート上に、好きな図形をいくつか配置しておくだけで準備完了です。
VBAコード例
以下のコードは、選択されている図形を「黄色い背景に赤い太枠線」という、目立たせるための強調スタイルに一瞬で変更するマクロです。図形が選択されていない場合にエラーが出るのを防ぐ処理も加えています。
Sub ApplyHighlightStyleToSelection()
' ■ エラー防止処理
' もし選択されているオブジェクトの種類が「図形」でなければ、処理を中断
If TypeName(Selection) <> "DrawingObjects" Then
MsgBox "図形を選択してから実行してください。", vbExclamation, "エラー"
Exit Sub
End If
' ■ メイン処理
' Selection.ShapeRange を使って、選択中の図形(単数または複数)を操作
With Selection.ShapeRange
' 塗りつぶしを鮮やかな黄色に設定
.Fill.Visible = msoTrue
.Fill.ForeColor.RGB = RGB(255, 255, 0)
' 枠線を太い赤色に設定
With .Line
.Visible = msoTrue
.Weight = 3
.ForeColor.RGB = RGB(255, 0, 0)
End With
' (もしテキストがあれば) テキストを中央揃え&太字に
If .HasTextFrame Then
With .TextFrame2.TextRange.Font
.Bold = msoTrue
End With
.TextFrame2.HorizontalAnchor = msoAnchorCenter
.TextFrame2.VerticalAnchor = msoAnchorMiddle
End If
End With
End Sub
コードの解説
- エラー防止処理
TypeName(Selection)
は、選択されているオブジェクトの種類名を文字列で返します。図形が選択されている場合は"DrawingObjects"
となるため、これと異なる場合はメッセージを表示してマクロを安全に終了させています。このようなエラー処理は、不特定多数の状況で使われるマからクロには非常に重要です。 With Selection.ShapeRange
この一行で「現在選択されているすべての図形」を処理の対象に指定しています。あとは、これまで通り.Fill
や.Line
などのプロパティを操作すれば、選択されている図形すべての書式が一度に変更されます。
マクロの使い方:クイックアクセスツールバーへの登録
この種のマクロは、ボタン一つで呼び出せるようにすると真価を発揮します。クイックアクセスツールバーに登録してみましょう。
- Excelウィンドウ左上のクイックアクセスツールバーを右クリックし、「クイック アクセス ツールバーのユーザー設定」を選択します。
- 「コマンドの選択」のドロップダウンから「マクロ」を選びます。
- 一覧から
ApplyHighlightStyleToSelection
を選択し、「追加 >>」ボタンを押します。 - 右側のリストに追加されたマクロを選択し、「変更」ボタンを押すことで、好きなアイコンを選ぶことができます。
これで、いつでもワンクリックで、選択した図形を強調スタイルにできるようになりました。
まとめ
今回は、Selection.ShapeRange
を使って、選択中の図形を操作する方法を解説しました。
Selection.ShapeRange
で、**ユーザーが選択している図形(単数・複数問わず)**を処理対象にできる。TypeName(Selection)
でエラー処理を行うと、より安全で使いやすいマクロになる。- 作成したマクロをクイックアクセスツールバーに登録すれば、自分だけのオリジナル描画ツールとして活用できる。
特定の図形名を指定するマクロと、今回のように選択中の図形を対象にするマクロ。この2つを使い分けることで、VBAによる図形操作の幅が大きく広がります。