• ベストアンサー

円弧の描画について

エクセルのワークシート上に2点(x1,y1)、(x2,y2)の座標があり、半径がrと決まっている場合に、(x1,y1)を始点、(x2,y2)を終点とする半径rの円弧を描きたいのですが、VBAで教えていただけますでしょうか? 例えばエクセルのワークシート上に2点(600,400)と(500,300)という座標があります。この座標は、 Dim ShapeA As Shape, ShapeB As Shape Set ShapeA = ActiveSheet.Shapes.AddShape _ (msoShapeOval, 600, 400, 2, 2) Set ShapeB = ActiveSheet.Shapes.AddShape _ (msoShapeOval, 500, 300, 2, 2) というコードでワークシート上に描いています。 この2点をそれぞれ始点、終点として、半径100の円弧を描く方法を考えているのですが、 VBA初心者の為、困っています。VBAで円弧を描く方法がありましたら是非教えていただきたく お願い致します。 よろしくお願い致します。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

私なりにやってみて以下報告します。ただし、私には判らない点は残ったままですが。 ーー エクセルのオートシェイプで基本図形に円弧(Arc)があります。 Shiftキーを押しつつ書くと真円の1/4円弧がかかれるようです。 そこで右下の黄色い小○点を上に引き上げると、1/4円でなく円の一部になるようです。 マクロの記録をとると Sub Macro1() ActiveSheet.Shapes.AddShape(msoShapeArc, 200, 200, 300, 300).Select Selection.ShapeRange.Adjustments.Item(2) = 54.9544 End Sub などのようになります。 300,300はHeight、Widthの値で、1/4円の場合は半径に当たるので、半径を指定すればよいと思う(*1)。 「そこで黄色い小○点を上に引き上げる」操作が、Adjustments にたると思います(*2) そして左上黄色小○点を動かすと Selection.ShapeRange.Adjustments.Item(1) = 76.017 とItem(1)になるところから、Item(1)が左上黄色小○点、Item(2)が右下黄色小○点を左右するものと思います(*3) この数値を決めると任意の円弧をワークシート上に描けると思われます。 (ただし、下手に図形のサイズを変えると、図形がゆがんで円弧でなくなります。黄色小○点を掴んで端点を動かすことです。) ーー >、(x1,y1)を始点、(x2,y2)を終点とする場合どう計算するか は勉強してみてください。 ーー *1-*3が私には断言できるか100%は自信の無いところです。 ーー そして同じようなことを考えた http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200701/07010035.txt がありました。 「Adjustments.Item VBA」でWEB照会すると、予想外の結構の数の記事があるようです。調べてみてください。 ーー 微少直線で円を書くこともやってみましたが、微少直線1つ1つが独立した線(オブジェクト)で、グループ化などがややこしくて、考えるのをやめました。 参考 円弧を描く Sub test03() Worksheets("sheet1").DrawingObjects.Delete r = 300 mx = 100 l = 400 my = l - Sqr(r ^ 2 - mx ^ 2) For x = 100 To 250 Step 1 y = l - Sqr(r ^ 2 - x ^ 2) ActiveSheet.Shapes.AddLine mx, my, x, y mx = x my = y Next End Sub ーー 何かの参考になれば。

jaiueom
質問者

お礼

imogasi様 とても丁寧に教えていただきありがとうございます。 いろいろと調べて何とか希望通り円弧を描く事が出来ました。

その他の回答 (1)

  • akina_line
  • ベストアンサー率34% (1124/3287)
回答No.1

こんにちは。  描画オブジェクトのひとつに「曲線」がありますが、マウスでクリックした点をつないで曲線にするものです。  円弧の通過点を計算して追加していけば円弧になると思います。オブジェクトの名前やメソッドはマクロのレコーディング機能で確認できます。 では。

jaiueom
質問者

お礼

akina_line様 早々にご教授いただきありがとうございます。参考にさせていただきます。

jaiueom
質問者

補足

akina_line様 早々にご教授いただきありがとうございます。参考にさせていただきます。 質問の補足なのですが、エクセルのA列にX座標、B列にY座標が 1行~n行あらかじめ入力されており、エクセル上にそれぞれのXY 座標を描画して、1行目のXY座標と次の行の XY座標を直線コネクタで結ぶという作業をn行まで行っています。 ところがたまにC列に半径Rが入る事があり、その場合は、 2点の座標を半径Rの円弧で結ぶ必要があります。 その為、2点を1つの円弧で出来れば結びたいと考えています。 ActiveSheet.Shapes.AddShape(msoShapeArc, X1, Y1, R R).Select Selection.ShapeRange.Adjustments.Item(1) = 開始角 Selection.ShapeRange.Adjustments.Item(2) =終了角 みたいな形で描画出来ればと思うのですが、開始角と終了角を 求めるコードが、なかなか思い浮かびません。 素人でまだまだ勉強不足な為、稚拙な質問で大変申し訳ありませんが、 何卒ご教授いただきたくお願い致します。

関連するQ&A

  • 円弧の描画について

    円弧の描画について お世話になります。 Visio2007を使用しています。 Visioで円を描画し、その円の情報を基に計算を行い、円弧の作成をしたいと考え ていますが、計算方法が分からずご質問させて頂きました。 以下の【元となる情報】から【求める情報】を計算にて求めます。 【元となる情報】 左上X座標:円の左上X座標 左上Y座標:円の左上Y座標 幅:円の幅 高さ:円の高さ 始点角度:円弧の始点の角度(円の中心から右方向を0度とし       時計回りの角度) 終点角度:円弧の終点の角度(始点角度を0度とし時計回りの角度) (始点角度と終点角度は1度単位で設定をします) 【求める情報】 http://msdn.microsoft.com/ja-jp/library/cc344284.aspx 例えば、 ・始点角度が0度、終点角度が90度の時は円の右下1/4の円弧が作成される ・始点角度が90度、終点角度が180度の時は円の左半分の円弧が作成される 以上の様な円弧を求めるような計算方法をご存知でしたらご教授 お願い致します。

  • 始点、終点の二つの座標と半径からの円弧の長さの求め方。

    始点、終点の二つの座標と半径からの円弧の長さの求め方。 こんにちは。数学ずぶの素人です。 座標上に円弧があります。始点、終点の二つの座標と半径が分かっており、これらから円弧の長さを求めたいのですが計算方法が分かりません。 どなたか分かる方、ご教授ください。

  • 円弧上にある円弧の長さを二等分する点

    円弧上にある円弧の長さを二等分する点 こんにちは。以前に、始点、終点、半径から円弧の長さを求める方法を教えていただいたものですが、今度はそれらからその円弧上にある円弧の長さを二等分する点の座標を求める必要が出てきました。当方数学はずぶの素人ですので計算方法が分かりません。どなたか分かる方、ご教授の程、よろしくお願いします。

  • VBAでは角度はどっち回りですか?

    VBAでインボリュート曲線を描画するプログラムを書いたのですがなぜか時計回りになってしまいます。 自分は角度は3時の方向から反時計回りで増えていくと思っているのですがVBAでは逆回転なのでしょうか。 どっち回りか教えてください。 参考に作ったプログラムを書きます Sub インボリュート() '---------変数の宣言 Dim x1 As Double Dim y1 As Double Dim x2 As Double Dim y2 As Double Dim pai As Double Dim R As Integer '半径 Dim L As Double '-----値を初期設定 R = 50    L = 0 pai = 3.1415926535897 For θ = 0 To 3 * pai Step (pai / 1000) L = θ * R x1 = R * Cos(θ) y1 = R * Sin(θ) x2 = x1 + L * Cos(θ + 3 / 2 * pai) y2 = y1 + L * Sin(θ + 3 / 2 * pai) '---------シート上に図形を描画する ActiveSheet.Shapes.AddShape msoShapeOval, 500 + x1, 500 + y1, 1, 1 ActiveSheet.Shapes.AddShape msoShapeOval, 500 + x2, 500 + y2, 1, 1 Next θ End Sub ちなみにExcel2000です

  • 円弧の座標から半径を求める式

    10個のy座標、10個のx座標からなる10ピクセルの円弧があります。 この円弧の半径を求める式(添付画像のとおりです)は以下の内容でよろしいでしょうか。 始点(ひとつめのy座標とx座標)とふたつめのy座標とx座標の微分係数が (始点とみっつめの座標、始点とよっつめの座標、、、始点と10個目の座標、  という風に比べて(微分して)いく) 連続的なカーブの閾値以上(π/130)のものを合算し、 要素数(この場合は10)で割る。 こういう意味かな・・・と思っていますが、正しい理解なのかいまいち自信がありません。 座標を配列で比較する限り、答えも2次元配列の値になるので 閾値(π/130)が成り立たないですし、 もしy座標同士だけ、x座標同士だけ、で比べると値が2つ出て 長さで表される「半径」ではないなぁ、と思い困っています。 もしおわかりになりましたら教えてください。 よろしくお願い致します。

  • ShapeのVBAの中での取り扱い

    ShapeのVBAの中での取り扱いに関して、サジェスチョン願います。 Shapeに文字が書き込まれていない段階で、選択して文字を読み込み判定しようとするとエラーとなります。 下記のVBAでは、5番目のShapeが該当します。 このエラーを防ぐためには、On Error Resume Nextが有効ですが、他の方法を探しています。例えば、charactor=trueみたいなもの。 ----- Sub Shapeの調査() Dim nametemp(10) As String Dim temp As Integer Dim i As Integer Dim aaa As Variant 'On Error Resume Next ActiveSheet.Shapes.AddShape(msoShapeRectangle, 50, 50, 50, 50).Select ActiveSheet.Shapes.AddShape(msoShapeOval, 100, 100, 50, 50).Select ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 150, 150, 50, 50).Select ActiveSheet.Shapes.AddShape(msoShapeRectangle, 200, 200, 50, 50).Select ActiveSheet.Shapes.AddShape(msoShapeOval, 250, 250, 50, 50).Select temp = ActiveSheet.Shapes.Count For i = 1 To temp ActiveSheet.Shapes(i).Select nametemp(i) = ActiveSheet.Shapes(i).Name Next For i = 1 To temp / 2 + 1 '4つのshapeに対し、文字を書き込もうとする ActiveSheet.Shapes(nametemp(i)).Select Selection.Characters.Text = "" Next For i = 1 To temp / 2 '3つに対して、文字を書き込む ActiveSheet.Shapes(nametemp(i)).Select Selection.Characters.Text = "zzzzz" Next For i = 1 To temp ActiveSheet.Shapes(nametemp(i)).Select aaa = Selection.Characters.Text '<--5番目のShapeに対し If aaa = "zzzzz" Then MsgBox (aaa)'<--errorとなる。 Next End Sub

  • AUTOCAD LT 2014 円弧について

    AUTOCAD LT 2014 を使っています。 円弧の作図で「始点」と「終点」と「円弧長」を入力して円弧を書きたいのですが可能でしょうか。 最終的にはその円の半径が知りたいのです。 よろしくお願い致します。

  • 円弧の始点、終点、回り角度から中心点を求める

    円弧の始点座標、終点座標及び回り角度から円弧の中心点座標を求めることは可能でしょうか? よろしくお願いいたします。

  • 2点と半径から、中心座標と円弧を描く方法

    標記件、以下を満足させる式はどのように導けばよろしいでしょうか?ご教示下さい。 (INPUT)  ・始点と終点の2点のXY座標  ・半径r (OUTPUT)  ・中心点座標  ・2点を結ぶ円弧の関数 なお、中心点と円弧は2つ出来るかと思いますが、どちらでも結構です。判別基準があれば教えて頂きたく。 どうぞよろしくお願いします。

  • 連立二次方程式についてですが。

    教えて下さい。 円弧の始点、終点、半径が与えられています。 これを、公式にあてはめて中心点X、Yを求めたいのですが、 プログラムで二次方程式を扱ったことがなく、わかりません(>_<) 中心点を(a,b)とし、始点を(X1,Y1)、終点を(X2,Y2)、半径をRとします。 公式 (Y2-Y1)(b-(Y1+Y2)/2)=(X2-X1)(a-(X1+X2)/2)と、 (X1-a)^2+(Y1-b)^2 =R^2 この二つの公式で中心点が出ると言われたのですが、 プログラム方法が全くわかりません。。。 例として、始点(362.561,346.93)、終点(331.835,385.569)、半径(121.001)です。 この情報から、中心点(X,Y)を求めるにはどのようなプログラムとなるのでしょうか? 数学、プログラムとも初心者なので、具体的なプログラムを教えていただけると幸いです。 よろしくお願いします。VB6を使用しています。

専門家に質問してみよう