0
0

[Excel VBA] 三角関数を計算する (Cot/Sec/Csc 他)

Last updated at Posted at 2024-08-23

ざっくり説明

コタンジェント、セカント、コセカントが求められます。
また、三角関数6種類の引数が度数法バージョンも作りました

一部が力技です。見ればわかるけれど。

コード

まず大前提として、
Sin()、Cos()、Tan() はVBA関数に存在するので作る必要は無いです。

三角関数を求める (度数法)
Function Cot(ByVal number As Double) As Double
'================================
'用途  :コタンジェントを求める (弧度法)
'--------------------------------
'第一引数:角度-ラジアン (Double型)
'戻り値 :最下行 行番号 (Double型)
'================================
    Dim tanValue As Double
    tanValue = Tan(number)

    If tanValue = 0 Then tanValue = 0.000000000000001
    Cot = 1 / tanValue
End Function

Function Sec(ByVal number As Double) As Double
'================================
'用途  :セカントを求める (弧度法)
'--------------------------------
'第一引数:角度-ラジアン (Double型)
'戻り値 :最下行 行番号 (Double型)
'================================
    Dim cosValue As Double
    cosValue = Cos(number)

    If cosValue = 0 Then cosValue = 0.000000000000001
    Sec = 1 / cosValue
End Function

Function Csc(ByVal number As Double) As Double
'================================
'用途  :コセカントを求める (弧度法)
'--------------------------------
'第一引数:角度-ラジアン (Double型)
'戻り値 :最下行 行番号 (Double型)
'================================
    Dim sinValue As Double
    sinValue = Sin(number)

    If sinValue = 0 Then sinValue = 0.000000000000001
    Csc = 1 / sinValue
End Function
三角関数を求める (度数法)
Function SinDegree(ByVal number As Double) As Double
'================================
'用途  :サインを求める (度数法)
'--------------------------------
'第一引数:角度-度 (Double型)
'戻り値 :最下行 行番号 (Double型)
'================================
    Dim radianValue As Double
    radianValue = number * Atn(1) * 4 / 180

    SinDegree = Sin(radianValue)
End Function

Function CosDegree(ByVal number As Double) As Double
'================================
'用途  :コサインを求める (度数法)
'--------------------------------
'第一引数:角度-度 (Double型)
'戻り値 :最下行 行番号 (Double型)
'================================
    Dim radianValue As Double
    radianValue = number * Atn(1) * 4 / 180

    CosDegree = Cos(radianValue)
End Function

Function TanDegree(ByVal number As Double) As Double
'================================
'用途  :タンジェントを求める (度数法)
'--------------------------------
'第一引数:角度-度 (Double型)
'戻り値 :最下行 行番号 (Double型)
'================================
    Dim radianValue As Double
    radianValue = number * Atn(1) * 4 / 180

    TanDegree = Tan(radianValue)
End Function

Function CotDegree(ByVal number As Double) As Double
'================================
'用途  :コタンジェントを求める (度数法)
'--------------------------------
'第一引数:角度-度 (Double型)
'戻り値 :最下行 行番号 (Double型)
'================================
    Dim radianValue As Double
    radianValue = number * Atn(1) * 4 / 180

    Dim tanValue As Double
    tanValue = Tan(radianValue)

    If tanValue = 0 Then tanValue = 0.000000000000001
    CotDegree = 1 / tanValue
End Function

Function SecDegree(ByVal number As Double) As Double
'================================
'用途  :セカントを求める (度数法)
'--------------------------------
'第一引数:角度-度 (Double型)
'戻り値 :最下行 行番号 (Double型)
'================================
    Dim radianValue As Double
    radianValue = number * Atn(1) * 4 / 180

    Dim cosValue As Double
    cosValue = Cos(radianValue)

    If cosValue = 0 Then cosValue = 0.000000000000001
    SecDegree = 1 / cosValue
End Function

Function CscDegree(ByVal number As Double) As Double
'================================
'用途  :コセカントを求める (度数法)
'--------------------------------
'第一引数:角度-度 (Double型)
'戻り値 :最下行 行番号 (Double型)
'================================
    Dim radianValue As Double
    radianValue = number * Atn(1) * 4 / 180

    Dim sinValue As Double
    sinValue = Sin(radianValue)

    If sinValue = 0 Then sinValue = 0.000000000000001
    CscDegree = 1 / sinValue
End Function

使用方法

Cot()Sec()Csc()
第一引数に角度(ラジアン:rad)を渡します

SinDegree()CosDegree()TanDegree()CotDegree()SecDegree()CscDegree()
第一引数に角度(度:°)を渡します

仕様等

  • 普段の関数名の命名からするとFindCotValueとかにしたいところですが、
    既に存在するSin関数などと合わせました。
  • Double型で返ってきます

Sin(0°)、Cos(90°)、Tan(0°)あたりをそのまま用いて
Cot()、Sec()、Csc()を求めるとゼロ除算となってしまうので
力技で回避するようにしています。

注意点

コセカントをCosecと書く派閥の方は各自で修正願います。

その他

どこで使うねん

使ってくれた方、どう使ったか気になるので用途をコメントして欲しいです笑


小話
関数内でπを求めるのにAtn(1) * 4を使っている点から察することができるように、
VBAにPI()という関数はありません。

ワークシート関数にはPi()があるのでそれを使うこともできるのですが、
実はWorksheetFunction.Pi()は3.14159265358979という15桁の定数を
渡しているだけなので、計算が甘くなります。

なのでアークタンジェントから算出するのが一番いいと判断し、用いました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0