Excel VBA質問箱 IV

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

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


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

【72759】円と直線の間に矢印を… aka 12/9/16(日) 7:00 質問[未読]
【72760】Re:円と直線の間に矢印を… UO3 12/9/16(日) 8:05 発言[未読]
【72761】Re:円と直線の間に矢印を… とおりすがり 12/9/16(日) 8:46 発言[未読]
【72762】Re:円と直線の間に矢印を… aka 12/9/16(日) 16:15 お礼[未読]

【72759】円と直線の間に矢印を…
質問  aka  - 12/9/16(日) 7:00 -

引用なし
パスワード
   例えばですが、

   |
〇  |  
   |
このように左側に円を書き、右側に直線を引いて、


   |
〇→|  
   |  

このように円と直線の端と端の間に一本矢印を引くマクロを設定することは可能でしょうか?


また、
  Dim TP, LF, WD
  TP = Selection.Top + (Selection.Height / 2)
  LF = Selection.Left
  WD = Selection.Width
  ActiveSheet.Shapes.AddLine(LF + 6, TP, LF + WD, TP).Select
  Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadTriangle
  Selection.ShapeRange.Line.BeginArrowheadStyle = msoArrowheadTriangle

このようなマクロでセルを選択すればセルの範囲内において矢印を(このコードだと横しか引けませんが)書くことは可能ですが、上記の例にしめしたように、円と直線の端と端にぴったり矢印を書けなくて困っています。

セルの間隔をうまく合わせれば上記コードで十分なのですが、仕事内容的にそれが困難だったりします。


ご教授のほど、よろしくお願いします。

【72760】Re:円と直線の間に矢印を…
発言  UO3  - 12/9/16(日) 8:05 -

引用なし
パスワード
   ▼aka さん:

おはようございます

まず、円と線の中間に矢印を引く操作をマクロ記録してみてください。
(もし、2007であれば、記録はされないかもしれません。
 また、できあがるコードは2003と2010では異なりますが)

できあがったコードに数字が4つ、カンマでくぎられて記載されているところがあるはずです。
これら4つは、先頭から BeginX,BeginY,EndX,EndY の順番です。

生成されるコードのメソッドをクリックしてF1を押すとヘルプがでてきますから
一読いただきたいのですが

BeginX : 始点の横位置 つまり 円の右端(円の左端に円の幅をたしたもの)
BeginY : 始点の縦位置 つまり、円の上端に円の高さの半分をたしたもの
EndX  : 終点の横位置 つまり、線の左端
EndY  : 終点の縦位置 つまり、線の上端に線の高さの半分をたしたもの

ですので、それぞれの値を取得して、この4つを指定するとコード完成です。

円であれ線であれ、

ActiveSheet.Shapes("図の名前").Left
ActiveSheet.Shapes("図の名前").Width
ActiveSheet.Shapes("図の名前").Top
ActiveSheet.Shapes("図の名前").Height

こんなキーワードをベースに考えて工夫してみませんか?

【72761】Re:円と直線の間に矢印を…
発言  とおりすがり  - 12/9/16(日) 8:46 -

引用なし
パスワード
   ご参考まで。

Sub test()
  Dim myConnector As Shape
  Set myConnector = ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 1, 1, 1, 1)
  With myConnector
    .Line.EndArrowheadStyle = msoArrowheadOpen
    .ConnectorFormat.BeginConnect ActiveSheet.Shapes("Oval 1"), 7
    .ConnectorFormat.EndConnect ActiveSheet.Shapes("straight connector 1), 1
    .ScaleHeight 0, msoFalse, msoScaleFromBottomRight
  End With
End Sub

【72762】Re:円と直線の間に矢印を…
お礼  aka  - 12/9/16(日) 16:15 -

引用なし
パスワード
   お二方ともに回答ありがとうございました。

まだ出来てはいませんが、これらの情報を元にやってみます。
ちなみにExcel2010ですので、マクロ記録はできました。

本当にありがとうございました。

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