エクセル、VBAで図形の回転角度指定

このQ&Aのポイント
  • 直角三角形を回転させるマクロを作成したい
  • 鋭角の角度を指定する方法がわからない
  • VBAに詳しくないので、どこが間違っているのかわからない
回答を見る
  • ベストアンサー

エクセル、VBAで図形の回転角度指定?

こんにちは。 直角三角形をその片方の鋭角分回転させるというマクロを作成したいと思っているのですが、 なかなか上手くいかずご教示いただければと思い投稿いたしました。 選択図形をb度回転させるには Selection.ShapeRange.Rotation b(数値)で良いのだと思うんですが、 bに鋭角の角度を指定する方法がわかりません。 鋭角を求める式はエクセル関数では 「斜辺と辺 X の間の鋭角の角度:α = DEGREES(ATAN(y/x))」で求められんのですが、 この角度をbに指定したいんです。 私がVBAに詳しくないので、いろいろ試してみてもどこが間違っているのかさえわからなくて・・・ Selection.ShapeRange.Rotation=Application.WorksheetFunction.Degrees(Atan(y/x)ではエラーになってしまいます。 鋭角の角度を数値として認識してないんでしょうか? 原因がおわかりになる方がいらっしゃいましたら、ぜひご教示いただきたく存じます。 よろしくお願いします。

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

この辺の数学関数にはあまり詳しくないので、外しているかもしれませんが、まずワークシート関数とVBAの関数は違います。同じ機能を持った関数が別の名前だったり、同じ名前の関数が別の機能だったりします。 それで、VBAからワークシート関数を使うには、お書きの通りApplication.WorksheetFunctionを使いますが、 Application.WorksheetFunction.Degrees(Atan(y/x)) では、Degreesはワークシート関数なのですが、その引数となるAtan()はVBAの関数と解釈されます。 それで、VBAの関数でもアークタンジェントを求めるのがAtan()だと上の式でもうまくいくのですが、なぜかVBA関数ではAtn()という名前です。したがって、上の式は、 Application.WorksheetFunction.Degrees(Atn(y/x)) とすればうまくいくかもしれません。 しかし、そもそもワークシート関数を使わずにVBAの関数だけでなんとかならないか、DEGREES()に相当するVBA関数を探したのですが、VBAのヘルプでは、 「角度の単位を度からラジアンに変換するには、度にπ/180 を掛けます。ラジアンから度に変換するには、ラジアンに 180/πを掛けます。」 と書かれており、関数はないようです。 したがって、あえてワークシート関数を使わずに書くとすると、πは4*Atn(1)で求められるので、 Atn(y/x)*(180/(4*Atn(1))) と書いてもいいかもしれません。

eadgbe
質問者

お礼

ワークシート関数とVBA関数は違うんですね。 教えていただかなければ知らないままでした。 ありがとうございます! Atn(y/x)*(180/(4*Atn(1))) でやってみようと思います!

関連するQ&A

  • 三次元座標の回転角度

    左手系三次元座標A(X,Y,Z)がB(x,y,z)に移動したとき、原点からみたZ軸の回転角度Θの算出は、 Θ=Atan(y/x)-Atan(Y/X) でいいですか。よろしくお願いします。

  • エクセルで回転する座標の出し方

    エクセルで回転する座標の出し方 (例) 座標X100、Y100の点から好きな角度を回したときのX、Yの座標の求め方 回転中心はX0、Y0 回転方向は反時計回り 例で言えば X141.421、Y0  が0度       X0、Y141.421  が90度       X-141.421、Y0 が180度       X0、Y-141.421 が270度 エクセルでの問題点は 1.角度計算がラジアンになる デグリも関数はあるけど書式がわからない  無理やり(PI()/180)などを使ってるがアークタンジェントでは書式がわからない 2.正と負の計算式・答えが負になるときの処理ができない  回転角度が270度とか 今電卓で打っているのは 100/100=ATAN ----------------------最初の角度 100*100+100*100の答えのルート--------回転中心からの直線距離 最初の角度+動かしたい角度------------求めたい座標の角度 SIN求めたい座標の角度*直線距離-------Y座標 答え COS求めたい座標の角度*直線距離-------X座標 答え 最初のX、Y座標と 動かしたい角度を入れると答えが出るような 物が作りたいです よろしくお願いします エクセル2000 WINXP

  • 空間での座標回転角度の求め方とは

    空間上にある点A(x,y,z)をX,Y,Zを基準として(θx、θy、θz)で回転させます。この回転でできた点をBとします。 そのBを同じ様にX,Y,Zで回転させて元へ戻したい場合、 X,Y,Zの順番で回転させているので、 戻すにはZ,Y,Xの順番に回転させればB=Aとなると思います。 tanや内積などを使い、回転角度を考えその角度で回転させることを考えました。 しかし、tanを用いた場合も内積で考えた場合も多少誤差が生じます。(θx=60度になるはずが、計算すると57度になったりする) 正しく回転角度(θx、θy、θz)を求めたい場合はどうすればいいのでしょうか? 一応回転の式はグラフィックス関係の本から調べました。 また自分でθx、θy、θzを入力した場合A=Bとなるので、 式は問題ないと考えています。 現状ではBを逆回転する際のθzを tan(√(Bx^2+By^2)/√(Bz^2))=θz Z軸逆回転したものをB'とすればθyは tan(√(Bx'^2+Bz'^2)/√(By'^2))=θy さらにY軸逆回転したものをB~とすればθyは tan(√(By~^2+Bz~^2)/√(Bx~'^2))=θx となりこれで求める事ができると考えています。 内積で考えた場合は内積の式からcosθを求め、acos(cosθ)で求めています。 長々とすみませんが、よろしくお願いします。

  • 売上の傾向線の角度を知りたいのですが

    ある商品の売上高が下記のように時系列順に並んでいます。 この売上高の傾向線を作り、その角度で伸びているか落ち込んでいるかを判別したいと考えています。 年月 商品A 200810 2,069,302 200811 639,697 200812 733,553 200901 1,210,261 200902 346,254 200903 591,042 200904 855,697 200905 1,156,440 200906 2,369,415 200907 1,087,115 200908 1,300,037 200909 910,861 以前の書き込みで下記のものをみたのですが、 tan(角度) = 高さ/底辺 ですので、 角度 = ATAN(高さ/底辺) でラジアン値が求まります。 角度 = DEGREES( ATAN(高さ/底辺) ) で、度で求まるハズ。 上記のデータではX・Yの単位が違うためそのままでは使えませんでした。 申し訳ないのですが、実際の上記売上データで傾向線の角度を求めるには どうしたらよろしいでしょうか? よろしくお願いします。

  • 斜辺と高さから角度の求め方

    sinθの角度の求め方が分からないので計算式を教えていただきたいのでお願いします。 角度は=ASIN(高さ/斜辺)×180/PI() のXとYに数値を当てはめて、解決できていますが、 途中の計算式(どのように求めたか分かるように)を提出しなさいと指示がありました。 以下にデータを記載させていただきますのでよろしくお願いします。 底辺と斜めのなす角度(左下の角度)を求めたいです (1)斜辺:71cm、 高さ:32.9cmからsinθ=68/32.9まではわかりますが、その続きが分かりません。 (2)斜辺:65cm、 高さ:36.5cm 出来れば、関数電卓を使用せず求める方法を教えていただきたいです。

  • EXCEL2007で、回転された図を任意の場所に設定できない

    回転させた図を任意の場所に配置させたいのですが、EXCEL2007になってからShapeRange.Top/Leftに負の値が設定できなくなってしまったようで、任意の場所に配置できなくなってしまいました。 幸いIncrementTopやIncrementLeftには負の値が設定可能なようなのですが、Excel2003の場合とExcel2007の場合で動作が違うことには変わりなく、Excel2003ではTop/Leftの設定だけで済んだものがExce2007ではTop/Leftである程度の基準位置を設定したあと、さらにIncrementTop/IncrementLeftで補正の必要があるように思います。 こんなやり方をしないと図の配置はできないのでしょうか? 具体的には、マクロにて横長や縦長の長方形の図形を挿入し、位置を指定するのですが、図を回転した場合でもTop/Leftは、回転前の図のTop/Leftを設定するので、横長の図を90度回転させ縦長にした場合には、Leftに0を設定しても、回転後の結果の図は左端にはよっておらず、(元の図の横幅-元の図の縦幅)÷2の分だけ空いてしまいます。 なので、EXCEL2003では求められた空きの分だけLeftに負の値を設定するだけでよかったのですが、EXCEL2007ではLeftに負の値が設定できなくなっており、左端に寄せる事が不可能になっています。 以下、現象確認のための簡単なサンプルのマクロを示します。 '縦長の場合です ActiveSheet.Pictures.Insert("C:\TEMP\BITMAP.BMP").Select Selection.ShapeRange.LockAspectRatio = msoFalse Selection.ShapeRange.Height = 700 Selection.ShapeRange.Width = 100 Selection.ShapeRange.Rotation = 90# Selection.ShapeRange.Top = Range("B2").Top Selection.ShapeRange.Left = Range("B2").Left '横長の場合です ActiveSheet.Pictures.Insert("C:\TEMP\BITMAP.BMP").Select Selection.ShapeRange.LockAspectRatio = msoFalse Selection.ShapeRange.Height = 100 Selection.ShapeRange.Width = 700 Selection.ShapeRange.Rotation = 90# Selection.ShapeRange.Top = Range("B2").Top Selection.ShapeRange.Left = Range("B2").Left 内容はなんでもいいのでBITMAP.BMPという図のファイルを用意してください。 上記マクロは"B2"のセル位置が図形の左上を原点とするようにしたいのですが、全く違うところに図が配置されます。

  • 直角三角形の角度

    x軸y軸上に直角三角形を書いた場合の角度の求め方が知りたいです。 座標(x.y)と(x’.y’)から成る斜辺を持つ直角三角形の角度の求め方を教えてください。 よろしくおねがいします。

  • 勾配に疑問があります

    添付図を参照してください。 y=-243.88x+1E+07  となっています。 勾配を度数であらわすため DEGREES(ATAN(-243.88)) を用いました。 結果 -89.7651°となりましたが、どうみても そのような角度ではありません。 どこがおかしいのでしょうか。

  • 3D空間内の2つの図形の間の角度を求めるには?

    3D空間で、顔テクスチャーを貼り付けた、立方体Aと立方体Bを適当に配置したときに、立方体Aの方向を向くように立方体Bを回転させる方法について調べています。 2次元の場合は 回転角=Math.atan2(図形BのY座標-図形AのY座標,図形BのX座標-図形AのX座標)*180/Math.PI; のように、アークタンジェントを使えばよいのですが、3次元の場合はどのように考えればよいのでしょうか?

  • エクセル マクロで画像を指定したコマへ移動する

    よろしくお願いします。 マクロは触ったばかりです。 何度も検索をかけたのですがどうしても うまくヒットさせることが出来ず こちらで相談させて頂くことにしました。 画像を毎回決まった大きさにトリミングし その後 その画像の左端をセルB17に移動させたいのですが マクロの記録で行うと 右へどれくらい、左へどれくらいと 指定されてしまい必ず同じ場所へ移動してくれません。 「その画像の左端をセルB17に移動」 このコードを教えてください。 出来上がっているコードは Selection.ShapeRange.PictureFormat.CropBottom = 224.39 Selection.ShapeRange.PictureFormat.CropTop = 21.6 Selection.ShapeRange.PictureFormat.CropRight = 11.4 Selection.ShapeRange.PictureFormat.CropLeft = 9.6 Selection.ShapeRange.ScaleWidth 0.76, msoFalse, msoScaleFromBottomRight Selection.ShapeRange.ScaleHeight 0.76, msoFalse, msoScaleFromTopLeft End Sub ここまでです。 (右へどれくらい移動というのは 消しました。) よろしくお願いします。

専門家に質問してみよう