皆様こんにちは、ノグチです。
エクセルVBAで請求書や発注書などを作っているとき、会社のロゴや印章を表示させたいな…なんてことありますよね。
ボタンやオートシェイプをVBAで表示/非表示にしたり、表示する場所を指定できたら…ということもありますよね。
または、図形をシートに沢山、上下の位置もそろえて表示したい…でも手で一つ一つの図形の位置を調整するのも大変…なんてこともあるかもしれません。
今回は、そんなエクセルの画像をVBAで操作するための第一歩として、Shapeオブジェクトととは何か?また、Shapeオブジェクトとして操作できるモノの種類を調べた結果をご紹介します!
Shapeオブジェクトとは?
エクセルVBAでシート上の図形を操作する時に使用するのが、Shapeオブジェクトです。
Shapeオブジェクトで図形などの操作や情報の取得をするには、このように記述します。
しかし、一言で図形と言っても、具体的にどんなモノを指すのでしょうか。
論より証拠ということで、調べてみました。
Shapeオブジェクトで操作できる図形の種類を調べてみる
Shapeオブジェクトで操作できる図形その他を調べるために、エクセルのシートにオートシェイプやアイコン、蛍光ペンで描画したものや画像、グラフなどを張り付けたものを用意しました。
Shapeオブジェクトで図形の情報が取得できる=Shapeオブジェクトで操作できるモノ、ということで、この色々な図形などの情報を、Shapeオブジェクトを使って取得してみましょう。
Shapeオブジェクトの情報を取得するプロパティ
さて、画像や図形の情報を、Debug.printを使ってイミディエイトウインドウに表示してみましょう。
Debug.printについてはこちらの記事で説明されていますので、併せてご覧ください。
先にお見せした図形や画像の説明には、種類(オートシェイプやグラフなど)を記入してあります。
今回は、Shapeオブジェクトのプロパティを使って、この説明に記入してあるテキストを取得してみようというわけです。
取得できれば、その画像や図形はShapeオブジェクトで操作できるということですね。
今回使用するプロパティはこちらの2つです。
まずはNameプロパティ。
このプロパティは、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オブジェクトの情報をイミディエイトウインドウに表示する」というコードです。
このコードを実行すると、イミディエイトウインドウはこうなります。
- 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オブジェクトを使って、フォルダに格納している画像ファイルをシートに追加する方法をご紹介していきます。
それでは、最後までお読みいただきありがとうございました!
コメント
こんにちは!
素敵なお話ありがとうございます!
図形処理がとっても捗りそうです!!
SGOさま
こんにちは!コメントありがとうございます!
今後もいくつか画像の操作について記事にできればと思っていますので、お役に立てれば嬉しいです!
Shapeオブジェクト.AlternstiveText
ってプロパティ名のつづり間違っていませんか?
shimさま
こんにちは!
ご指摘ありがとうございます。記事を修正させていただきました。
今後とも当ブログをよろしくお願い致します。