プロが教えるわが家の防犯対策術!

お世話になります。

ワークシート上にある全ての図形を読み込む際、下記の場合だと、図形を配置した順番に読み込まれます。

Dim sh as Shape
For Each sh in ActiveSheet.Shapes
・・・(省略)
Next sh

これを、例えば左上に配置しているものから順に読み込む、といったようなことを、EXCEL VBAで実現できるでしょうか?

EXCELは2003です。

よろしくお願いいたします。

A 回答 (2件)

Windows ではドライブ、フォルダ、ファイル、など生成されたオブジェクトには自動的にWindows独自(ユニーク)のID(Indexのようなもの)が付加されます。

ExcelやWordでもおなじように生成された順にIDがつけられるので、なにも指定しなければ、VBAなどではそのID順に処理がなされるのではないでしょうか。ご質問のShapesの場合もIDが自動的に付加されているものと思いますが、Shapeごとにその位置情報があります。(Shapes.Top、Shapes.Left)など。これを利用して読み込む順序を制御できるのではないでしょうか。具体的なコードの記述はいまは控えますが・・・。
    • good
    • 0

#1のご回答のとおりと思います。


その種の図形(Shapes?)コレクションにAddされた順序で捉えてよいならForEachで捉えられますが、一般には位置とは関係がありません。各図形のLEFT,TOPなどの情報は取れるものの、一旦全図形のそれらの情報を蓄え、ソートして1番、2番を採るとかやれば出来そうですが、左右のほかに上下の2要素もあると、採り上げる順序の理屈付けさえ難しいと思う。
>左上に配置しているものから・・
と簡単に言うが、アルゴリズムはどうなるのかな、結構難しいのでは。高さHeightの大小などがあるとね。
そして位置は不安定(変更可能)なので、変更されたとき、以前のコードが有効かの問題とか、有効な利用が出来るかの問題もあります。出来ればそういうプログラムを作ることは避けて通りたいと、私なら思う。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています