はじめに
Excel VBAのお話です。
シート内の特定のオートシェイプの背景色などのプロパティを変更したいことがあります。
このとき、目的のオートシェイプオブジェクトを取得する必要があります。
ここでは、シート内のオートシェイプオブジェクトの取得方法を紹介します。
オートシェイプはどこにある?
オートシェイプはSheetオブジェクト内のShapesプロパティに格納されています。
SheetオブジェクトはActiveSheet
やWorkBooks(ブック番号or名前).WorkSheets(シート番号or名前)
などで指定することができます。
特定のオートシェイプにはどうやってアクセスする?
Shapes
と複数形ですので、これもまたWorkSheetsなどと同じように番号または名前で指定することができます。
番号で指定する場合
これはアクティブシートの1つめのオートシェイプオブジェクトを選択する例です
ActiveSheet.Shapes(1)
名前で指定する場合
名前で指定する場合は、まずは名前をつけてやる必要があります。
オートシェイプに名前をつける場合は以下のようにします。
対象のオートシェイプを選択すると、シートの左上、関数入力欄の左側(普段であればセルのアドレスが表示される場所)にそのオートシェイプの名前が表示されます。
ここにそのオートシェイプの名前を入力します。
そうしたら、VBAで以下のように指定してそのオートシェイプオブジェクトを指定できます。
これはボタン1
と名付けたオートシェイプを選択する例です。
ActiveSheet.Shapes("ボタン1")
ActiveSheet
の部分はシートオブジェクトであれば良いので、他の指定の仕方でももちろん構いません。
オートシェイプオブジェクトを取得できたら、あとはそのオブジェクトが持つ様々なプロパティの値を取得したり、設定したりお好きなようにどうぞ。
使用例
- オートシェイプの名前を取得したい場合:
ActiveSheet.Shapes(1).Name
- オートシェイプの塗りつぶし色を設定したい場合:
ActiveSheet.Shapes(1).Fill.ForeColor.SchemeColor = 3
すべてのオートシェイプを変更するには?
さて、そうするとすべてのオートシェイプに対して機械的に変更を加えたい場合はどうするのか、という当然の欲求が出てきます。
番号でオートシェイプを指定する方法を上で紹介しましたが、これはつまりForループを回せるということですね。
下の例はシート内のすべてのオートシェイプの塗りつぶし色を緑に指定するものです。
For i = 1 To ActiveSheet.Shapes.Count
With ActiveSheet.Shapes(i)
.Fill.ForeColor.SchemeColor = 3
End With
Next i