スプレッドシートで座標から方向角を求めたいとき、「どの関数を使えばいいんだろう?」と迷ったことはありませんか?
ATAN関数では-90度から90度の範囲しか扱えないので、左側や下側の座標に対応できないケースがありますよね。
そんなときに使うのがATAN2関数です。=ATAN2(x, y) とX座標・Y座標を渡すだけで、全方向(-180度から180度)の角度を正しく返してくれます。
この記事では基本の書き方から、DEGREES関数との組み合わせ、座標から方位角を求める活用例、ATAN関数との違いまで紹介します。
スプレッドシートのATAN2関数とは?
ATAN2関数(読み方: アークタンジェントツー)は、XY座標から角度(ラジアン)を求める関数です。「ATAN」は「Arc Tangent(アークタンジェント=逆正接)」の略で、末尾の「2」は引数が2つあることを意味します。
たとえば =DEGREES(ATAN2(1, 1)) と入力すると「45」が返ります。X座標1、Y座標1の方向が45度だとわかるわけですね。
ATAN関数は1つのタンジェント値から角度を求めますが、戻り値が-90度から90度に限られます。ATAN2関数なら-180度から180度の全方向に対応できるのが大きな違いです。
ATAN2関数にできることをまとめると、次のとおりです。
- XY座標から方向角(ラジアン)を返す
- -180度から180度まで、全象限の角度を正しく判定する
- DEGREES関数と組み合わせて度数法の角度に変換する
- 方位角の計算やグラフ上の方向計算に使える
NOTE
ATAN2関数はGoogleスプレッドシートの全バージョンで使えます。Excelにも同名の関数があり、引数の順番も同じです。
ATAN2関数の書き方(構文と引数)
基本構文
=ATAN2(x, y)
カッコの中にX座標、Y座標の順で指定します。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| x | 必須 | 角度を求めたい点のX座標 |
| y | 必須 | 角度を求めたい点のY座標 |
引数は2つとも必須です。セル参照や数値を直接指定できます。
WARNING
数学の教科書では atan2(y, x) とY座標が先に来るのが一般的です。Googleスプレッドシートでは ATAN2(x, y) とX座標が先 なので、引数の順番を間違えないように注意してください。
戻り値の範囲
ATAN2関数が返す値は -PI() から PI() まで(度数法で-180度から180度)です。
=ATAN2(1, 0) → 0(0度:右方向)
=ATAN2(0, 1) → 1.5707...(90度:上方向)
=ATAN2(-1, 0) → 3.1415...(180度:左方向)
=ATAN2(0, -1) → -1.5707...(-90度:下方向)
ATAN関数の戻り値が-90度から90度なのに対して、ATAN2関数は-180度から180度と倍の範囲をカバーしています。これが「全象限対応」と呼ばれる理由ですね。
ATAN2関数の基本的な使い方
各象限の角度を求める
ATAN2関数の強みは、XY平面上のどの方向でも正しい角度を返せることです。4つの象限それぞれで試してみましょう。
| X座標 | Y座標 | 数式 | 結果(ラジアン) | 角度 | 方向 |
|---|---|---|---|---|---|
| 1 | 1 | =ATAN2(1, 1) | 0.7853… | 45度 | 右上 |
| -1 | 1 | =ATAN2(-1, 1) | 2.3561… | 135度 | 左上 |
| -1 | -1 | =ATAN2(-1, -1) | -2.3561… | -135度 | 左下 |
| 1 | -1 | =ATAN2(1, -1) | -0.7853… | -45度 | 右下 |
同じ「1と1の組み合わせ」でも、符号が違えばきちんと異なる角度を返してくれます。ATAN関数では ATAN(1/1) も ATAN(-1/-1) も同じ結果になってしまうので、この違いは大きいですよ。
DEGREES関数と組み合わせて度数法で結果を得る
ATAN2関数の結果はラジアンです。度数法で角度を知りたい場合はDEGREES関数で変換しましょう。
=DEGREES(ATAN2(1, 1))
結果は「45」です。「X座標1、Y座標1の方向は45度」とそのまま読み取れますね。
よく使うパターンの早見表を用意しました。
| X座標 | Y座標 | 数式 | 角度(度) | 方向 |
|---|---|---|---|---|
| 1 | 0 | =DEGREES(ATAN2(1, 0)) | 0 | 右(東) |
| 1 | 1 | =DEGREES(ATAN2(1, 1)) | 45 | 右上(北東) |
| 0 | 1 | =DEGREES(ATAN2(0, 1)) | 90 | 上(北) |
| -1 | 1 | =DEGREES(ATAN2(-1, 1)) | 135 | 左上(北西) |
| -1 | 0 | =DEGREES(ATAN2(-1, 0)) | 180 | 左(西) |
| -1 | -1 | =DEGREES(ATAN2(-1, -1)) | -135 | 左下(南西) |
| 0 | -1 | =DEGREES(ATAN2(0, -1)) | -90 | 下(南) |
| 1 | -1 | =DEGREES(ATAN2(1, -1)) | -45 | 右下(南東) |
8方位すべてに正しい角度が返っています。方位を意識すると覚えやすいですね。
実務でのATAN2関数活用例
2点間の方向角を求める
地図や図面上で、A地点からB地点への方向角を計算する場面でATAN2関数が活躍します。
2点の座標差(dx, dy)をATAN2関数に渡せば方向角が求まります。
=DEGREES(ATAN2(B_x - A_x, B_y - A_y))
サンプルデータで計算してみましょう。A地点を(0, 0)として、各B地点への方向角を求めます。
| B地点のX座標(A列) | B地点のY座標(B列) | 数式 | 方向角 |
|---|---|---|---|
| 3 | 4 | =DEGREES(ATAN2(A2, B2)) | 53.13度 |
| -3 | 4 | =DEGREES(ATAN2(A3, B3)) | 126.87度 |
| -3 | -4 | =DEGREES(ATAN2(A4, B4)) | -126.87度 |
| 3 | -4 | =DEGREES(ATAN2(A5, B5)) | -53.13度 |
ATAN関数では(3, 4)と(-3, -4)がどちらも53.13度になってしまいます。ATAN2関数なら正反対の方向を正しく区別できていますね。
TIP
A地点が(0, 0)以外の場合も、座標の差(dx = B_x – A_x, dy = B_y – A_y)を渡すだけでOKです。
0度~360度の角度に変換する
ATAN2関数の戻り値は-180度から180度です。「0度から360度」の範囲で角度を扱いたい場合もありますよね。次の数式で変換できます。
=MOD(DEGREES(ATAN2(x, y)), 360)
MOD関数(余りを求める関数)で360の剰余を取ることで、負の角度を正の角度に変換しています。
| X座標 | Y座標 | そのままの角度 | MODで変換後 |
|---|---|---|---|
| 1 | -1 | -45度 | 315度 |
| -1 | -1 | -135度 | 225度 |
| 0 | -1 | -90度 | 270度 |
| 1 | 1 | 45度 | 45度 |
負の角度が0度以上に変換されていますね。方位角を「北を0度として時計回り」で表現したい場合などに便利ですよ。
グラフ上の方向計算に使う
散布図やチャートで各データ点の方向を計算したいとき、ATAN2関数が使えます。
たとえば中心点(50, 50)から各データ点への方向を求める場合は、次のように計算します。
=DEGREES(ATAN2(A2-50, B2-50))
| データ点X(A列) | データ点Y(B列) | 数式 | 方向角 |
|---|---|---|---|
| 80 | 80 | =DEGREES(ATAN2(A2-50, B2-50)) | 45度 |
| 20 | 80 | =DEGREES(ATAN2(A3-50, B3-50)) | 135度 |
| 20 | 20 | =DEGREES(ATAN2(A4-50, B4-50)) | -135度 |
| 80 | 20 | =DEGREES(ATAN2(A5-50, B5-50)) | -45度 |
中心から各データ点がどの方向にあるか、角度で把握できます。データの分布パターンを分析する場面で役立ちますよ。
よくあるエラーと対処法
ATAN2関数でよくあるトラブルをまとめます。
| 症状 | 原因 | 対処法 |
|---|---|---|
| #DIV/0! エラー | XとYの両方が0 | IF関数で(0, 0)を除外する |
| #VALUE! エラー | 引数に文字列を渡した | 数値またはセル参照を指定する |
| 結果がラジアンで読みにくい | DEGREES関数で変換していない | =DEGREES(ATAN2(x, y)) とする |
| 期待と違う角度が返る | 引数のXとYを逆に指定した | ATAN2(x, y) のxが第1引数か確認する |
両方が0のときの#DIV/0!エラー
ATAN2関数にx=0、y=0を渡すと#DIV/0!エラーになります。方向が定まらないので当然ですね。
=ATAN2(0, 0) → #DIV/0!
データにゼロ座標が含まれる可能性がある場合はIFERROR関数で対処しましょう。
=IFERROR(DEGREES(ATAN2(A2, B2)), "原点")
XとYの引数を逆に指定した
ATAN2関数で最も多いミスが、引数の順番間違いです。Googleスプレッドシートでは ATAN2(x, y) とX座標が先です。
=DEGREES(ATAN2(1, 0)) → 0度(右方向)
=DEGREES(ATAN2(0, 1)) → 90度(上方向)
XとYを入れ替えると結果が変わります。数学の教科書の atan2(y, x) とは順番が逆なので、プログラミング経験がある方はとくに注意してください。
ATAN関数との違い・使い分け
| 項目 | ATAN | ATAN2 |
|---|---|---|
| 構文 | =ATAN(値) | =ATAN2(x, y) |
| 引数 | タンジェント値1つ | X座標とY座標の2つ |
| 戻り値の範囲 | -PI()/2 ~ PI()/2(-90度~90度) | -PI() ~ PI()(-180度~180度) |
| 象限の判定 | できない(第1・第4象限のみ) | できる(全4象限に対応) |
| 主な用途 | 勾配から傾斜角を求める | 座標から方向角を求める |
使い分けの基準
ATAN関数とATAN2関数は、次のように使い分けます。
- ATAN関数を使う場面: 勾配率(高さ/水平距離)から傾斜角を求めるとき。方向は考えなくてよく、角度の大きさだけが知りたい場合
- ATAN2関数を使う場面: XY座標があり、方向角(どちらの方向か)を正確に知りたいとき。地図・図面・グラフなどで全方向の角度が必要な場合
迷ったらATAN2関数を使うのが安全です。ATAN2関数はATAN関数の上位互換で、全象限に対応しているので間違いが起きにくいですよ。
似た関数との違い
| 関数 | 動作 | 引数 | 用途 |
|---|---|---|---|
| ATAN2 | XY座標から角度を返す | X座標, Y座標 | 座標から方向角を求める(全象限対応) |
| ATAN | 逆正接(アークタンジェント)を返す | 任意の実数 | タンジェント値から角度を逆算 |
| TAN | 正接(タンジェント)を返す | 角度(ラジアン) | 角度からタンジェント値を求める |
| SIN | 正弦(サイン)を返す | 角度(ラジアン) | Y座標・波形データ |
| COS | 余弦(コサイン)を返す | 角度(ラジアン) | X座標・距離計算 |
| DEGREES | ラジアンを度数法に変換する | ラジアン値 | ATAN2/ATAN/ASIN/ACOSの結果変換 |
まとめ
ATAN2関数は、XY座標から角度(ラジアン)を求める関数です。
ポイントを整理します。
- 構文は
=ATAN2(x, y)で、X座標を第1引数に指定する - 結果はラジアンで返るので、度数法には
=DEGREES(ATAN2(x, y))と変換する - 戻り値の範囲は-180度から180度で、全象限の方向角を正しく判定できる
- ATAN関数は-90度から90度しか返せないので、方向角にはATAN2関数を使う
- x=0かつy=0のときは#DIV/0!エラーになるので、IFERROR関数で対処する
- 数学の atan2(y, x) とは引数の順番が逆(スプレッドシートではxが先)
まずは =DEGREES(ATAN2(1, 1)) で45が返ることを確認してみてください。
