Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10696 / 13646 ツリー ←次へ | 前へ→

【20347】2つの図形の座標を取得する pitakon 04/12/6(月) 21:52 質問[未読]
【20349】Re:2つの図形の座標を取得する ichinose 04/12/6(月) 23:14 回答[未読]
【20351】Re:2つの図形の座標を取得する ichinose 04/12/6(月) 23:36 発言[未読]
【20350】Re:2つの図形の座標を取得する Kein 04/12/6(月) 23:28 回答[未読]
【20387】回答ありがとうございました pitakon 04/12/7(火) 22:49 お礼[未読]

【20347】2つの図形の座標を取得する
質問  pitakon  - 04/12/6(月) 21:52 -

引用なし
パスワード
   以下のマクロをVBAで作成したいです。

まず、マクロの実行前にエクセルのシートに2つの円を描いておき、その2つの円をシフトキーを押しながらマウスで左クリックして選択しておく。
そのあと、マクロを実行して、2つの円の中心の間に線を引く。

というものです。
言い換えれば、任意の2つの円の中心間に線を引く、ということです。

選択した2つの円のそれぞれの座標が取得できればいいと思ったのですが、そういう方法がわからなくて困っています。

ご回答よろしくお願いします。

【20349】Re:2つの図形の座標を取得する
回答  ichinose  - 04/12/6(月) 23:14 -

引用なし
パスワード
   ▼pitakon さん:
こんばんは。

>以下のマクロをVBAで作成したいです。
>
>まず、マクロの実行前にエクセルのシートに2つの円を描いておき、その2つの円をシフトキーを押しながらマウスで左クリックして選択しておく。
>そのあと、マクロを実行して、2つの円の中心の間に線を引く。
>
>というものです。
>言い換えれば、任意の2つの円の中心間に線を引く、ということです。
>
>選択した2つの円のそれぞれの座標が取得できればいいと思ったのですが、そういう方法がわからなくて困っています。
>
>ご回答よろしくお願いします。
pitakonがおっしゃる二つの円を選択した状態で以下のコードを実行してみて下さい。

'===================================================================
Sub main()
  Dim x(1 To 2) As Double
  Dim y(1 To 2) As Double
  Dim shp As Shape
  Dim selshp As ShapeRange
  Set selshp = Selection.ShapeRange
  For Each shp In selshp
   With shp
    x(idx + 1) = .Left + .Width / 2
    y(idx + 1) = .Top + .Height / 2
    idx = idx + 1
    End With
   Next
  ActiveSheet _
  .Lines _
  .Add x(1), y(1), x(2), y(2)
End Sub

【20350】Re:2つの図形の座標を取得する
回答  Kein  - 04/12/6(月) 23:28 -

引用なし
パスワード
   こんな感じでしょーか ?

Sub MyLine()
  Dim x1 As Single, y1 As Single
  Dim x2 As Single, y2 As Single

  If Selection.Count <> 2 Then Exit Sub
  If TypeName(Selection.Item(1)) <> "Oval" Or _
  TypeName(Selection.Item(2)) <> "Oval" Then Exit Sub
  With Selection.Item(1)
   x1 = .left + .Width / 2
   y1 = .top + .Height / 2
  End With
  With Selection.Item(2)
   x2 = .left + .Width / 2
   y2 = .top + .Height / 2
  End With
  ActiveSheet.Lines.Add x1, y1, x2, y2
End Sub

【20351】Re:2つの図形の座標を取得する
発言  ichinose  - 04/12/6(月) 23:36 -

引用なし
パスワード
   >▼pitakon さん:
>こんばんは。
>
>>以下のマクロをVBAで作成したいです。
>>
>>まず、マクロの実行前にエクセルのシートに2つの円を描いておき、その2つの円をシフトキーを押しながらマウスで左クリックして選択しておく。
>>そのあと、マクロを実行して、2つの円の中心の間に線を引く。
>>
>>というものです。
>>言い換えれば、任意の2つの円の中心間に線を引く、ということです。
>>
>>選択した2つの円のそれぞれの座標が取得できればいいと思ったのですが、そういう方法がわからなくて困っています。
>>
>>ご回答よろしくお願いします。
pitakonさんがおっしゃる二つの円を選択した状態で以下のコードを実行してみて下さい。
失礼しました。抜けてました。
>
>'===================================================================
>Sub main()
>  Dim x(1 To 2) As Double
>  Dim y(1 To 2) As Double
>  Dim shp As Shape
>  Dim selshp As ShapeRange
>  Set selshp = Selection.ShapeRange
>  For Each shp In selshp
>   With shp
>    x(idx + 1) = .Left + .Width / 2
>    y(idx + 1) = .Top + .Height / 2
>    idx = idx + 1
>    End With
>   Next
>  ActiveSheet _
>  .Lines _
>  .Add x(1), y(1), x(2), y(2)
>End Sub

【20387】回答ありがとうございました
お礼  pitakon  - 04/12/7(火) 22:49 -

引用なし
パスワード
   ichinoseさん、keinさん、ありがとうございました。
おかげで希望どおりのマクロができあがりました。
さらに欲をかいて、円の中心にコネクタをつなげて、円と一緒に線も動くようにしたいと表います。と思うもののどうしていいのかわからないので、新しい質問を立てました。
お時間がありましたら、
【20383】オートシェイプに接続点を追加する
にもアドバイスください。
よろしくお願いします。

10696 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free