スプレッドシートのIMABS関数の使い方|複素数の絶対値と#NUM!の原因

スポンサーリンク

「引き継いだスプレッドシートに =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)=√255
5+12i√(25+144)=√16913
8+15i√(64+225)=√28917
-6-8i√(36+64)=√10010
0+7i√(0+49)7
-2√42
0√00

実部や虚部がマイナスでも、二乗するので符号は消えます。結果は必ず 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")10+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+4i5
5+12i13
8+15i17
-6-8i10
0+7i7

範囲は 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(Ω)ZZ(Ω)電流(A)
304030+40j502
608060+80j1001
503050+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)51 関数で済む
=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関数の記事もあわせてチェックしてみてください。

タイトルとURLをコピーしました