VBA(Visual Basic for Applications)における組み込み関数 Atn
は、逆正接関数(アークタンジェント)を求めるための数学関数です。この関数は、三角関数の1つである「タンジェント(tan)」の逆関数に該当し、数値を渡すと、その値がタンジェントとなる角度(ラジアン)を返します。
■ 1. Atn関数とは?
Atn
関数は、「tan(θ) = x」を満たす角度 θ(ラジアン)を求めるための関数です。数学ではこれを「arctangent(アークタンジェント)」と呼び、VBAではこの機能を Atn(number)
として提供しています。
具体的には、ある数値 x
に対し、
Atn(x) = θ(ラジアン単位)
となるような角度 θ を返します。
■ 2. Atn関数の構文
Atn(number)
引数:
number
:任意の実数(Double
型)
戻り値:
number
がタンジェント値であるような角度(ラジアン単位)をDouble
型で返します。値の範囲は -π/2 ~ π/2(約 -1.5708 ~ 1.5708 ラジアン)。
■ 3. ラジアンと度数の関係
VBA の三角関数は ラジアン単位を使用します。度数を使いたい場合は、以下の変換が必要です:
ラジアン → 度
度 = ラジアン × 180 / π
度 → ラジアン
ラジアン = 度 × π / 180
Const PI As Double = 3.14159265358979
Dim rad As Double
Dim deg As Double
rad = Atn(1) ' → 約0.7854(= π/4)
deg = rad * 180 / PI ' → 45度
■ 4. Atn関数の基本例
Const PI As Double = 3.14159265358979
Debug.Print Atn(1) ' ≒ 0.7854(π/4ラジアン、45度)
Debug.Print Atn(0) ' = 0
Debug.Print Atn(-1) ' ≒ -0.7854(-45度)
Debug.Print Atn(1000) * 180 / PI ' ≒ 89.94度(tan(θ) ≒ 無限大)
■ 5. 応用例
● 直角三角形から角度を求める
直角三角形で、隣辺が 4、対辺が 3 の場合、角度 θ は:
θ = Atn(対辺 / 隣辺)
Dim angle As Double
Const PI As Double = 3.14159265358979
angle = Atn(3 / 4)
Debug.Print "角度(度):" & angle * 180 / PI ' ≒ 36.87度
● ベクトルの角度を求める(2Dグラフィックス)
2次元座標において、X軸とベクトルとのなす角度を求めるには、通常 Atn(y / x)
を使用します。ただし、x
が負の場合は象限が異なるため注意が必要です。
この場合、VBAには Atn2(y, x)
のような関数がないため、自分で象限を考慮して処理します:
Function GetAngleDegrees(x As Double, y As Double) As Double
Const PI As Double = 3.14159265358979
Dim angle As Double
If x = 0 Then
If y > 0 Then
angle = PI / 2
ElseIf y < 0 Then
angle = -PI / 2
Else
angle = 0 ' x=0, y=0 の場合は0とする
End If
Else
angle = Atn(y / x)
If x < 0 Then angle = angle + PI
End If
GetAngleDegrees = angle * 180 / PI
End Function
' 使用例
Debug.Print GetAngleDegrees(1, 1) ' 45度
Debug.Print GetAngleDegrees(-1, 1) ' 135度
Debug.Print GetAngleDegrees(-1, -1) ' -135度
Debug.Print GetAngleDegrees(1, -1) ' -45度
■ 6. 単振動や物理モデルでの利用
逆三角関数は、物理モデルの逆計算にもよく使われます。たとえば、斜面上の角度から物体の加速度などを逆算する際などです。
Dim slopeAngle As Double
Dim height As Double: height = 3
Dim base As Double: base = 4
slopeAngle = Atn(height / base)
MsgBox "斜面の角度は約 " & slopeAngle * 180 / 3.14159265358979 & " 度です。"
■ 7. 関連関数
関数 | 説明 |
---|---|
Sin(number) | 正弦(sine)関数 |
Cos(number) | 余弦(cosine)関数 |
Tan(number) | 正接(tangent)関数 |
Atn(number) | 逆正接(arctangent)関数 |
Sqr(number) | 平方根 |
Abs(number) | 絶対値 |
Round(number, digits) | 四捨五入 |
■ 8. 注意点
● 単位の違い
Atn
の戻り値はラジアンです。角度(度)に変換しないと、誤解を招きやすいため注意が必要です。
' 誤解しやすい例
MsgBox Atn(1) ' 出力: 0.7854 ←ラジアン
' 正しい角度表示
MsgBox Atn(1) * 180 / 3.14159265358979 ' 出力: 45度
● Atn2が無い(象限の処理が必要)
他の言語にある Atan2(y, x)
関数が VBA には存在しないため、手動で処理する必要があります。
■ 9. まとめ
VBA の Atn
関数は、逆タンジェント(arctangent)を求めるための関数であり、入力された数値 x
に対して tan(θ) = x
を満たす角度 θ
をラジアン単位で返します。
特に、三角関数の逆計算、ベクトルの角度計算、直角三角形の角度計算、グラフィックにおける方向判定などに有用です。
✅ 要点まとめ
Atn(number)
はtan(θ) = number
のときの θ(ラジアン)を返す- 結果は ラジアン単位(度に変換するには
× 180 / π
) - 象限を考慮するには自前で処理が必要
- ベクトル角度の算出、グラフィック描画、物理計算などで利用
Sin
、Cos
、Tan
と合わせて使用することで応用範囲が広がる