エクセルVBAで画像やオートシェイプなどを操作するShapeオブジェクトのはじめの一歩


vba,excel,shape,object,eyecatch

皆様こんにちは、ノグチです。

エクセルVBAで請求書や発注書などを作っているとき、会社のロゴや印章を表示させたいな…なんてことありますよね。

ボタンやオートシェイプをVBAで表示/非表示にしたり、表示する場所を指定できたら…ということもありますよね。

または、図形をシートに沢山、上下の位置もそろえて表示したい…でも手で一つ一つの図形の位置を調整するのも大変…なんてこともあるかもしれません。

今回は、そんなエクセルの画像をVBAで操作するための第一歩として、Shapeオブジェクトととは何か?また、Shapeオブジェクトとして操作できるモノの種類を調べた結果をご紹介します!

エクセルVBAでシート上の図形を操作する時に使用するのが、Shapeオブジェクトです。

Shapeオブジェクトで図形などの操作や情報の取得をするには、このように記述します。

Shapeオブジェクト.メソッドまたはプロパティ

しかし、一言で図形と言っても、具体的にどんなモノを指すのでしょうか。

論より証拠ということで、調べてみました。

Shapeオブジェクトで操作できる図形の種類を調べてみる

Shapeオブジェクトで操作できる図形その他を調べるために、エクセルのシートにオートシェイプやアイコン、蛍光ペンで描画したものや画像、グラフなどを張り付けたものを用意しました。

vba,excel,shape,object,画像の種類

Shapeオブジェクトで図形の情報が取得できる=Shapeオブジェクトで操作できるモノ、ということで、この色々な図形などの情報を、Shapeオブジェクトを使って取得してみましょう。

Shapeオブジェクトの情報を取得するプロパティ

さて、画像や図形の情報を、Debug.printを使ってイミディエイトウインドウに表示してみましょう。

Debug.printについてはこちらの記事で説明されていますので、併せてご覧ください。

【エクセルVBA】初心者のうちから知っておくべきDebug.Printの使い方
今回はエクセルVBAでイミディエイトウィンドウを使う方法の超基本として、初心者のうちからぜひとも知っておいて欲しいDebug.Printの使い方です。一行に複数の出力をする方法も解説していますよ。

先にお見せした図形や画像の説明には、種類(オートシェイプやグラフなど)を記入してあります。
vba,excel,shape,object,代替テキスト,説明

今回は、Shapeオブジェクトのプロパティを使って、この説明に記入してあるテキストを取得してみようというわけです。

取得できれば、その画像や図形はShapeオブジェクトで操作できるということですね。

今回使用するプロパティはこちらの2つです。

まずはNameプロパティ。

Shapeオブジェクト.Name

このプロパティは、Shapeオブジェクトの名前を取得するプロパティです。

この名前というのは、人間がつけたものではなく、エクセルが内部で自動的につけてくれる名前を指します。

お次はAlternativeTextプロパティ。
Shapeオブジェクト.AlternativeText

こちらは、Shapeオブジェクトの説明文を取得するプロパティです。

では、これらのプロパティでShapeオブジェクトの説明を取得して、イミディエイトウインドウに表示してみましょう。

シート上のすべてのShapeオブジェクトの情報を取得する

さて、シートに張り付けた図形などのうち、Shapeオブジェクトで操作できるものの情報を取得するために、下記コードを用意してみました。
Sub シェイプ情報取得()
Dim spShape As Shape

For Each spShape In ActiveSheet.Shapes
    Debug.Print spShape.Name, spShape.AlternativeText
Next spShape

End Sub

「シートにある図形などのうち、Shapeオブジェクトの情報をイミディエイトウインドウに表示する」というコードです。

このコードを実行すると、イミディエイトウインドウはこうなります。

vba,excel,shape,object,イミディエイトウインドウ
  • Ink 18    蛍光ペンで描画した図形
  • Graphic 22   猫
  • Picture 24   「氷で冷えたトマト氷で冷えたトマト」のフリー写真素材を拡大
  • Chart 25      エクセルのグラフツールで作成したグラフ
  • TextBox 26   テキストボックスで描画したテキスト
  • Diagram 8    SmartArtで描画した図形
  • Rectangle 9  ワードアートで描画したテキスト
  • Pentagon 10 オートシェイプで描画した図形
  • Button 2      ボタン

イミディエイトウインドウにシート上にある全ての図形などの「名前」と「説明」が表示されていますね。

つまり、先にお見せしたシートに張り付けた図形その他は全てShapeオブジェクトで操作ができる、ということになります。

なんだか面白味のない結果になってしまいましたが、グラフや蛍光ペンで描画したものもShapeオブジェクトで操作できるのは私にとっても発見でした。

まとめ

今回は、エクセルVBAで図形などを操作するための第一歩として、ShapeオブジェクトとShapeオブジェクトで操作ができるモノの一例をお見せしました。

大体の帳票やエクセルツールで使うような図形やグラフなら、このShapeオブジェクトで操作ができそうですね。

また、「これってShapeオブジェクトで操作できるものなのかな?」というものがあれば、今回ご紹介したコードを実行してみると、Shapeオブジェクトなのかどうなのかを確認することができますよ

次回は同じくこのShapeオブジェクトを使って、フォルダに格納している画像ファイルをシートに追加する方法をご紹介していきます。

エクセルVBAで画像ファイルをシートに追加するAddPictureメソッドの使い方
ShapesオブジェクトのAddPictureメソッドで、エクセルのシート上に画像を追加する方法をご紹介しています。画像のサイズや位置が決まっている場合、手動で調整するのは手間なもの。エクセルVBAで位置やサイズを指定しておけば、面倒な調整が不要になりますよ。

それでは、最後までお読みいただきありがとうございました!

連載目次:エクセルVBAで図形を操作するShapeオブジェクトの使い方

画像、オートシェイプ、グラフ、テキストボックス、ワードアート、ボタン…エクセルでは様々なものをシートに配置できますが、これらのアイテムは全てShapeオブジェクトです。これら、Shapeオブジェクトの挿入や配置など、自在に操作する方法をお伝えしていきます。
  1. エクセルVBAで画像やオートシェイプなどを操作するShapeオブジェクトのはじめの一歩
  2. エクセルVBAで画像ファイルをシートに追加するAddPictureメソッドの使い方
  3. 【エクセルVBA】AddPictureメソッドで挿入した画像にリンクを張る方法
  4. エクセルVBAで大量の画像をまとめてシートに貼り付けるAddPictureメソッドの使い方

コメント

  1. SGO より:

    こんにちは!
    素敵なお話ありがとうございます!
    図形処理がとっても捗りそうです!!

    • ノグチ より:

      SGOさま
      こんにちは!コメントありがとうございます!

      今後もいくつか画像の操作について記事にできればと思っていますので、お役に立てれば嬉しいです!

  2. shim より:

    Shapeオブジェクト.AlternstiveText
    ってプロパティ名のつづり間違っていませんか?

    • ノグチ より:

      shimさま
      こんにちは!
      ご指摘ありがとうございます。記事を修正させていただきました。
      今後とも当ブログをよろしくお願い致します。

タイトルとURLをコピーしました