「引き継いだスプレッドシートに =IMABS(A2) があるけど、何を計算しているのか分からない」。交流回路のインピーダンスや信号の振幅を扱っていると、こんな場面に出くわしますよね。
複素数は "3+4i" のような文字列で入っているので、ふつうの ABS 関数に渡すと #VALUE! になります。実部と虚部を取り出し、二乗して足して平方根を取る式を自分で組むと、長くて読み返すのも一苦労。
そこで使うのが、Google スプレッドシートの IMABS 関数です。この記事では、IMABS が何を返すのかと、計算の中身 √(a²+b²) の意味から説明します。
続けて、セル参照や COMPLEX 関数との組み合わせを紹介。インピーダンスから電流を出す例や、#NUM! エラーの原因もまとめました。
スプレッドシートのIMABS関数とは?複素数の「大きさ」を求める関数
結論:=IMABS(“3+4i”) は 5
結論:
=IMABS("3+4i")の結果は 5。IMABS は複素数を 1 つ受け取り、その「大きさ(絶対値)」を返す関数です。
Google 公式ヘルプの説明は「複素数の絶対値を返します。」の一文だけ。IMABS はエンジニアリング関数(電気・工学系の計算で使う関数群)の一つで、複素数の「長さ」にあたる量を求めます。
√(a²+b²)=原点からの距離という意味
複素数 a+bi は、横軸に実部 a、縦軸に虚部 b をとった平面(複素平面)の点 (a, b) として描けます。原点からその点までの距離が、複素数の絶対値です。
3+4i なら、横に 3、縦に 4 進んだ点になります。直角三角形の斜辺の長さはピタゴラスの定理で √(3²+4²)=√25=5。一般には √(a²+b²) と表せて、これが IMABS の計算の中身というわけです。
ふつうの ABS 関数は実数用なので、"3+4i" のような複素数の文字列は扱えません。複素数の大きさには IMABS を使う、と覚えておけば十分でしょう。
大きさと対になるのが、x 軸からの「角度(偏角)」です。大きさ r と角度 θ をセットにした r∠θ を極形式と呼びます。角度の求め方はスプレッドシートのIMARGUMENT関数の使い方で解説しています。
検算しやすい早見表
結果が整数になる組み合わせ(ピタゴラス数)を並べました。シートに入れた式が正しく動いているかの検算に使えます。
| 複素数 | 計算 | IMABS の結果 |
|---|---|---|
| 3+4i | √(9+16)=√25 | 5 |
| 5+12i | √(25+144)=√169 | 13 |
| 8+15i | √(64+225)=√289 | 17 |
| -6-8i | √(36+64)=√100 | 10 |
| 0+7i | √(0+49) | 7 |
| -2 | √4 | 2 |
| 0 | √0 | 0 |
実部や虚部がマイナスでも、二乗するので符号は消えます。結果は必ず 0 以上になるのがポイント。
IMABS関数の書き方と基本の使い方
構文と引数(i と j はどちらも可)
=IMABS(複素数)
| 引数 | 内容 |
|---|---|
| 複素数(必須) | 大きさを求めたい複素数。"3+4i" のような文字列、セル参照、COMPLEX 関数の結果などを渡す |
引数は 1 つだけです。虚数単位は小文字の i と j のどちらでも受け付けます。数学では i、電気工学では j を使うのが一般的ですね。
"3+4i" も "3+4j" も結果は同じ 5 です。ただし大文字の I・J は #NUM! になるので注意しましょう(エラーの章で詳しく扱います)。
セル参照・COMPLEX関数と組み合わせる
A2 に 5+12i が入っているなら、セルを渡すだけで計算できます。実部と虚部を別の列で持っているなら、COMPLEX 関数で組み立ててから渡す形が手軽です。
=IMABS(A2)
=IMABS(COMPLEX(6, 8))
=IMABS(COMPLEX(3, 4, "j"))
1 行目は √169 で 13。2 行目は COMPLEX で 6+8i を作り、その大きさ 10 を返します。3 行目は Google 公式ヘルプのサンプルと同じ式で、結果は 5 です。
COMPLEX の第 3 引数に "j" を指定すると、j 表記の複素数を作れます。使い方はスプレッドシートのCOMPLEX関数の使い方へどうぞ。
純実数・純虚数・0 を渡したとき
虚部だけ、実部だけの値もそのまま渡せます。
| 数式 | 結果 | 考え方 |
|---|---|---|
=IMABS("i") | 1 | 0+1i と同じ |
=IMABS("-2j") | 2 | 符号は二乗で消える |
=IMABS(5) | 5 | 実数だけでも計算できる |
=IMABS("-2") | 2 | 負の実数は ABS と同じ値 |
=IMABS(0) | 0 | 原点なので距離は 0 |
純実数を渡すと、ABS 関数と同じ値が返ります。列の中に虚部のない値が混じっていても、同じ式のまま使えるわけです。
ARRAYFORMULAで列をまとめて計算する
A2:A6 に複素数が並んでいるなら、B2 に次の式を 1 つ入れるだけで B 列に結果が並びます。ARRAYFORMULA は、範囲を渡した式を行ごとに展開する関数です。
=ARRAYFORMULA(IMABS(A2:A6))
| A(複素数) | B(大きさ) |
|---|---|
| 3+4i | 5 |
| 5+12i | 13 |
| 8+15i | 17 |
| -6-8i | 10 |
| 0+7i | 7 |
範囲は A2:A6 のように、データの行数に合わせて固定しておくのが無難です。A2:A のような開いた範囲は、空行も計算の対象になります。空行にどう表示されるかを先に確かめてから使ってください。
割り切れない結果を ROUND で丸める
=IMABS("1+1i") は √2 で、約 1.414 の長い小数になります。表示をそろえたいときは ROUND 関数で包みましょう。
=ROUND(IMABS("1+1i"), 3)
この式の結果は 1.414 です。
IMABS の結果は数値で返るので、=IMABS("3+4i")+1(結果は 6)や =SUM(IMABS("3+4i"), 1) のように、そのまま計算や比較に使えます。IMSQRT など、結果が複素数の文字列になる IM 系関数とは違う点です。
IMABS関数の実務での使い方
インピーダンスの大きさから電流を出す
交流回路のインピーダンス(電流の流れにくさ)は、Z=R+jX という複素数で表します。R は抵抗分、X はコイルやコンデンサが生むリアクタンス分です。
B 列に R、C 列に X を入れ、D〜F 列で |Z| と電流を出してみましょう。電圧は 100V とします。
D2: =COMPLEX(B2, C2, "j")
E2: =IMABS(D2)
F2: =100/E2
| R(Ω) | X(Ω) | Z | Z | (Ω) | 電流(A) | |
|---|---|---|---|---|---|---|
| 30 | 40 | 30+40j | 50 | 2 | ||
| 60 | 80 | 60+80j | 100 | 1 | ||
| 50 | 30 | 50+30j | 約 58.31 | 約 1.715 |
30+40j なら √(900+1600)=√2500=50Ω。オームの法則 I=V/|Z| から、100÷50=2A になります。
電圧と電流の位相差(角度)は IMARGUMENT 関数の担当です。IMARGUMENT関数の記事も同じ 30+40j の例なので、読み比べると大きさと角度の両方がそろいます。
2点間の距離を求める
複素平面上の 2 点の距離は、引き算した結果の大きさです。A2 に 1+1i、B2 に 3+4i があるなら、次のように書きます。
=IMABS(IMSUB(B2, A2))
内側の IMSUB関数 が差 2+3i を出し、IMABS がその大きさ √13=約 3.606 を返す流れです。座標を複素数で持っておけば、x と y を別々に引き算する手間がありません。
2 点の表記は i か j のどちらかにそろえましょう。IMSUB は i と j が混在すると #NUM! になります。
振幅がしきい値を超えたか判定する
測定した振幅が基準を超えていないか、行ごとにチェックしたい場面もあるはず。IF 関数と組み合わせれば、しきい値以上の行に印を付けられます。
=IF(IMABS(A2)>=10, "超過", "")
IMABS は数値を返すので、>= の比較にそのまま使えます。先ほどの A2:A6 の例なら、13・17・10 の 3 行が「超過」になります。しきい値は $E$1 などのセルに置くと、基準を変えるときに式を直さずに済んで便利。
ほかにも、外部ソフトで計算した FFT(周波数分解)の結果を貼り付けて振幅を出す使い方があります。伝達関数の値を =20*LOG10(IMABS(A2)) でデシベルに換算する、といった用途も同じ考え方です。スプレッドシートには FFT の関数がないので、複素数の値は別のソフトから持ち込む前提になります。
ほかの求め方・関連関数との違い
IMABS/SQRT(IMREAL²+IMAGINARY²)/ABS の比較
同じ「大きさ」を出す方法を 3 つ並べました。A2 には 3+4i が入っているとします。
| 数式 | 結果 | 特徴 |
|---|---|---|
=IMABS(A2) | 5 | 1 関数で済む |
=SQRT(IMREAL(A2)^2+IMAGINARY(A2)^2) | 5 | 定義どおりの計算。式が長い |
=ABS(A2) | #VALUE! | 実数用なので複素数の文字列は扱えない |
2 行目は、IMREAL関数で実部、IMAGINARY関数で虚部を取り出して √(a²+b²) を組んだ式です。中身は IMABS と同じ計算なので、ふだんは IMABS 1 つで足ります。
もう一つの見方が「|z|² は z と共役複素数の積」という関係です。3+4i なら (3+4i)(3-4i)=9+16=25 で、5 の二乗と一致しますね。共役はIMCONJUGATE関数で求められます。
関連する複素数関数の早見表
| 関数 | 返すもの | IMABS との関係 |
|---|---|---|
| COMPLEX | 実部と虚部から作った複素数 | IMABS に渡す値を作る |
| IMREAL | 実部 a | √(a²+b²) の a |
| IMAGINARY | 虚部 b | √(a²+b²) の b |
| IMARGUMENT | 偏角(ラジアン) | 大きさと組んで極形式になる |
| IMCONJUGATE | 共役複素数 a-bi | 大きさは元の数と同じ |
| IMPRODUCT | 複素数の積 | 積の大きさは大きさの積 |
| IMSQRT | 複素数の平方根 | 大きさは元の大きさの平方根 |
IMREAL・IMAGINARY は「横と縦の成分」、IMABS・IMARGUMENT は「距離と角度」を返す関数。同じ複素数を別の形で読む道具、と考えると整理しやすいですよ。
IMABS関数のエラーと注意点
エラー早見表
スプレッドシートの IMABS で、入力ごとにどんな結果になるかをまとめました。
| 入力 | 結果 |
|---|---|
半角の空白入り =IMABS("3 + 4i") | 5(空白なしと同じ。エラーにならない) |
全角の空白入り =IMABS("3 + 4i") | #NUM! |
大文字の I・J =IMABS("3+4I") | #NUM! |
全角の文字 =IMABS("3+4i")・=IMABS("3+4i") | #NUM! |
i・j 以外の文字 =IMABS("3+4k")・=IMABS("hello") | #NUM! |
論理値 =IMABS(TRUE) | #NUM! |
エラー値 =IMABS(#N/A) | #N/A(そのまま返る) |
=ABS("3+4i") | #VALUE! |
#NUM! の原因は、ほぼ「複素数として読めない文字列」です。全角の文字や空白、大文字の I・J が混じっていないか見直しましょう。ほかのシステムから貼り付けたデータは、全角の空白が紛れ込みやすいので要注意。
#N/A などが返るときは、参照先のセルがすでにエラーです。IMABS ではなく、元のセルのエラーを先に直してください。#VALUE! が出たら、ABS など別の関数に複素数を渡していないかを確認するのが近道です。
0 が返るのはエラーではない
=IMABS(0) や =IMABS("0+0i") の結果は 0 です。原点から原点までの距離なので、正しい計算結果になります。
意図せず 0 が並ぶときは、入力元のセルの値が 0 になっていないかを確かめてみてください。
IFERRORで表示を整える
入力の形式がそろっていないデータを扱うなら、IFERROR 関数で包んでおくと表が崩れません。
=IFERROR(IMABS(A2), "形式エラー")
ただし IFERROR は、どのエラーも同じ表示に置き換えます。原因を調べている間は外しておき、#NUM! か #N/A かを見分けられる状態で直すのがおすすめです。
NOTE
Excel の IMABS 関数を探している方は、ExcelのIMABS関数の使い方をご覧ください。この記事のエラー早見表はスプレッドシートでの挙動で、Excel 側の細部とは比べていません。
まとめ
スプレッドシートの IMABS 関数は、複素数の大きさ(絶対値)を返す関数です。ポイントを振り返っておきましょう。
=IMABS("3+4i")は 5。計算の中身は √(a²+b²) で、原点からの距離を表す- 虚数単位は小文字の i と j のどちらでも可。大文字や全角は
#NUM! - セル参照や COMPLEX 関数の結果をそのまま渡せる
- インピーダンスの大きさ(30+40j なら 50Ω)や 2 点間の距離の計算に使える
- ABS 関数は実数用で、複素数の文字列を渡すと
#VALUE! - 半角の空白はエラーにならず、エラー値を渡すと元のエラーがそのまま返る
大きさが分かったら、次は角度です。大きさと角度をそろえて極形式で読みたい方は、IMARGUMENT関数の記事もあわせてチェックしてみてください。

