こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセルVBAで直線図形(オートシェイプ)を書きたいのですが。

エクセルVBAで直線図形(オートシェイプ)を書きたいのですが。座標の指定方法がいまひとつ分かりません。

マクロの記録で、座標数値の設定は分かるのですが、セルに対しての指定方法が分かりません。

図形をドラッグ指定したA1セルからC1セルまで直線を書きたいのです。セルへの始点終点の指定方法が有るのでしょうか。

投稿日時 - 2008-06-16 18:19:53

QNo.4105521

困ってます

このQ&Aは役に立ちましたか?

18人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

> セルへの指定方法ですが、A1の右上とか、右上下の中間とかは指定できるのでしょうか?
オブジェクトの座標を取得できるのは上端(TOP)と左端(LEFT)になります。
右端は左端+幅(WIDTH)、下端は上端+高さ(HEIGHT)で求めることが出来ます。
正直、左端の位置と幅が分かれば右端や中間点の位置を求めるのは小学校の算数ですよ。

> 右下がりであったり、右上がりでもあったり、というワガママなものですが、ドラッグした範囲を取得して指定する方法が分からないのです。

セル範囲についても同じくTOP,LEFT,WIDTH,HEIGHTが使用できます。
Selection.Top、Selection.Leftなど

右上がりの線を引くか左上がりの線を引くかを自動判別する場合、アクティブセルがセル範囲内の何処に位置するかで判別する方法が考えられます。

セル範囲の左上のセルの行番号
Selection.Row
セル範囲の左上のセルの列番号
Selection.Column
セル範囲の左上のセルの行番号
Selection.Row + Selection.Rows.Count -1
セル範囲の左上のセルの列番号
Selection.Column + Selection.Columns.Count -1
で求められます。
ActiveCellが選択範囲の左上または右下にあれば、右下がり、左下または右上にいれば右上がりの線を引くというのはどうでしょうか?

投稿日時 - 2008-06-17 15:18:07

お礼

ありがとうございます。

なるほど、座標取得は上端と左端なのですね。あとは、幅と高さで出ますね。

セルの選択範囲は、selectionを使うのですか。ふむふむ。RowとColumnの組み合わせですね。

早速試してみます。丁寧な回答ありがとうございます。

投稿日時 - 2008-06-17 16:33:04

ANo.1

A1の左上の座標
Range("A1").Top
Range("A1").Left
C1の右下の座標
Range("C1").Top + Range("C1").height
Range("C1").Left + Range("C1").Width

A1の左上からC1の右下まで線を引く
Activesheet.shapes.addline(Range("A1").Left, Range("A1").Top, Range("C1").Left + Range("C1").Width, Range("C1").Top + Range("C1").Height).Select

投稿日時 - 2008-06-16 18:41:30

補足

ありがとうございます。
セルへの指定方法ですが、A1の右上とか、右上下の中間とかは指定できるのでしょうか?

当方作りたいVBAは、マウスでドラッグ指定した一番左のセル左上から、一番右のセル右上に、線を引きたいのです。任意の範囲を選択しボタンを押すと線が書けるというものです。右下がりであったり、右上がりでもあったり、というワガママなものですが、ドラッグした範囲を取得して指定する方法が分からないのです。

よろしくお願いします。

投稿日時 - 2008-06-17 10:11:24

お礼

ありがとうございます。
早速試して試ます。

投稿日時 - 2008-06-16 19:02:25

あなたにオススメの質問