dポイントプレゼントキャンペーン実施中!

ラジアンの値が例えば、100000.555、-12000とかの場合、360度未満の値まで加算減算を繰り返していくのですが、VBAでFor Loopとか使わないで関数で出来る方法ありますか?

質問者からの補足コメント

  • 回答ありがとうございます。

    >ラジアンの値が例えば、100000.555、-12000とかの場合、
    この値の単位はラジアンでしょうか。それとも、度でしょうか。

    ラジアンです。

    方式2の方が誤差が少ないと思いましたが、どちらでも構いません。

    No.6の回答に寄せられた補足コメントです。 補足日時:2019/10/15 18:29

A 回答 (8件)

ラジアンなら



Sub Sample()

 Const π As Double = 3.14159265358979
 Dim x As Double
 
  x = 100000.555
  MsgBox (x - Int(x / π) * π)

End Sub

ですね

※ 小数点以下6桁までの精度位は十分得られていると思いますよ
    • good
    • 0

>VBAでFor Loopとか使わないで関数


あえてワークシートの関数を使うなら、こんな方法があります。

Sub Test1()
Dim r As Double
Dim Base As Double
Dim Sn As Integer
Dim t As Double
  r = 100000.555
  Base = 360
  Sn = Sgn(r) '負の値から負の“を取り出す。 マイナス/プラスを同じ計算にした場合。
  r = Abs(r)  '絶対値にする
 t = Sn * Evaluate("MOD(" & r & "," & Base & ")") '余計な空白は入らないようにする
End Sub

'//t は、浮動小数点誤差を含んでしまっていますから、いずれにしろ、合計値などを丸める必要があります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
試してみます。

お礼日時:2019/10/15 18:35

補足要求です。


>ラジアンの値が例えば、100000.555、-12000とかの場合、
この値の単位はラジアンでしょうか。それとも、度でしょうか。

方式1
入力値がxラジアンの時、0~π(パイ)ラジアンに直した値がほしい。

方式2
入力値がx度の時、0~360度に直した値がほしい。

上記のどちらを希望されていますか。
この回答への補足あり
    • good
    • 0

seiji91様へ



VBA を使う前提ですが
最初同じことを考えましたが「Mod 関数」は用意されていません。
演算子の「Mod」を使って「x Mod 360」ようにすると整数に丸められてしまいます。
それではワークシート関数を使い「WorksheetFunction.Mod(x, 360)」とも思いましたが実装されていないらしく「実行時エラー '438'」が出てしまいました。
    • good
    • 0

No.1 と No.2 の補足



いずれの場合も割り算を行うので誤差が生じる事があります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
誤差でますよね。小数点以下6桁までの精度が欲しいのですが、やっぱりbcかC使うしかないですか。

お礼日時:2019/10/15 18:32

mod 関数 使えません?


mod(a, b) は、a を b で割った余りを返すので、b=360とすれば・・・
関数定義は確認してみて下さい。
    • good
    • 0

No.1 の補足



0 ~ 359.9… を返したいならば「= x - Int(x / 360) * 360」です。
    • good
    • 0

元の角度が「x」に代入されているならば「= x - Fix(x / 360) * 360」では?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A