「スプレッドシートで複素数の割り算をしたいけど、分母を共役で有理化する手順を毎回書くのは面倒…」
スプレッドシートで複素数を扱っていると、二つの複素数の比を取りたい場面がありますよね。分母分子に共役複素数をかけて、実部と虚部を分けて計算して…という手順を毎回踏むのは結構大変です。
そんなときに頼りになるのがGoogleスプレッドシートのIMDIV関数です。複素数を2つ渡すだけで商(割り算の結果)を一発で返してくれるので、インピーダンス計算や伝達関数の数式が一気にすっきりしますよ。
ExcelのIMDIV関数と完全互換なので、Excelファイルとやり取りする現場でも安心ですね。COMPLEX関数で作った複素数や、IMSUM・IMPRODUCTの演算結果からも、そのまま割り算を続けられます。
この記事では、スプレッドシートのIMDIV関数の基本構文と実務での活用例を解説します。共役複素数を使った内部計算の仕組みや、よくあるエラーと対処法もしっかり紹介していきますよ。
スプレッドシートのIMDIV関数とは?
GoogleスプレッドシートのIMDIV関数(イマジナリー・ディバイド関数)は、2つの複素数の商(割り算の結果)を返す関数です。エンジニアリング関数(電気・物理・工学系の計算で使う関数群)のひとつに分類されますよ。
読み方は「イマジナリー・ディバイド」または「アイエム・ディブ」で、英語の「imaginary number(虚数)」の「divide(割る)」に由来します。複素数「a+bi」を別の複素数「c+di」で割った結果を、複素数として返してくれるのが役割ですね。
そもそも複素数の割り算は、分母の共役複素数を分母分子にかけて有理化する手順で計算します。定義式は次のようになりますよ。
(a+bi) / (c+di) = ((ac+bd) + (bc-ad)i) / (c²+d²)
実部は「(ac+bd) / (c²+d²)」、虚部は「(bc-ad) / (c²+d²)」となり、結果も複素数で返るのが特徴ですね。分母が0+0iだと0除算エラーになる点も覚えておきましょう。
| 複素数1(z1) | 複素数2(z2) | IMDIV(z1, z2)の結果 | 内部計算 |
|---|---|---|---|
| 1+1i | 1+1i | 1 | 同じ複素数同士の商は1 |
| 2+2i | 1+1i | 2 | 実数倍の関係 |
| 1+0i | 0+1i | -i | 1/i = -i |
| 1+1i | 1-1i | i | 共役で割ると偏角が2倍 |
| 3+4i | 1+2i | 2.2-0.4i | (3+8 + (4-6)i)/5 |
IMDIV関数を使えば、この表の右側にある「複素数の商」をサクッと取り出せます。Excelとの互換性も完璧で、Excel 2007以降のすべてのバージョンに対応していますよ。
複素数の商は、交流回路のインピーダンス比・伝達関数(出力/入力の比)・複素数の大きさ比較・量子力学の確率振幅の比など、複素数の比を扱う場面で活躍する基礎パーツですね。
IMDIV関数の書き方(構文と引数)
基本構文
=IMDIV(複素数1, 複素数2)
引数は2つで、第1引数を第2引数で割る形ですよ。
引数の詳細
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 複素数1(inumber1) | 必須 | 割られる数(分子)となる複素数。文字列またはセル参照で指定する |
| 複素数2(inumber2) | 必須 | 割る数(分母)となる複素数。文字列またはセル参照で指定する |
引数には「”1+2i”」や「”1+2j”」のような複素数文字列を直接渡せます。COMPLEX関数(実数と虚数から複素数を作成する関数)の結果や、複素数が入ったセルの参照も指定できますよ。
虚数単位は小文字の「i」または「j」のどちらでも受け付けます。数学では「i」、電気工学では「j」が使われる慣習ですね。IMDIV関数はどちらでも同じように動作してくれます。
TIP
第1引数と第2引数で異なる虚数単位(一方が「i」、もう一方が「j」)を混ぜると #VALUE! エラーになります。シート内で表記を揃えておくと安心ですよ。
引数の順序は重要です。「IMDIV(A, B)」は「A ÷ B」を意味するので、分子と分母を間違えると結果が逆数になってしまいますね。SUM・PRODUCTのように順序を気にしない関数とは違う点に注意してください。
IMDIV関数の基本的な使い方
文字列で複素数を直接指定する
複素数文字列をそのまま引数に渡してみましょう。
=IMDIV("3+4i", "1+2i")
結果は「2.2-0.4i」になります。実部・虚部それぞれが小数で返ってきますね。
実部だけの複素数同士を割ると、通常の割り算と同じ結果になります。
=IMDIV("6", "3")
=IMDIV("6+0i", "3+0i")
どちらも結果は「2」です。実数の世界の割り算と一致しますよ。
純虚数同士を割ると、虚数単位が打ち消しあって実数になります。
=IMDIV("4i", "2i")
結果は「2」になります。「4i ÷ 2i = 2」という計算ですね。
セル参照で複素数を指定する
実務ではセルに入った複素数を扱う場面が多いですよね。A2に「3+4i」、B2に「1+2i」が入っている場合は次のように書きます。
=IMDIV(A2, B2)
結果は「2.2-0.4i」になります。セル参照を渡すだけで、入っている複素数同士の商を取り出せますよ。
COMPLEX関数と組み合わせる
COMPLEX関数で作った複素数同士の割り算を、その場で計算することもできます。
=IMDIV(COMPLEX(3, 4), COMPLEX(1, 2))
結果は「2.2-0.4i」、つまり「IMDIV(“3+4i”, “1+2i”)」と同じですね。COMPLEX(3, 4)が内部で「3+4i」を作り、IMDIV関数がその商を返してくれます。
数値で実部と虚部を渡したいときに便利な書き方ですよ。
1を複素数で割って逆数を求める
ある複素数の逆数を求めたい場合は、第1引数に「1」を渡します。
=IMDIV("1", "1+1i")
結果は「0.5-0.5i」になります。「1 / (1+1i) = (1-i) / ((1+i)(1-i)) = (1-i)/2」という有理化の結果ですね。
逆数はインピーダンスとアドミタンスの変換などで頻繁に登場するので、覚えておくと便利ですよ。
ARRAYFORMULAで複数行を一括処理する
複素数のリスト同士で一気に商の列を作りたい場面もありますよね。そんなときはARRAYFORMULA関数(数式を範囲全体に展開する関数)と組み合わせます。
=ARRAYFORMULA(IMDIV(A2:A10, B2:B10))
A列の複素数を分子、B列の複素数を分母として、対応する商をC列に一発で展開できますよ。伝達関数の周波数特性を一括計算するときに重宝しますね。
IMDIV関数の実務活用例
活用例1: 実部と虚部に分解して可視化する
IMDIV関数の戻り値は複素数なので、グラフにしたいときは実部と虚部に分けて取り出します。IMREAL関数とIMAGINARY関数を組み合わせる流れですよ。
A列に分子、B列に分母の複素数が並んでいるとしましょう。
C2: =IMDIV(A2, B2) ← 複素数の商
D2: =IMREAL(C2) ← 実部
E2: =IMAGINARY(C2) ← 虚部
D列を実部、E列を虚部としてプロットすれば、複素平面上での挙動が一目で分かりますね。複素関数の振る舞いを学ぶ教材や、解析結果の可視化レポートで使えるパターンです。
活用例2: 交流回路のインピーダンス比を計算する
電気回路では、2つのインピーダンスの比を取る場面が頻繁にあります。インピーダンスは複素数で表されるので、その比もそのままIMDIV関数で計算できますよ。
たとえばZ1=3+4i Ω、Z2=1+2i Ω の2つのインピーダンスがあるとしましょう。
A2: 3+4i ← インピーダンス1
B2: 1+2i ← インピーダンス2
C2: =IMDIV(A2, B2) ← Z1 / Z2
C2の結果「2.2-0.4i」が、インピーダンス比として得られます。分圧回路の電圧分配比や、増幅器の入出力比の計算で活躍するパターンですよ。
活用例3: 伝達関数の周波数応答を計算する
制御工学では、システムの入出力比を「伝達関数」として複素数で表します。たとえば1次遅れ系「H(jω) = 1 / (1+jωT)」の周波数応答を考えましょう。
時定数T=0.1秒、角周波数ω=10 rad/s の場合、IMDIV関数を使うとこう書けます。
A2: 10 ← 角周波数 ω
B2: 0.1 ← 時定数 T
C2: =IMDIV("1", COMPLEX(1, A2*B2))
C2の結果は「0.5-0.5i」になりますよ。実部・虚部から、ゲインと位相を求められますね。ボード線図のシミュレーションシートで使える書き方です。
活用例4: 共役で割って偏角を2倍にする
複素数zをその共役z̄で割ると、結果の偏角は元のzの偏角の2倍になります。複素関数論の基本性質の1つですね。
A2: 1+1i ← 元の複素数 z(偏角π/4)
B2: =IMCONJUGATE(A2) ← 共役 z̄
C2: =IMDIV(A2, B2) ← z / z̄
D2: =IMARGUMENT(C2) ← 偏角(ラジアン)
D2の結果は「π/2 ≈ 1.5708」になりますよ。元の偏角π/4の2倍ですね。複素数の幾何的性質を数値で確認できる仕組みで、数学の教材や解析の検算で使えます。
活用例5: 量子力学の確率振幅の比
量子力学では、状態間の遷移確率を「確率振幅の比」として複素数で扱う場面があります。たとえば2つの状態 ψ1 = 0.6+0.8i、ψ2 = 0.8+0.6i の振幅比は次のように書けます。
A2: 0.6+0.8i ← 確率振幅 ψ1
B2: 0.8+0.6i ← 確率振幅 ψ2
C2: =IMDIV(A2, B2) ← ψ1 / ψ2
D2: =IMABS(C2) ← 振幅の大きさ比
E2: =IMARGUMENT(C2) ← 位相差(ラジアン)
D2が振幅比、E2が位相差として得られますね。量子状態の干渉計算や、波動関数の解析シートで使える書き方ですよ。
IMDIV関数とCOMPLEX関数群の関係
複素数を扱う関数群の中で、IMDIV関数の位置づけを整理しておきましょう。
| 関数 | 入力 | 出力 | 役割 |
|---|---|---|---|
| COMPLEX | 実数 a, b | 複素数 a+bi | 複素数を作る |
| IMREAL | 複素数 a+bi | 実数 a | 実部を取り出す |
| IMAGINARY | 複素数 a+bi | 実数 b | 虚部を取り出す |
| IMABS | 複素数 a+bi | 実数 √(a²+b²) | 大きさを取り出す |
| IMCONJUGATE | 複素数 a+bi | 複素数 a-bi | 共役を作る |
| IMSUM | 複素数 z1, z2, … | 複素数 z1+z2+… | 足し算 |
| IMSUB | 複素数 z1, z2 | 複素数 z1-z2 | 引き算 |
| IMPRODUCT | 複素数 z1, z2, … | 複素数 z1×z2×… | 掛け算 |
| IMDIV | 複素数 z1, z2 | 複素数 z1÷z2 | 割り算 |
IMSUM・IMSUB・IMPRODUCT・IMDIVの4つで、複素数の四則演算が一通り揃いますね。IMDIV関数は「商」の役割を担い、出力もそのまま複素数なので、IMSUMやIMPRODUCTにそのまま渡してさらに計算を続けられますよ。
たとえば定義式どおりに(a+bi) / (c+di)を手動で組み立てると次のようになります。
=COMPLEX(
(IMREAL(A2)*IMREAL(B2) + IMAGINARY(A2)*IMAGINARY(B2)) / (IMREAL(B2)^2 + IMAGINARY(B2)^2),
(IMAGINARY(A2)*IMREAL(B2) - IMREAL(A2)*IMAGINARY(B2)) / (IMREAL(B2)^2 + IMAGINARY(B2)^2)
)
これはIMDIVと同じ結果になりますが、共役による有理化の式を毎回手書きする必要がありますよね。IMDIVを使えば1関数で済むので、数式が読みやすくなります。
IMDIV関数のよくあるエラーと対処法
#NUM! エラー(複素数の形式エラー、または0除算)
複素数として認識できない文字列を渡したとき、または分母が0+0iのときに発生します。
=IMDIV("3+4i", "1+1I") → #NUM!(大文字のIは不可)
=IMDIV("3+4i", "1+1k") → #NUM!(i・j以外は不可)
=IMDIV("3+4i", "0") → #NUM!(0除算)
=IMDIV("3+4i", "0+0i") → #NUM!(0除算)
対処法は、まず複素数文字列を必ず半角の「a+bi」または「a+bj」の形式にすることです。虚数単位は小文字限定なので、CapsLockがオンになっていないか確認してくださいね。
そして分母が0+0iにならないように、分母側の値を事前にチェックしておくと安心です。IF関数で「分母が0なら計算しない」という分岐を作っておくのが定番ですよ。
=IF(B2="0+0i", "", IMDIV(A2, B2))
#VALUE! エラー(引数の型エラー、または虚数単位の不一致)
引数に論理値やエラー値を渡したとき、または2つの引数で虚数単位(i/j)が一致しないときに発生します。
=IMDIV(TRUE, "1+1i") → #VALUE!(論理値は不可)
=IMDIV("3+4i", #N/A) → #VALUE!(エラー値は不可)
=IMDIV("3+4i", "1+2j") → #VALUE!(iとjの混在は不可)
対処法は、正しい複素数文字列または数値・セル参照を渡すことと、シート全体で虚数単位を統一することです。入力元のセルがエラーになっている場合は、そのエラーを先に解消する必要がありますよ。
#DIV/0! エラー
スプレッドシートのIMDIVは、0除算のときに #NUM! を返す仕様ですが、環境によっては #DIV/0! を返す場合もあります。どちらも「分母が0」を意味するので、対処法は同じですよ。
=IMDIV("1+1i", "0") → #NUM! または #DIV/0!
分母側の値が常に0でないことを保証するか、IFERRORで包んでフォールバック値を返すのが安全ですね。
IFERRORでまとめてエラーを吸収する
入力データの信頼性が低い場合は、IFERROR関数(エラー時に代替値を返す関数)で包んでおくとシート全体の集計が止まりません。
=IFERROR(IMDIV(A2, B2), "計算不可")
エラー時にメッセージを返すようにしておけば、安心して大量データに適用できますよ。
IMDIV関数とExcelの互換性
GoogleスプレッドシートのIMDIV関数は、ExcelのIMDIV関数と仕様が完全に一致しています。構文・引数・戻り値の形式・エラー条件まで同じですよ。
ExcelファイルをGoogleスプレッドシートで開いてもIMDIV関数はそのまま動作します。逆にスプレッドシートで作った数式をExcelで開いても問題ありませんね。
ExcelのIMDIV関数は、Excel 2007以降のすべてのバージョンで利用できます。Microsoft 365、Excel for Mac、Excel Online でも同じように使えますよ。古いExcelファイルとの互換性も心配いりません。
複素数関連の関数一覧
IMDIV関数と一緒に使うことが多い、複素数関連の関数をまとめました。
| 関数名 | 機能 |
|---|---|
| COMPLEX | 実数と虚数から複素数を作成する |
| IMREAL | 複素数の実数係数を返す |
| IMAGINARY | 複素数の虚数係数を返す |
| IMABS | 複素数の絶対値(大きさ)を返す |
| IMARGUMENT | 複素数の偏角(角度)をラジアンで返す |
| IMCONJUGATE | 共役複素数を返す |
| IMSUM | 複素数の合計(足し算)を返す |
| IMSUB | 複素数の差(引き算)を返す |
| IMPRODUCT | 複素数の積(掛け算)を返す |
| IMDIV | 複素数の商(割り算)を返す |
| IMEXP | 複素数の指数関数を返す |
| IMLN | 複素数の自然対数を返す |
| IMSQRT | 複素数の平方根を返す |
| IMCOS | 複素数のコサインを返す |
| IMSIN | 複素数のサインを返す |
IMDIV関数は、これら複素数関数群の中で「割り算」を担う四則演算の1つです。COMPLEXで作り、IMSUM・IMSUB・IMPRODUCT・IMDIVで四則演算し、IMREAL・IMAGINARYで実部と虚部に分けて可視化するのが基本パターンですね。
まとめ
GoogleスプレッドシートのIMDIV関数は、2つの複素数の商(割り算の結果)を返す関数です。インピーダンス比・伝達関数・確率振幅の比など、複素数の比を扱う場面で欠かせない関数ですよ。
- 構文は
=IMDIV(複素数1, 複素数2)で第1引数を第2引数で割る - 「(a+bi) / (c+di) = ((ac+bd) + (bc-ad)i) / (c²+d²)」が内部計算式
- 「a+bi」と「a+bj」のどちらの表記もそのまま受け付ける
- 引数の順序が重要(分子と分母を間違えると逆数になる)
- 第1引数に「1」を渡せば逆数を求められる
- COMPLEX関数の結果やセル参照、複素数演算の結果から商を計算できる
- IMCONJUGATEと組み合わせて偏角を2倍にできる
- ARRAYFORMULAで複数の複素数ペアを一括処理できる
- 大文字の「I」「J」やi・j以外の単位は #NUM! エラー
- 分母が0+0iだと #NUM! または #DIV/0! エラー
- 2つの引数で虚数単位(i/j)が混在すると #VALUE! エラー
- ExcelのIMDIV関数と完全互換(Excel 2007以降)
複素数の割り算が必要になったら、IMDIV関数の出番ですよ。COMPLEX関数で複素数を作り、IMDIVで商を取り、IMREAL・IMAGINARYで成分を分解する流れで、エンジニアリング系のシートを軽快に組み立ててみてくださいね。
