Excelで三角関数を使った計算を行っていると、思い通りの結果が得られず困惑することがあります。
関数電卓では正しく計算できていたはずなのに、Excelで「=SIN(30)」と入力すると「-0.988」という意味不明な値が返ってくる、「=COS(90)」が0にならず「6.12574E-17」という微小な値になる、角度を入力しているのに計算結果が全く合わないといった問題に直面します。
特に建築や測量、物理計算など、三角関数を日常的に使う業務では、これらの問題が作業効率を大きく低下させます。手作業で計算し直したり、関数電卓との結果の違いに戸惑ったりすることも少なくありません。
実はこれらの問題には、Excelの三角関数が「ラジアン」という単位で動作することや、コンピュータの計算精度による誤差が関係しています。原因を理解せずに使用を続けると、同じ問題が繰り返し発生してしまいます。
本記事では、Excelの三角関数で発生する「おかしい」現象の原因と、それぞれの具体的な対処法を詳しく解説します。
SIN・COS・TAN関数を正しく使いこなしたい方は、ぜひ最後までお読みください。
ポイントは
・Excelの三角関数はラジアン単位なのでRADIANS関数で度をラジアンに変換
・cos90°などが0にならないのは浮動小数点誤差で実用上は問題なし
・逆三角関数で#NUM!エラーが出るのは範囲外の値を指定しているため
です。
それでは詳しく見ていきましょう。
Excelの三角関数はラジアン単位で計算される
それではまず、最も基本的で重要な「Excelの三角関数が角度をどう認識しているか」について確認していきます。
度とラジアンの違いを理解する
Excelで三角関数の計算結果がおかしくなる最大の原因は、Excelの三角関数が「度(°)」ではなく「ラジアン(rad)」という単位で角度を処理することです。
度は日常生活で最もよく使われる角度の単位で、円を360等分した一つが1度です。小学校の算数から使っている馴染み深い単位で、直角は90度、半回転は180度、一回転は360度と表現します。
一方、ラジアンは数学的により厳密な角度の単位です。円の中心から円周に伸びる半径の長さと、円周上の弧の長さが等しくなるときの中心角が1ラジアンと定義されます。
円の半径をrとすると、円周の長さは2πrなので、一周は2πラジアンとなります。つまり360度=2πラジアン、180度=πラジアン、90度=π/2ラジアンという関係です。
Excelで「=SIN(30)」と入力すると、30度ではなく30ラジアン(約1718.87度)として計算されるため、全く異なる結果が返ってきます。
| 度(°) | ラジアン(rad) | 計算式 |
|---|---|---|
| 0° | 0 | 0 |
| 30° | π/6 | 約0.524 |
| 45° | π/4 | 約0.785 |
| 60° | π/3 | 約1.047 |
| 90° | π/2 | 約1.571 |
| 180° | π | 約3.142 |
| 360° | 2π | 約6.283 |
なぜExcelはラジアンを使うのか
Excelがラジアンを採用している理由は、数学や工学の分野でラジアンが標準的な角度単位として使われているからです。
微分積分や物理の運動方程式など、高度な数学計算ではラジアンを使うことで式が簡潔になり、計算効率も向上します。コンピュータの内部計算でもラジアンが基本となっています。
関数電卓にも「DEG(度)」「RAD(ラジアン)」「GRAD(グラード)」というモード切替があり、多くの科学技術計算ソフトウェアはラジアンを標準としています。
Excelも同様の思想で設計されているため、SIN関数、COS関数、TAN関数の引数にはラジアン単位の角度を指定する必要があります。この仕様を理解せずに度の値を直接入力すると、計算結果が全く合わなくなります。
度をラジアンに変換する方法
続いて、実際にExcelで三角関数を使う際の正しい手順を確認していきます。
RADIANS関数で度をラジアンに変換
度で表された角度をExcelの三角関数で使用するには、RADIANS関数を使って度をラジアンに変換します。
RADIANS関数の構文は「=RADIANS(角度)」で、引数には度単位の角度を指定します。例えば、30度をラジアンに変換したい場合は「=RADIANS(30)」と入力すると、約0.524という値が返ってきます。
これをSIN関数と組み合わせると、「=SIN(RADIANS(30))」という数式になります。この数式は「30度のサインを求める」という意味になり、正しく0.5という結果が得られます。
同様に、cos60°を求めたい場合は「=COS(RADIANS(60))」、tan45°を求めたい場合は「=TAN(RADIANS(45))」と入力します。
| 求めたい値 | 誤った数式 | 正しい数式 | 結果 |
|---|---|---|---|
| sin30° | =SIN(30) | =SIN(RADIANS(30)) | 0.5 |
| cos60° | =COS(60) | =COS(RADIANS(60)) | 0.5 |
| tan45° | =TAN(45) | =TAN(RADIANS(45)) | 1 |
| sin90° | =SIN(90) | =SIN(RADIANS(90)) | 1 |
PI関数を使った直接的なラジアン指定
角度が30度、45度、60度、90度といった特殊な値の場合、PI関数を使ってラジアンを直接指定する方法もあります。
PI関数は円周率π(約3.14159)を返す関数で、引数は不要です。「=PI()」と入力するだけで円周率が得られます。
90度はπ/2ラジアンなので、sin90°は「=SIN(PI()/2)」と表現できます。60度はπ/3ラジアンなので、cos60°は「=COS(PI()/3)」となります。
この方法は、特定の角度を頻繁に使用する場合や、数式の意味を数学的に明確にしたい場合に便利です。ただし、任意の角度(例えば37度)を計算したい場合は、RADIANS関数を使う方が簡単です。
| 角度 | RADIANS関数を使用 | PI関数を使用 | 結果 |
|---|---|---|---|
| 30° | =SIN(RADIANS(30)) | =SIN(PI()/6) | 0.5 |
| 45° | =COS(RADIANS(45)) | =COS(PI()/4) | 約0.707 |
| 60° | =TAN(RADIANS(60)) | =TAN(PI()/3) | 約1.732 |
| 180° | =SIN(RADIANS(180)) | =SIN(PI()) | 0(微小誤差あり) |
ラジアンを度に戻すDEGREES関数
逆に、ラジアン単位の角度を度に変換したい場合は、DEGREES関数を使用します。
DEGREES関数の構文は「=DEGREES(角度)」で、引数にはラジアン単位の角度を指定します。例えば、πラジアンを度に変換したい場合は「=DEGREES(PI())」と入力すると、180という結果が得られます。
この関数は、逆三角関数(ASIN、ACOS、ATAN)の結果を度で表示したい場合に特に有効です。逆三角関数はラジアン単位で角度を返すため、度で確認したい場合はDEGREES関数で変換します。
例えば、サインの値が0.5になる角度を度で求めたい場合は「=DEGREES(ASIN(0.5))」と入力すると、30という結果が得られます。
| 求めたい値 | 数式 | ラジアンでの結果 | 度での結果 |
|---|---|---|---|
| sin⁻¹(0.5) | =ASIN(0.5) | 約0.524 | 30° |
| sin⁻¹(0.5)を度で | =DEGREES(ASIN(0.5)) | – | 30 |
| cos⁻¹(0.5) | =ACOS(0.5) | 約1.047 | 60° |
| cos⁻¹(0.5)を度で | =DEGREES(ACOS(0.5)) | – | 60 |
RADIANS関数とDEGREES関数を使い分けることで、度とラジアンを自由に変換できます。
普段の業務で度を使っている場合でも、Excelの三角関数にはRADIANS関数で変換してから渡すという手順を習慣化すれば、計算ミスを防げます。
セルに角度を度で入力し、別のセルでRADIANS関数を使ってラジアンに変換し、さらに別のセルで三角関数を計算するという段階的な方法も、数式の見通しが良くなり推奨されます。
特に大量の角度データを処理する場合は、角度入力列、ラジアン変換列、計算結果列というように分けて作業すると、どこで間違えたかの確認も容易になります。
cos90°やsin180°が0にならない問題
続いて、正しくRADIANS関数を使っているのに結果がおかしい場合の対処法を確認していきます。
浮動小数点誤差とは何か
RADIANS関数を使って「=COS(RADIANS(90))」と正しく入力しても、結果が0ではなく「6.12574E-17」のような極めて小さい値が表示されることがあります。
これは浮動小数点演算誤差、特に打切り誤差と呼ばれる現象です。コンピュータは無限に続く小数を有限の桁数で扱うため、わずかな誤差が生じます。
Excelで扱える有効桁数は15桁までです。三角関数の計算には円周率π(3.14159265358979…)が使われますが、πは無限に続く無理数なので、15桁で打ち切られた値を使って計算します。
このわずかな誤差が積み重なって、本来0になるべき計算結果が「6.12574E-17」(0.0000000000000000612574)という微小な値になってしまいます。
同様に「1.22515E-16」なども浮動小数点誤差による微小な値です。
どの角度で誤差が発生するか
浮動小数点誤差が顕著に現れるのは、本来の計算結果が0になるべき角度です。
cos90°、cos270°、sin0°、sin180°、sin360°、tan0°、tan180°など、理論的には0になるべき計算で微小な値が返ってきます。
逆に、sin30°=0.5、cos60°=0.5、tan45°=1といった、結果が0以外の明確な値になる計算では、誤差はほとんど問題になりません。
「=SIN(PI())」と入力した場合、sin180°なので本来は0ですが、実際には「1.22515E-16」という微小な値が返ってきます。「=COS(PI()/2)」も同様に、cos90°=0のはずが微小な値になります。
| 数式 | 理論値 | Excel実際の結果 | 誤差の有無 |
|---|---|---|---|
| =SIN(RADIANS(0)) | 0 | 0 | 誤差なし |
| =SIN(RADIANS(30)) | 0.5 | 0.5 | 誤差なし |
| =SIN(RADIANS(90)) | 1 | 1 | 誤差なし |
| =SIN(RADIANS(180)) | 0 | 約1.22515E-16 | 微小誤差あり |
| =COS(RADIANS(90)) | 0 | 約6.12574E-17 | 微小誤差あり |
| =COS(RADIANS(270)) | 0 | 約-1.83697E-16 | 微小誤差あり |
実用上の対処法
浮動小数点誤差による微小な値は、実用上はほぼ0として扱って問題ありません。
「6.12574E-17」という値は、実際の計算や判定に影響を与えるほど大きくありません。建築や測量の計算でミリ単位の精度が必要な場合でも、この誤差は無視できるレベルです。
ただし、IF関数などで「=0」という完全一致の判定を行う場合は問題が生じます。「=IF(COS(RADIANS(90))=0,”OK”,”NG”)」という数式では、微小な誤差により「NG」と判定されてしまいます。
この場合は、ROUND関数で小数点以下を丸めるか、許容誤差を設けた判定に変更します。「=IF(ABS(COS(RADIANS(90)))<0.0001,”OK”,”NG”)」とすれば、絶対値が0.0001未満なら「OK」と判定されます。
または、計算結果をROUND関数で丸めてから判定する方法もあります。「=ROUND(COS(RADIANS(90)),10)」とすれば、小数点以下10桁で丸められて0になります。
| 対処方法 | 数式例 | 効果 |
|---|---|---|
| ROUND関数で丸める | =ROUND(COS(RADIANS(90)),10) | 0になる |
| 許容誤差での判定 | =IF(ABS(値)<0.0001,”0とみなす”,”0ではない”) | 微小誤差を許容して判定 |
| 表示桁数を減らす | セルの書式設定で小数点以下の桁数を制限 | 見た目は0になる(実際の値は変わらず) |
浮動小数点誤差は、Excelだけでなくあらゆるコンピュータで発生する普遍的な現象です。
関数電卓でも内部的には同様の誤差が生じていますが、表示桁数の設定により見えなくなっているだけです。
重要なのは、この誤差が計算精度に実質的な影響を与えないレベルであることを理解し、必要に応じてROUND関数や許容誤差を用いた適切な処理を行うことです。
特に、IF関数での完全一致判定や、VBAでのループ処理での判定では、浮動小数点誤差を考慮した条件設定が必要になります。
逆三角関数でエラーが発生する場合
最後に、逆三角関数を使用する際のエラーと対処法を確認していきます。
#NUM!エラーが出る原因
ASIN関数やACOS関数を使用した際に、「#NUM!」エラーが表示されることがあります。
このエラーは、関数の引数が許容範囲外の値を指定した場合に発生します。ASIN関数とACOS関数は、-1から1の範囲の値しか受け付けません。
例えば、「=ASIN(1.2)」と入力すると#NUM!エラーになります。サインの値は-1から1の範囲にしか存在しないため、1.2という値に対応する角度は数学的に存在しません。
計算式の中でASIN関数を使っている場合、他の計算結果が1を超えたり-1未満になったりすることで、このエラーが発生します。「=ASIN(1.2*SIN(RADIANS(A1)))」という数式では、1.2*SINの部分が1を超える可能性があります。
ATAN関数にはこの制限がなく、任意の値を指定できます。
#NUM!エラーの対処法
#NUM!エラーを回避するには、IF関数で引数の値を事前にチェックする方法が有効です。
例えば、「=IF(ABS(値)<=1,ASIN(値),”範囲外”)」とすれば、値の絶対値が1以下の場合のみASIN関数を実行し、それ以外は「範囲外」と表示します。
または、MIN関数とMAX関数を組み合わせて、値を強制的に-1から1の範囲に収める方法もあります。「=ASIN(MAX(-1,MIN(1,値)))」とすれば、値が1を超えていても1として、-1未満でも-1として処理されます。
ただし、後者の方法は数学的に正しくない値を使うことになるため、計算の目的によっては適切でない場合があります。エラーの原因となっている元の計算式を見直すことも重要です。
| 数式 | 結果 | 説明 |
|---|---|---|
| =ASIN(0.5) | 約0.524(ラジアン) | 正常な計算 |
| =ASIN(1.5) | #NUM! | 範囲外エラー |
| =IF(ABS(1.5)<=1,ASIN(1.5),”範囲外”) | 範囲外 | エラー回避 |
| =ASIN(MAX(-1,MIN(1,1.5))) | 約1.571(π/2) | 1に丸めて計算 |
度分秒形式の角度を変換する方法
測量などで使用される度分秒形式(例:105度15分03秒)をExcelで扱う場合、まず度の小数形式に変換してからRADIANS関数を使用します。
度分秒を度の小数に変換する数式は「=度+分/60+秒/3600」です。105度15分03秒の場合、「=105+15/60+3/3600」で約105.2508度となります。
これをラジアンに変換してSIN関数に渡せば、正しい計算ができます。「=SIN(RADIANS(105+15/60+3/3600))」という形式になります。
関数電卓とExcelで結果が異なる場合の多くは、この度分秒の変換が正しく行われていないか、ラジアン変換を忘れていることが原因です。
| 度分秒表記 | 度の小数形式 | 計算式 |
|---|---|---|
| 30°30’00” | 30.5度 | =30+30/60+0/3600 |
| 45°15’30” | 約45.258度 | =45+15/60+30/3600 |
| 105°15’03” | 約105.251度 | =105+15/60+3/3600 |
三角関数を使った計算でトラブルが発生した場合は、まず角度の単位(度かラジアンか)を確認することが最も重要です。
次に、計算結果が理論値と微妙に異なる場合は浮動小数点誤差の可能性を考え、エラーが発生する場合は引数の範囲を確認します。
段階的に数式を分解して、どの部分で問題が発生しているかを特定することで、効率的にトラブルシューティングができます。
特に複雑な三角関数の計算では、中間結果を別のセルに表示させながら確認する方法が、問題の早期発見に役立ちます。
まとめ エクセルの三角関数がおかしい時の対処法
エクセルで三角関数がおかしい時の対処法をまとめると
・角度が合わない・計算結果が違う場合:Excelの三角関数はラジアン単位なので、度で入力する場合は「=SIN(RADIANS(30))」のようにRADIANS関数で変換、πを使う場合は「=SIN(PI()/6)」と指定
・cos90°やsin180°が0にならない場合:浮動小数点誤差(打切り誤差)で「6.12574E-17」のような微小な値が表示されるが実用上は問題なし、IF関数での判定にはROUND関数や許容誤差を使用
・逆三角関数で#NUM!エラーが出る場合:ASIN・ACOS関数の引数は-1≦値≦1の範囲が必要、範囲外の値を指定するとエラー、IF関数で事前チェックするか値を制限
・度分秒を扱う場合:「=度+分/60+秒/3600」で度の小数形式に変換してからRADIANS関数を使用
これらの問題は、Excelの三角関数がラジアン単位で動作することと、コンピュータの計算精度の限界によって発生します。
原因を正しく理解すれば、適切な対処法を選択できます。
特にRADIANS関数の使用は三角関数計算の基本なので、度で角度を扱う場合は必ずRADIANS関数で変換することを習慣化しましょう。
浮動小数点誤差については、実用上問題ないレベルの誤差であることを理解し、必要に応じてROUND関数で処理することで、正確な計算と判定が可能になります。
Excelの三角関数を正しく使いこなして、効率的な計算作業を実現していきましょう!