「スプレッドシートで2つの複素数の引き算をしたいけど、実部と虚部を別々に計算するのは面倒…」
スプレッドシートで複素数を扱っていると、(3+4i) − (1+2i) のような引き算が必要になる場面がありますよね。手計算なら実部と虚部をそれぞれ引き算すれば済みますが、データが何十行もあるとミスの温床になりがちです。
そんなときに頼りになるのがGoogleスプレッドシートのIMSUB関数です。複素数を2つ渡すだけで差を一発で返してくれるので、実部と虚部を個別に引き算する手間がなくなりますよ。
ExcelのIMSUB関数と完全互換なので、Excelファイルとやり取りする現場でも安心ですね。COMPLEX関数で作った複素数や、IMSUMの演算結果からも、そのまま差を計算できます。
この記事では、スプレッドシートのIMSUB関数の基本構文と実務での活用例を解説します。複素数の引き算の数学的背景や、IMSUM関数との違い、よくあるエラーと対処法もしっかり紹介していきますよ。
スプレッドシートのIMSUB関数とは?
GoogleスプレッドシートのIMSUB関数(イマジナリー・サブトラクト関数)は、2つの複素数の差(引き算)を返す関数です。エンジニアリング関数(電気・物理・工学系の計算で使う関数群)のひとつに分類されますよ。
読み方は「イマジナリー・サブトラクト」または「アイエム・サブ」で、英語の「imaginary number(虚数)」の「subtract(引く)」に由来します。複素数 z1 と z2 に対して、z1 − z2 を返してくれるのが役割ですね。
そもそも複素数の引き算は、実部と虚部をそれぞれ独立して引き算するシンプルな演算です。式で書くと次のようになりますね。
(a + bi) − (c + di) = (a − c) + (b − d)i
実部の差 (a−c) と虚部の差 (b−d) を組み合わせるだけ、という素直な定義です。手計算でもできるのですが、データが多くなるとIMSUB関数で自動化したほうが圧倒的にラクですよ。
| 複素数1 | 複素数2 | IMSUB(z1, z2)の結果 | 内部計算 |
|---|---|---|---|
| 3+4i | 1+2i | 2+2i | 実部 3-1=2、虚部 4-2=2 |
| 3+4i | -4+6i | 7-2i | 実部 3-(-4)=7、虚部 4-6=-2 |
| 2+3i | -1-2i | 3+5i | 実部 2-(-1)=3、虚部 3-(-2)=5 |
| 0+5i | 0+2i | 3i | 実部 0、虚部 5-2=3 |
| 3+4i | 3+4i | 0 | 同じ複素数の差 |
IMSUB関数を使えば、この表の右側にある「複素数の差」をサクッと取り出せます。Excelとの互換性も完璧で、Excel 2007以降のすべてのバージョンに対応していますよ。
複素数の差は、電気回路のインピーダンス差分・信号処理のフェーザ演算・制御工学の伝達関数比較など、複素数演算が必要な場面で活躍する基礎パーツですね。
IMSUB関数の書き方(構文と引数)
基本構文
=IMSUB(複素数1, 複素数2)
引数は2つあり、どちらも必須です。意味は単純で「複素数1 − 複素数2」を返してくれます。
引数の詳細
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 複素数1(first_number) | 必須 | 引かれる側の複素数。文字列またはセル参照で指定する |
| 複素数2(second_number) | 必須 | 引く側の複素数。文字列またはセル参照で指定する |
引数1には「”3+4i”」や「”3+4j”」のような複素数文字列を直接渡せます。COMPLEX関数(実数と虚数から複素数を作成する関数)の結果や、複素数が入ったセルの参照も指定できますよ。
虚数単位は小文字の「i」または「j」のどちらでも受け付けます。数学では「i」、電気工学では「j」が使われる慣習ですね。IMSUB関数はどちらでも同じように動作してくれます。
TIP
戻り値は第1引数の虚数単位に従って返されます。「3+4i」を渡せば「i」付きで、「3+4j」を渡せば「j」付きで返るので、表記の統一性も保たれますよ。
ただし、第1引数と第2引数で虚数単位を混在させるとエラーになります。両方とも「i」で揃えるか、両方とも「j」で揃える必要がありますね。
IMSUB関数の基本的な使い方
文字列で複素数を直接指定する
複素数文字列をそのまま引数に渡してみましょう。
=IMSUB("3+4i", "1+2i")
結果は「2+2i」になります。実部は 3−1=2、虚部は 4−2=2 という単純な計算ですね。
実部だけの複素数(虚部0)を渡すと、通常の引き算と同じ結果になります。
=IMSUB("5+0i", "3+0i")
結果は「2」です。5−3=2 という基本的な値が返ってきますね。
純虚数だけを渡すと、虚部の差だけが結果に残ります。
=IMSUB("0+5i", "0+2i")
結果は「3i」になります。実部はゼロ、虚部は 5−2=3 という計算ですね。
セル参照で複素数を指定する
実務ではセルに入った複素数を扱う場面が多いですよね。A2に「3+4i」、B2に「1+2i」が入っている場合は次のように書きます。
=IMSUB(A2, B2)
結果は「2+2i」になります。セル参照を渡すだけで、入っている複素数の差を取り出せますよ。
負の複素数の引き算
引き算では符号の扱いがミスの原因になりがちですが、IMSUB関数なら自動でやってくれます。
=IMSUB("2+3i", "-1-2i")
結果は「3+5i」です。手計算では (2+3i) − (−1−2i) = 2+3i+1+2i = 3+5i となりますね。マイナス × マイナス = プラス の符号反転を、IMSUBが正確に処理してくれます。
虚数単位 j を使う場合
電気工学では虚数単位として「j」が使われる慣習があります。両方の引数で「j」に統一すれば、そのまま動作しますよ。
=IMSUB("3+4j", "1+2j")
結果は「2+2j」になります。戻り値も「j」付きで返るので、工学系のレポートでも使いやすいですね。
COMPLEX関数と組み合わせる
COMPLEX関数で作った複素数の差を、その場で計算することもできます。
=IMSUB(COMPLEX(3, 4), COMPLEX(1, 2))
結果は「2+2i」、つまり「IMSUB(“3+4i”, “1+2i”)」と同じですね。実部と虚部がセルに分かれているデータを扱うときに便利な書き方ですよ。
ARRAYFORMULAで複数行を一括処理する
複素数のリストから一気に差の列を作りたい場面もありますよね。そんなときはARRAYFORMULA関数(数式を範囲全体に展開する関数)と組み合わせます。
=ARRAYFORMULA(IMSUB(A2:A10, B2:B10))
A列とB列に並んだ複素数から、対応する差の値をC列に一発で展開できますよ。データ点ごとの差分を一括で計算するときに重宝しますね。
IMSUB関数の実務活用例
活用例1: 電気回路のインピーダンス差分
交流回路の解析では、全体インピーダンスから特定の素子のインピーダンスを引いて残りを求める計算がよくあります。
抵抗R=10Ω、リアクタンスX=20Ω の素子を含む回路を考えてみましょう。全体 Z_total = 30+50j、既知部分 Z_known = 10+20j のとき、残りの部分は次のように計算できますよ。
A2: =COMPLEX(30, 50, "j") ← Z_total = 30+50j
B2: =COMPLEX(10, 20, "j") ← Z_known = 10+20j
C2: =IMSUB(A2, B2) ← Z_remain = 20+30j
電気工学の慣習に合わせて虚数単位を「j」にしたい場合は、COMPLEX関数の第3引数で指定できますね。
活用例2: 複素平面上の2点間の距離
複素数は複素平面(実部を横軸、虚部を縦軸にとった平面)上の点として扱えます。2点間の距離は、差の絶対値 |z1 − z2| で計算できますよ。
A2に「3+4i」、B2に「0+0i」が入っているとします。
=IMABS(IMSUB(A2, B2))
結果は「5」になります。原点から (3, 4) までの距離 √(9+16) = 5 ですね。これは2次元のユークリッド距離と完全に一致します。
ベクトル演算の代用として複素数を使うパターンですよ。実部をx座標、虚部をy座標とみなせば、IMSUBが「ベクトルの差」、IMABSが「ベクトルの大きさ」として機能してくれます。
活用例3: 信号処理のフェーザ差分
信号処理では、入力信号と出力信号の振幅・位相をフェーザ(複素数)で表します。出力フェーザから入力フェーザを引くと、変化量がそのまま得られますよ。
入力 V_in = 5+0j(振幅5、位相0)、出力 V_out = 4+3j のとき、変化量は次のように計算できます。
A2: =COMPLEX(4, 3, "j") ← V_out = 4+3j
B2: =COMPLEX(5, 0, "j") ← V_in = 5+0j
C2: =IMSUB(A2, B2) ← ΔV = -1+3j
D2: =IMABS(C2) ← |ΔV| ≈ 3.16(変化量の大きさ)
E2: =IMARGUMENT(C2) ← 変化の位相(rad)
差を取ってからIMABSとIMARGUMENTで大きさと位相を取り出す流れは、フェーザ解析の定番パターンですね。
活用例4: 基準点からのオフセット計算
データ点を基準点からの差で正規化したいときも、IMSUB関数が便利です。基準点 z0 からの各データ点 zi のオフセットを一括で計算できますよ。
A列に複素数のデータ、B1セルに基準点が入っている場合はこう書きます。
=ARRAYFORMULA(IMSUB(A2:A10, $B$1))
データ点ごとに「基準点からのズレ」を複素数で表現できますね。複素平面上での相対位置の可視化や、データのバラつき分析に応用できますよ。
活用例5: 制御工学の伝達関数比較
制御工学では、2つの系の周波数応答を比較するために複素数の差を取ることがあります。同じ周波数での応答 H1(jω) と H2(jω) の差から、系の違いを定量化できますよ。
A2に系1の応答、B2に系2の応答が入っているとします。
A2: 0.8+0.4j ← H1(jω)
B2: 0.7+0.5j ← H2(jω)
C2: =IMSUB(A2, B2) ← H1 - H2 = 0.1-0.1j
D2: =IMABS(C2) ← |H1 - H2| ≈ 0.141
応答差の大きさを |H1 − H2| で評価することで、2つの系がどれだけ似ているかを数値化できますね。
IMSUB関数とIMSUM関数の違い
複素数の足し算と引き算を扱う関数として、IMSUMとIMSUBはペアの関係にあります。引数の数や使い方に違いがあるので、整理しておきましょう。
| 項目 | IMSUM | IMSUB |
|---|---|---|
| 機能 | 複素数の和 | 複素数の差 |
| 引数の数 | 可変長(最大255個) | 2個固定 |
| 構文 | =IMSUM(z1, z2, …, zn) | =IMSUB(z1, z2) |
| 演算 | z1 + z2 + … + zn | z1 − z2 |
| 順序の影響 | なし(可換) | あり(z1 − z2 ≠ z2 − z1) |
IMSUMが可変長で多数の複素数を一括加算できるのに対し、IMSUBは2引数固定の引き算専用です。3つ以上の複素数を引き続けたい場合は、IMSUBを入れ子にするか、IMSUMでまとめてから引く必要がありますよ。
例えば z1 − z2 − z3 を計算したい場合は、次のいずれかの書き方になりますね。
=IMSUB(IMSUB(z1, z2), z3) ← IMSUB を入れ子
=IMSUB(z1, IMSUM(z2, z3)) ← まず z2+z3 を IMSUM、その後引く
どちらも結果は同じです。引きたい複素数が複数あるときは、IMSUMで合算してからIMSUBで引くほうが式がスッキリしますよ。
IMSUB関数のよくあるエラーと対処法
#NUM! エラー(複素数の形式エラー)
複素数として認識できない文字列を渡したときに発生します。虚数単位が大文字になっていたり、i・j以外の文字を使っている場合が典型例ですよ。
=IMSUB("3+4I", "1+2I") → #NUM!(大文字のIは不可)
=IMSUB("3+4k", "1+2k") → #NUM!(i・j以外は不可)
=IMSUB("3+4i", "1+2i") → #NUM!(全角文字は不可)
対処法は、複素数文字列を必ず半角の「a+bi」または「a+bj」の形式にすることです。虚数単位は小文字限定なので、CapsLockがオンになっていないか確認してくださいね。
スペースが入っている場合(例: "3 + 4i")も認識できないことがあるので、余計な空白を除いておくと安心です。
#NUM! エラー(虚数単位の混在)
第1引数と第2引数で虚数単位が異なるとエラーになります。
=IMSUB("3+4i", "1+2j") → #NUM!(i と j の混在は不可)
対処法は、両方の引数で虚数単位を「i」または「j」のどちらかに統一することです。元データが「j」で来ている場合は、両方を「j」に揃えるか、SUBSTITUTE関数で一括置換してから渡しましょう。
#VALUE! エラー(引数の型エラー)
引数に複素数として解釈できない値(純粋な文字列、配列の不整合など)を渡したときに発生します。
=IMSUB("hello", "1+2i") → #NUM! または #VALUE!
=IMSUB(#N/A, "1+2i") → #N/A(エラー値はそのまま伝播)
対処法は、空白セルを参照していないか、参照先のデータ形式が正しいかを確認することですね。=ISTEXT(A2) や =LEN(A2) でセルの中身をチェックしておくと安心ですよ。
結果が想定と違う(引数の順序の取り違え)
IMSUB関数は「複素数1 − 複素数2」の順序で計算するので、引数を逆に渡すと符号が反転します。
=IMSUB("3+4i", "1+2i") → 2+2i(正解)
=IMSUB("1+2i", "3+4i") → -2-2i(順序が逆)
対処法は、どちらが「引かれる側」でどちらが「引く側」かを明確にすることです。式の意味を「z1 から z2 を引く」と覚えておくと迷わないですよ。
IFERRORでまとめてエラーを吸収する
入力データの信頼性が低い場合は、IFERROR関数(エラー時に代替値を返す関数)で包んでおくとシート全体の集計が止まりません。
=IFERROR(IMSUB(A2, B2), "形式エラー")
エラー時にメッセージを返すようにしておけば、安心して大量データに適用できますよ。
IMSUB関数とExcelの互換性
GoogleスプレッドシートのIMSUB関数は、ExcelのIMSUB関数と仕様が完全に一致しています。構文・引数・戻り値の形式・エラー条件まで同じですよ。
ExcelファイルをGoogleスプレッドシートで開いてもIMSUB関数はそのまま動作します。逆にスプレッドシートで作った数式をExcelで開いても問題ありませんね。
ExcelのIMSUB関数は、Excel 2007以降のすべてのバージョンで利用できます。Microsoft 365、Excel for Mac、Excel Online でも同じように使えますよ。古い環境とファイルを共有する場合でも、安心して使える関数ですね。
複素数関連の関数一覧
IMSUB関数と一緒に使うことが多い、複素数関連の関数をまとめました。
| 関数名 | 機能 |
|---|---|
| COMPLEX | 実数と虚数から複素数を作成する |
| IMREAL | 複素数の実数係数を返す |
| IMAGINARY | 複素数の虚数係数を返す |
| IMABS | 複素数の絶対値(大きさ)を返す |
| IMARGUMENT | 複素数の偏角(角度)をラジアンで返す |
| IMCONJUGATE | 共役複素数を返す |
| IMSUM | 複素数の和(足し算)を返す |
| IMSUB | 複素数の差(引き算)を返す |
| IMPRODUCT | 複素数の積(掛け算)を返す |
| IMDIV | 複素数の商(割り算)を返す |
| IMPOWER | 複素数のべき乗を返す |
| IMSQRT | 複素数の平方根を返す |
| IMEXP | 複素数の指数関数を返す |
| IMCOS | 複素数のコサインを返す |
IMSUB関数は、これら複素数関数群の中で「差を計算する」役割を担います。COMPLEXで作り、IMSUBで差を取り、IMABS・IMARGUMENTで大きさと位相を確認するのが基本パターンですね。
まとめ
GoogleスプレッドシートのIMSUB関数は、2つの複素数の差(引き算)を返す関数です。電気回路のインピーダンス差分、信号処理のフェーザ演算、制御工学の応答比較、複素平面上の距離計算など、複素数の差が必要な場面で欠かせない関数ですよ。
- 構文は
=IMSUB(複素数1, 複素数2)で、引数は2つとも必須 - 演算は「複素数1 − 複素数2」で、実部・虚部それぞれを引き算する
- 「a+bi」と「a+bj」のどちらの表記でも動作する
- 第1引数と第2引数で虚数単位(i・j)を混在させると #NUM! エラー
- 戻り値の虚数単位は第1引数に従う
- COMPLEX関数の結果やセル参照、複素数演算の結果から差を計算できる
- IMABSと組み合わせれば、複素平面上の2点間の距離が出せる
- ARRAYFORMULAで複数行を一括処理できる
- IMSUMは可変長の和、IMSUBは2引数固定の差というペア関係
- 大文字の「I」「J」や全角文字、i・j以外の単位は #NUM! エラー
- ExcelのIMSUB関数と完全互換(Excel 2007以降)
複素数の引き算が必要になったら、IMSUB関数の出番ですよ。COMPLEX関数で複素数を作り、IMSUBで差を取る流れに、IMABSとIMARGUMENTで結果の大きさと位相を確認するステップを加えてみてください。エンジニアリング系のシートを軽快に組み立てられますよ。
