• ベストアンサー

直線の位置の指定の仕方 エクセル

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

質問者が選んだベストアンサー

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.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

pu2343
質問者

お礼

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

その他の回答 (1)

  • m_and_dmp
  • ベストアンサー率54% (987/1817)
回答No.1

自分も以前からやりたいと思っていたのでこの際本気で取り組んでみました。 直線を動かすのではなく、直線の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

pu2343
質問者

お礼

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

関連するQ&A