重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

また質問します。
エクセルのグラフの上に直線を引いてあります。
この直線の始点終点を、それぞれ別の長さぶん移動させようとしています。
(直線は横には移動しません縦方向だけです)
直線は必ず右か左に傾いているので、始点終点のうち、高いほうはVBAのコードで
[.top = 移動する値]で設定できますが、低い点の方はどうやって設定したらいいか
わかりません。
どなたかアドバイスをお願いいたします。

A 回答 (2件)

オートシェイプの名前はExcel2007版です。


バージョンに依って違います。
図形を選択すれば「名前ボックス」に表示されます。
そこからコピペすれば正確な名前が使えます。

(例1)
With ActiveChart.Shapes(1)
.Top = .Top + 10
.Height = .Height + 20
End With
(例2)
With ActiveChart.Shapes("直線コネクタ 1")
.Top = .Top - 10
.Height = .Height - 20
End With

(例3)
With ActiveChart.DrawingObjects(1)
.Top = .Top + 10
.Height = .Height + 20
End With
(例4)
With ActiveChart.DrawingObjects("直線コネクタ 1")
.Top = .Top - 10
.Height = .Height - 20
End With

直線のみ処理対象
(例5)
With ActiveChart.Lines(1)
.Top = .Top + 10
.Height = .Height + 20
End With
(例6)
With ActiveChart.Lines("直線コネクタ 9")
.Top = .Top - 23
.Height = .Height - 23
End With
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
下位置を変える場合は、heightに値を足し引きして.height=で設定して
やればいいのですね!
あちこち調べていたのですが、こんなに簡単に設定できると思いません
でした。
ありがとうございます。

お礼日時:2012/06/17 18:42

自分も以前からやりたいと思っていたのでこの際本気で取り組んでみました。


直線を動かすのではなく、直線のLeftとTop、WidthとHeightの情報と、右肩上がりか、下がりかの情報から、新しい直線を描画し、元の直線を削除する方法です。
直線を選択して実行します。選択しないで実行するとエラーになります。
エラー処理は考慮してありませんので、必要により実施してください。

Sub MoveLineUpAndDown()
Dim BP, EP As Variant
LM = InputBox("直線の左端を移動する距離を入力してください。", , 50)
RM = InputBox("直線の右端を移動する距離を入力してください。", , 50)
N1 = Selection.ShapeRange.Nodes(1).Points '始点の座標を取得
N2 = Selection.ShapeRange.Nodes(2).Points '終点の座標を取得
P11 = N1(1, 1)
P12 = N1(1, 2)
P21 = N2(1, 1)
P22 = N2(1, 2)
DD1 = (P21 - P11) / Abs(P21 - P11)
DD2 = (P22 - P12) / Abs(P22 - P12)
DD = -DD1 * DD2 '傾きの判定
Select Case DD
Case Is > 0
D1 = 1: D2 = 0
Case Is < 0
D1 = 0: D2 = 1
Case Else
End Select

With Selection
h = .Height
w = .Width
l = .Left
t = .Top
End With

BX = l
BY = D2 * t + D1 * (t + h)
EX = l + w
EY = D2 * (t + h) + D1 * t

BY = BY + LM
EY = EY + RM
ActiveSheet.Shapes.AddLine beginx:=BX, beginy:=BY, endx:=EX, endy:=EY
Selection.Delete

End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
コードについてわからないところがあり調べたりしていました。
このコードを実行すると4行目のNodes(1).Pointsのところでエラー
が出ました。
調べたところnodesはバージョンによっては使えないという記事がありました。
エラーをでないようにできるかもしれませんが、xls88さんのやり方が
簡単そうですので今回はそちらを使います。
コードについては再度勉強させていただきます。
長いこと回答せずにすいませんでした。

お礼日時:2012/06/17 18:30

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