「スプレッドシートで複素数の角度を求めたいけど、ATAN2関数で実部と虚部を取り出して計算するのは手間がかかる…」
スプレッドシートで交流回路や信号処理を扱っていると、複素数(a+biの形で表される数)の偏角(位相角)を求めたい場面がありますよね。実部と虚部を取り出してATAN2関数で組み立てるのは可能ですが、毎回そうやって計算するのは面倒です。
そんなときに頼りになるのがGoogleスプレッドシートのIMARGUMENT関数です。複素数を渡すだけで偏角をラジアン単位で一発で計算してくれるので、位相解析やインピーダンスの角度計算が一気に軽くなりますよ。
ExcelのIMARGUMENT関数と完全互換なので、Excelファイルとやり取りする現場でも安心です。COMPLEX関数で作った複素数や、IMSUM・IMPRODUCTの演算結果からも偏角をそのまま取り出せますね。
この記事では、スプレッドシートのIMARGUMENT関数の基本構文と実務での活用例を解説します。IMABS関数との使い分けや、ラジアンから度への変換、よくあるエラーと対処法もしっかり紹介していきますよ。
スプレッドシートのIMARGUMENT関数とは?
GoogleスプレッドシートのIMARGUMENT関数(イマジナリー・アーギュメント関数)は、複素数の偏角(角度)をラジアン単位で返す関数です。エンジニアリング関数(電気・物理・工学系の計算で使う関数群)のひとつに分類されますよ。
読み方は「イマジナリー・アーギュメント」または「アイエム・アーギュメント」で、英語の「imaginary number(虚数)」の「argument(偏角)」に由来します。複素数「a+bi」を複素平面上の点(a, b)とみなしたときの、原点から見た角度θ(シータ)を返してくれるのが役割ですね。
そもそも複素数の偏角とは、複素平面で実軸(横軸)から測った角度のことです。点(a, b)に向かうベクトルが、実軸の正方向となす角度ですね。数式では θ = atan2(b, a) で計算され、戻り値の範囲は -π から π(およそ -3.14 から +3.14)になります。
| 複素数 | 複素平面上の点 | 偏角(ラジアン) | 偏角(度) |
|---|---|---|---|
| 1+0i(実軸正) | (1, 0) | 0 | 0° |
| 1+1i | (1, 1) | π/4 ≒ 0.7854 | 45° |
| 0+1i(虚軸正) | (0, 1) | π/2 ≒ 1.5708 | 90° |
| -1+0i(実軸負) | (-1, 0) | π ≒ 3.1416 | 180° |
| 0-1i(虚軸負) | (0, -1) | -π/2 ≒ -1.5708 | -90° |
| 3+4i | (3, 4) | 約0.9273 | 約53.13° |
IMARGUMENT関数を使えば、この表の右側にある「偏角」をサクッと取り出せます。Excelとの互換性も完璧で、Excel 2007以降のすべてのバージョンに対応していますよ。
IMARGUMENT関数の書き方(構文と引数)
基本構文
=IMARGUMENT(複素数)
引数は1つだけのシンプルな関数です。
引数の詳細
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 複素数(inumber) | 必須 | 偏角を求めたい複素数。文字列またはセル参照で指定する |
引数には「”3+4i”」や「”3+4j”」のような複素数文字列を直接渡せます。COMPLEX関数(実数と虚数から複素数を作成する関数)の結果や、複素数が入ったセルの参照も指定できますよ。
虚数単位は小文字の「i」または「j」のどちらでも受け付けます。数学では「i」、電気工学では「j」が使われる慣習ですね。IMARGUMENT関数はどちらでも同じように動作してくれます。
TIP
戻り値はラジアン単位です。度(°)で表示したいときはDEGREES関数(ラジアンを度に変換する関数)で包む必要がありますよ。たとえば
=DEGREES(IMARGUMENT("1+1i"))の結果は45になりますね。
IMARGUMENT関数の基本的な使い方
文字列で複素数を直接指定する
複素数文字列をそのまま引数に渡してみましょう。
=IMARGUMENT("3+4i")
結果は「0.9272952…」になります。これは約0.9273ラジアン、度に直すと約53.13°ですね。複素平面上で点(3, 4)に向かうベクトルが、実軸正方向となす角度です。
実軸上の正の値(虚部が0で実部が正)を渡すと、結果は0になります。
=IMARGUMENT("5")
=IMARGUMENT("5+0i")
どちらも結果は「0」です。実軸正方向そのものなので、偏角は0ラジアンですね。
セル参照で複素数を指定する
実務ではセルに入った複素数を扱う場面が多いですよね。A2に「1+1i」が入っている場合は次のように書きます。
=IMARGUMENT(A2)
結果は「0.7853981…」になります。π/4 ラジアン、度に直すと45°ですね。セル参照を渡すだけで、入っている複素数の偏角を取り出せますよ。
COMPLEX関数と組み合わせる
COMPLEX関数で作った複素数の偏角を、その場で取り出すこともできます。
=IMARGUMENT(COMPLEX(0, 1))
結果は「1.5707963…」、つまりπ/2 ラジアン(90°)です。COMPLEX(0, 1)は内部で「i」(純虚数)を作り、IMARGUMENT関数がその偏角を返してくれますね。
複素数の作成と角度計算を一気にやりたいときに便利な書き方ですよ。
ラジアンを度に変換する
戻り値はラジアンなので、度(°)で扱いたいときはDEGREES関数で変換します。
=DEGREES(IMARGUMENT("3+4i"))
結果は「53.1301…」、つまり約53.13°ですね。逆に度をラジアンに戻したいときはRADIANS関数を使います。日本のオフィスで偏角を扱う場合、最終的に度で表示したいケースが多いので、DEGREES関数とのセット使いが定番ですよ。
各象限での偏角の扱い
複素平面の象限ごとに、IMARGUMENT関数が返す値の符号と範囲を整理しておきましょう。
| 象限 | 例 | 偏角(ラジアン) | 偏角(度) |
|---|---|---|---|
| 第1象限(a>0, b>0) | 1+1i | 0 〜 π/2 | 0° 〜 90° |
| 第2象限(a<0, b>0) | -1+1i | π/2 〜 π | 90° 〜 180° |
| 第3象限(a<0, b<0) | -1-1i | -π 〜 -π/2 | -180° 〜 -90° |
| 第4象限(a>0, b<0) | 1-1i | -π/2 〜 0 | -90° 〜 0° |
正の角度は反時計回り、負の角度は時計回りですね。第3象限と第4象限ではマイナスの値が返るので、0〜360°の範囲で扱いたいときは後述のテクニックで補正してくださいね。
ARRAYFORMULAで複数行を一括処理する
複素数のリストから一気に偏角の列を作りたい場面もありますよね。そんなときはARRAYFORMULA関数(数式を範囲全体に展開する関数)と組み合わせます。
=ARRAYFORMULA(IMARGUMENT(A2:A10))
A列に並んだ複素数から、対応する偏角をB列に一発で展開できますよ。位相角の一覧表を作るときに重宝しますね。
IMARGUMENT関数の実務活用例
活用例1: 交流回路の位相角分析
交流回路のインピーダンス(電流の流れにくさ)は「Z = R + jX」という複素数で表されます。RとXの組み合わせから、電圧と電流の位相差が決まりますね。
セルA2にインピーダンス「50+30j」が入っているとしましょう。
=IMARGUMENT(A2)
結果は「0.5404…」、つまり約0.5404ラジアン(約30.96°)です。これが回路の位相角で、電流が電圧より遅れている角度ですね。
度で表示したいときはDEGREES関数を被せます。
=DEGREES(IMARGUMENT(A2))
結果は「30.9637…」になります。約31°の位相遅れがあることが直感的にわかりますね。誘導性負荷(コイル)の影響度を可視化したいときの定番パターンです。
IMABS関数でインピーダンスの大きさを、IMARGUMENT関数で位相角を求めれば、極形式(大きさ × 角度)で回路特性を一気に把握できますよ。
活用例2: 信号処理でのフーリエ位相スペクトル
信号処理のフーリエ変換(信号を周波数成分に分解する手法)では、変換結果が複素数で出力されます。各周波数成分の「振幅」と「位相」がそれぞれ |X| と arg(X) で取り出せますね。
A列にフーリエ変換結果の複素数が並んでいるとします。
B2: =IMABS(A2) ← 振幅スペクトル
C2: =IMARGUMENT(A2) ← 位相スペクトル(ラジアン)
D2: =DEGREES(C2) ← 位相スペクトル(度)
振幅と位相を同時に得ることで、信号の周波数特性を立体的に分析できますよ。数値計算ソフトで出した複素スペクトルをスプレッドシートに貼り付けて、位相プロットを作るときの定番パターンですね。
活用例3: 0〜360°の範囲に補正する
IMARGUMENT関数は -π 〜 π(-180° 〜 180°)の範囲を返しますが、業務によっては 0° 〜 360° で扱いたいケースもありますよね。負の角度を360°プラスする補正式が便利ですよ。
=DEGREES(IMARGUMENT(A2)) + IF(IMARGUMENT(A2) < 0, 360, 0)
たとえば「1-1i」の偏角は -45°(IMARGUMENT結果は -π/4)ですが、この式で計算すると 315° として返ります。レーダー方位や時計回りの角度表示で使うと便利ですね。
ラジアンのまま 0〜2π で扱いたい場合は、+ IF(IMARGUMENT(A2) < 0, 2*PI(), 0) で補正します。
活用例4: 極形式表示のための一括変換
複素数を「大きさ ∠ 角度」という極形式で表示したいときは、IMABS と IMARGUMENT を組み合わせた文字列を作ります。
=IMABS(A2) & " ∠ " & ROUND(DEGREES(IMARGUMENT(A2)), 2) & "°"
A2に「3+4i」が入っていれば、「5 ∠ 53.13°」という文字列が返りますよ。レポート用に複素数を直感的に表示したいときに便利ですね。電気回路の解析レポートや、振動解析の出力表で重宝するパターンです。
活用例5: 複素数演算の結果から偏角を確認する
IMSUMやIMPRODUCTといった複素数演算関数の結果から、偏角だけを取り出す使い方もあります。
=IMARGUMENT(IMPRODUCT("1+1i", "1+1i"))
内側のIMPRODUCT関数が「(1+1i) × (1+1i) = 0+2i」を計算します。外側のIMARGUMENT関数がその偏角「π/2 ≒ 1.5708」を返してくれますね。
複素数を掛け合わせると偏角は足し算される、という性質を確認したいときにも使えますよ。位相回転の挙動をシート上で観察できる教材的なパターンですね。
IMARGUMENT関数とIMABS関数の違い
複素数を極形式で扱うとき、IMARGUMENT関数とIMABS関数はペアで使うことが多いですね。違いを整理しておきましょう。
| 関数 | 返す値 | 数式の意味 | 例(3+4i) |
|---|---|---|---|
| IMABS | 絶対値(大きさ) | √(a² + b²) | 5 |
| IMARGUMENT | 偏角(角度) | atan2(b, a) | 約0.9273ラジアン(約53.13°) |
IMABSは「原点からの距離」、IMARGUMENTは「実軸からの角度」を返します。極形式「r∠θ」の r がIMABSで、θ がIMARGUMENTですね。
成分そのものを取り出したいときは IMREAL(実数部)と IMAGINARY(虚数部)を使います。表現方法の違いを整理するとこうなりますよ。
| 表現 | 取り出す関数 | 意味 |
|---|---|---|
| 直交形式(a+bi) | IMREAL / IMAGINARY | 実部 a と虚部 b |
| 極形式(r∠θ) | IMABS / IMARGUMENT | 大きさ r と偏角 θ |
直交形式と極形式は同じ複素数を別の角度から表したものです。回路解析では極形式、計算には直交形式というように、目的によって使い分けますね。
IMARGUMENT関数のよくあるエラーと対処法
#NUM! エラー(複素数の形式エラー)
複素数として認識できない文字列を渡したときに発生します。虚数単位が大文字になっていたり、i・j以外の文字を使っている場合が典型例ですよ。
=IMARGUMENT("3+4I") → #NUM!(大文字のIは不可)
=IMARGUMENT("3+4k") → #NUM!(i・j以外は不可)
=IMARGUMENT("3+4i") → #NUM!(全角文字は不可)
対処法は、複素数文字列を必ず半角の「a+bi」または「a+bj」の形式にすることです。虚数単位は小文字限定なので、CapsLockがオンになっていないか確認してくださいね。
スペースが入っている場合(例: "3 + 4i")も認識できないことがあるので、余計な空白を除いておくと安心です。
#DIV/0! エラー(0+0i の偏角)
複素数「0+0i」(実部も虚部も0)を渡すと、原点なので角度が定義できず #DIV/0! エラーになります。
=IMARGUMENT("0+0i") → #DIV/0!
=IMARGUMENT(0) → #DIV/0!
=IMARGUMENT("0") → #DIV/0!
対処法は、ゼロ複素数を渡さないようにすることです。データソースに0が混じる可能性があるなら、IFERROR関数(エラー時に代替値を返す関数)でガードしておくと安心ですよ。
=IFERROR(IMARGUMENT(A2), 0)
ゼロのときは偏角を0として扱う、といった運用にできますね。
#VALUE! エラー(引数の型エラー)
引数に論理値やエラー値を渡したときに発生します。
=IMARGUMENT(TRUE) → #VALUE!(論理値は不可)
=IMARGUMENT(#N/A) → #VALUE!(エラー値は不可)
対処法は、正しい複素数文字列または数値・セル参照を渡すことです。入力元のセルがエラーになっている場合は、そのエラーを先に解消する必要がありますよ。
IFERRORでまとめてエラーを吸収する
入力データの信頼性が低い場合は、IFERROR関数で包んでおくとシート全体の集計が止まりません。
=IFERROR(IMARGUMENT(A2), "形式エラー")
エラー時にメッセージを返すようにしておけば、安心して大量データに適用できますよ。
IMARGUMENT関数とExcelの互換性
GoogleスプレッドシートのIMARGUMENT関数は、ExcelのIMARGUMENT関数と仕様が完全に一致しています。構文・引数・戻り値の形式・範囲(-π 〜 π)・エラー条件まで同じですよ。
ExcelファイルをGoogleスプレッドシートで開いてもIMARGUMENT関数はそのまま動作します。逆にスプレッドシートで作った数式をExcelで開いても問題ありませんね。
ExcelのIMARGUMENT関数は、Excel 2007以降のすべてのバージョンで利用できます。Microsoft 365、Excel for Mac、Excel Online でも同じように使えますよ。
Excel版の詳細な解説はExcelのIMARGUMENT関数の使い方も参考にしてくださいね。プラットフォーム間で挙動が同じだと、ファイル共有のときにも安心です。
複素数関連の関数一覧
IMARGUMENT関数と一緒に使うことが多い、複素数関連の関数をまとめました。
| 関数名 | 機能 |
|---|---|
| COMPLEX | 実数と虚数から複素数を作成する |
| IMREAL | 複素数の実数係数を返す |
| IMAGINARY | 複素数の虚数係数を返す |
| IMABS | 複素数の絶対値(大きさ)を返す |
| IMARGUMENT | 複素数の偏角(角度)をラジアンで返す |
| IMCONJUGATE | 共役複素数を返す |
| IMSUM | 複素数の合計(足し算)を返す |
| IMSUB | 複素数の差(引き算)を返す |
| IMPRODUCT | 複素数の積(掛け算)を返す |
| IMDIV | 複素数の商(割り算)を返す |
| IMEXP | 複素数の指数関数を返す |
| IMLN | 複素数の自然対数を返す |
| IMSQRT | 複素数の平方根を返す |
IMARGUMENT関数は、これら複素数関数群の中で「角度を取り出す」役割を担います。COMPLEXで作り、IMSUMやIMPRODUCTで計算してから、最後にIMABSとIMARGUMENTで極形式に分解するのが基本パターンですね。
まとめ
GoogleスプレッドシートのIMARGUMENT関数は、複素数の偏角(位相角)をラジアン単位で返す関数です。交流回路の位相分析やフーリエ変換の位相スペクトルなど、極形式で複素数を扱うときに欠かせない関数ですよ。
- 構文は
=IMARGUMENT(複素数)で引数は1つだけのシンプルな関数 - 戻り値はラジアン単位、範囲は -π 〜 π(-180° 〜 180°)
- 「a+bi」「a+bj」のどちらの形式も受け付ける(虚数単位は小文字のみ)
- 度で表示したいときは
=DEGREES(IMARGUMENT(...))で変換する - COMPLEX関数の結果やセル参照、複素数演算の結果から偏角を取り出せる
- IMABS関数とペアで複素数を極形式(r∠θ)に分解できる
- ARRAYFORMULAで複数の複素数を一括処理できる
- 0〜360°の範囲で扱いたいときは負の角度に360を足して補正する
- 「0+0i」を渡すと #DIV/0! エラーになるので注意
- 大文字の「I」「J」や全角文字、i・j以外の単位は #NUM! エラー
- ExcelのIMARGUMENT関数と完全互換(Excel 2007以降)
複素数の角度や位相が必要になったら、IMARGUMENT関数の出番ですよ。COMPLEX関数で複素数を作り、IMABSとIMARGUMENTで極形式に分解する流れで、エンジニアリング系のシートを軽快に組み立ててみてくださいね。
