スプレッドシートのIMPRODUCT関数の使い方|複素数の積を一発で計算

スポンサーリンク

「スプレッドシートで複素数同士の掛け算をしたいけど、(a+bi)(c+di)を展開して i² = -1 で整理するのが面倒…」

スプレッドシートで複素数を扱っていると、2つ以上の複素数を掛け合わせたい場面がありますよね。実部と虚部に分けて展開して、i²の置き換えを忘れずに、最後にもう一度複素数の形に組み立て直す…という手順を毎回踏むのは、ちょっと大変です。

そんなときに頼りになるのがGoogleスプレッドシートのIMPRODUCT関数です。複素数を並べて渡すだけで、それらの積を一発で返してくれるので、インピーダンス合成やフーリエ変換の数式が一気にすっきりしますよ。

ExcelのIMPRODUCT関数と完全互換なので、Excelファイルとやり取りする現場でも安心ですね。COMPLEX関数で作った複素数や、IMSUM・IMPOWERの演算結果からも、そのまま積を計算できます。

この記事では、スプレッドシートのIMPRODUCT関数の基本構文と実務での活用例を解説します。最大255個まで一気に掛けられる仕様や、よくあるエラーと対処法もしっかり紹介していきますよ。

スプレッドシートのIMPRODUCT関数とは?

GoogleスプレッドシートのIMPRODUCT関数(イマジナリー・プロダクト関数)は、複素数同士の積(掛け算の結果)を返す関数です。エンジニアリング関数(電気・物理・工学系の計算で使う関数群)のひとつに分類されますよ。

読み方は「イマジナリー・プロダクト」または「アイエム・プロダクト」で、英語の「imaginary number(虚数)」の「product(積)」に由来します。複素数「a+bi」と「c+di」を渡すと、(a+bi)×(c+di) を返してくれるのが役割ですね。

そもそも複素数の積とは、実数の掛け算を複素数全体に拡張したものです。展開して i² = -1 に置き換えると、次のような形になります。

(a+bi)(c+di) = (ac − bd) + (ad + bc)i

実部は「ac − bd」、虚部は「ad + bc」というシンプルなルールですね。極形式で見ると、絶対値同士は掛け算、偏角(角度)同士は足し算になるという性質も持っています。

複素数の組み合わせIMPRODUCTの結果内部計算
(2+3i) × (1+4i)-10+11i2−12 と 8+3
(1+1i) × (1−1i)2+0i共役同士の積(絶対値の2乗)
(3+0i) × (0+2i)0+6i実数 × 純虚数
(2+0i) × (3+0i) × (4+0i)24+0i実数3つの積
(1+1i) × (1+1i) × (1+1i)-2+2i(1+i)³

IMPRODUCT関数を使えば、この表の右側にある「複素数の積」をサクッと取り出せます。Excelとの互換性も完璧で、Excel 2007以降のすべてのバージョンに対応していますよ。

複素数の積は、電気工学のインピーダンス合成・信号処理の伝達関数の連結・量子力学の状態ベクトルの内積など、複素数演算が必要な場面で活躍する基礎パーツですね。

IMPRODUCT関数の書き方(構文と引数)

基本構文

=IMPRODUCT(複素数1, [複素数2, ...])

引数は最低1つ必要で、最大255個まで指定できます。

引数の詳細

引数必須/任意説明
複素数1(inumber1)必須積を求めたい1つ目の複素数。文字列またはセル参照で指定する
複素数2以降(inumber2, …)任意2つ目以降の複素数。最大255個まで指定可能

引数には「”2+3i”」や「”2+3j”」のような複素数文字列を直接渡せます。COMPLEX関数(実数と虚数から複素数を作成する関数)の結果や、複素数が入ったセルの参照、セル範囲も指定できますよ。

虚数単位は小文字の「i」または「j」のどちらでも受け付けます。数学では「i」、電気工学では「j」が使われる慣習ですね。IMPRODUCT関数はどちらでも同じように動作してくれます。

TIP

戻り値は「i」と「j」の混在を許しません。引数に「i」と「j」が混ざっていると #VALUE! エラーになるので、計算前に表記を揃えておきましょう。

引数1つだけを渡した場合は、その複素数自身が返ります。実部だけの数(虚部0)を渡すと、通常の掛け算と同じ結果になりますよ。

IMPRODUCT関数の基本的な使い方

文字列で複素数を直接指定する

複素数文字列をそのまま引数に渡してみましょう。

=IMPRODUCT("2+3i", "1+4i")

結果は「-10+11i」になります。手計算で確認すると (2+3i)(1+4i) = 2+8i+3i+12i² = 2+11i-12 = -10+11i なので、計算が合っていますね。

実部だけの複素数(虚部0)を渡すと、通常の掛け算と同じ結果になります。

=IMPRODUCT("3+0i", "4+0i")

結果は「12」です。3 × 4 = 12 という基本的な値が返ってきますね。

共役複素数同士を掛けると、絶対値の2乗が実数で得られます。

=IMPRODUCT("3+4i", "3-4i")

結果は「25」になります。これは |3+4i|² = 3²+4² = 25 と一致しますね。共役複素数の積は、複素数の大きさを求めるときの定番パターンです。

セル参照で複素数を指定する

実務ではセルに入った複素数を扱う場面が多いですよね。A2に「1+2i」、B2に「3+4i」が入っている場合は次のように書きます。

=IMPRODUCT(A2, B2)

結果は「-5+10i」になります。セル参照を渡すだけで、入っている複素数の積を取り出せますよ。

3つ以上の複素数を一気に掛ける

IMPRODUCT関数は最大255個まで複素数を受け付けます。3つ以上をまとめて掛けたいときは、カンマ区切りで並べていきましょう。

=IMPRODUCT("1+1i", "1+1i", "1+1i")

結果は「-2+2i」になります。(1+i)³ を1セルで一気に計算できますね。同じ複素数を何度も掛けるならIMPOWER関数の方が読みやすいですが、それぞれ異なる複素数を掛けるならIMPRODUCTが便利です。

=IMPRODUCT(A2, B2, C2, D2)

A2〜D2に4つの複素数が入っていれば、それらの積が一発で求まります。インピーダンスの段接続のように、複数の素子を順番に掛けていく計算で重宝しますよ。

COMPLEX関数と組み合わせる

COMPLEX関数で作った複素数の積を、その場で計算することもできます。

=IMPRODUCT(COMPLEX(2, 3), COMPLEX(1, 4))

結果は「-10+11i」、つまり「IMPRODUCT(“2+3i”, “1+4i”)」と同じですね。COMPLEX(2, 3)が内部で「2+3i」を作り、IMPRODUCT関数がその積を返してくれます。

実部と虚部がセルに分かれているデータを扱うときに便利な書き方ですよ。

ARRAYFORMULAで複数行を一括処理する

複素数のリストから一気に積の列を作りたい場面もありますよね。そんなときはARRAYFORMULA関数(数式を範囲全体に展開する関数)と組み合わせます。

=ARRAYFORMULA(IMPRODUCT(A2:A10, B2:B10))

A列とB列の同じ行同士の積を、対応する行ごとに一発で計算できますよ。フーリエ変換の係数同士を掛け合わせるときに重宝しますね。

ただしARRAYFORMULA + IMPRODUCT で「列全体を1つの積にまとめる」ことはできません。範囲をすべて掛け合わせたい場合は、後述のREDUCEを使う方法が便利ですよ。

REDUCEで列を畳み込む

A2:A10 に並んだ複素数すべての積をまとめて求めたいときは、REDUCE関数(範囲を順に畳み込む関数)と組み合わせます。

=REDUCE("1+0i", A2:A10, LAMBDA(acc, x, IMPRODUCT(acc, x)))

初期値の「1+0i」から始めて、A2:A10 の複素数を順番に掛けていく書き方ですね。可変長のリストに対しても、一発で総積を計算できますよ。

IMPRODUCT関数の実務活用例

活用例1: 共役複素数で絶対値の2乗を求める

複素数 z=a+bi の絶対値の2乗は、共役複素数 z*=a-bi との積として求められます。IMPRODUCT関数とIMCONJUGATE関数(共役複素数を返す関数)を組み合わせれば、シート上で素直に計算できますよ。

A2に「3+4i」が入っているとします。

B2: =IMCONJUGATE(A2)         ← 共役 3-4i
C2: =IMPRODUCT(A2, B2)       ← |z|² = 25

C2の結果は実数の「25」になりますね。IMABS関数(絶対値)で求めた値の2乗と一致するので、検算用としても便利です。

活用例2: 電気回路のインピーダンス合成

交流回路のインピーダンスは複素数で表され、直列接続されたインピーダンスを伝達特性として掛け合わせるときに、複素数の積が登場します。IMPRODUCT関数を使えば、Excelシートに直接落とし込めますよ。

抵抗成分のZ1=10+5j、リアクタンス成分のZ2=2+8j を組み合わせるなら、こう書きます。

A2: =COMPLEX(10, 5, "j")       ← Z1 = 10+5j
A3: =COMPLEX(2, 8, "j")        ← Z2 = 2+8j
A4: =IMPRODUCT(A2, A3)         ← Z1 × Z2 = -20+90j
A5: =IMABS(A4)                 ← |Z1 × Z2|

電気工学の慣習に合わせて虚数単位を「j」にしたい場合は、COMPLEX関数の第3引数で指定できますね。

活用例3: 伝達関数の段接続

制御工学では、複数の伝達関数 G1(s)、G2(s)、G3(s) を直列に接続したシステムの全体特性を、それぞれの値の積として計算します。特定の周波数 s=jω での値が複素数になるので、IMPRODUCT関数で一発に組み合わせられますよ。

ある周波数ωでの値がそれぞれ G1=1+2j、G2=0.5+0.5j、G3=2+1j のとき、こう書きます。

A2: =COMPLEX(1, 2, "j")            ← G1
A3: =COMPLEX(0.5, 0.5, "j")        ← G2
A4: =COMPLEX(2, 1, "j")            ← G3
A5: =IMPRODUCT(A2, A3, A4)         ← G1 × G2 × G3
A6: =IMABS(A5)                     ← ゲイン
A7: =IMARGUMENT(A5)                ← 位相

A5の結果がシステム全体の応答ですね。ゲインと位相を一緒に出しておけば、ボード線図の作成にもそのまま使えますよ。

活用例4: 信号処理のフィルタ係数の合成

複数のフィルタを直列につないだときの特性は、各フィルタの周波数応答の積で表されます。離散時間系では z=e^(jω) を代入して計算するので、IMPRODUCT関数とCOMPLEX関数の組み合わせが活きてきますね。

ある周波数ωで、フィルタ1の応答が「0.8+0.3j」、フィルタ2の応答が「1.2-0.4j」のとき、こう書きます。

A2: =COMPLEX(0.8, 0.3, "j")        ← H1(e^jω)
A3: =COMPLEX(1.2, -0.4, "j")       ← H2(e^jω)
A4: =IMPRODUCT(A2, A3)             ← H1 × H2 = 1.08+0.04j

A4が合成後の周波数応答ですね。学習用のシミュレーションシートとして使えるパターンです。

活用例5: 累積積をリスト化する

時間ステップごとに複素数の係数を順次掛け合わせていく計算では、累積積を1列に展開すると便利です。直前のセルとの積を取る形で、漸化式のように書けますよ。

A列に係数、B列に累積積を出すなら、こう書きます。

A2: 1+0i
A3: 0.9+0.1i
A4: 0.8+0.2i
A5: 0.7+0.3i

B2: =A2                       ← 初期値
B3: =IMPRODUCT(B2, A3)        ← 累積積
B4: =IMPRODUCT(B3, A4)
B5: =IMPRODUCT(B4, A5)

下にコピーすれば、累積積の列が完成しますね。物理シミュレーションや確率計算のチェイン処理で重宝するパターンですよ。

IMPRODUCT関数とCOMPLEX関数群の関係

複素数を扱う関数群の中で、IMPRODUCT関数の位置づけを整理しておきましょう。

関数入力出力役割
COMPLEX実数 a, b複素数 a+bi複素数を作る
IMREAL複素数 a+bi実数 a実部を取り出す
IMAGINARY複素数 a+bi実数 b虚部を取り出す
IMABS複素数 a+bi実数 √(a²+b²)大きさを取り出す
IMARGUMENT複素数 a+bi実数 atan2(b,a)偏角を取り出す
IMSUM複素数 z1, z2, …複素数 z1+z2+…和を計算する
IMSUB複素数 z1, z2複素数 z1-z2差を計算する
IMPRODUCT複素数 z1, z2, …複素数 z1×z2×…積を計算する
IMDIV複素数 z1, z2複素数 z1/z2商を計算する
IMPOWER複素数 z, 指数 n複素数 z^nべき乗を計算する

IMPRODUCTは「複数の複素数から1つの複素数を計算する」役割です。出力もそのまま複素数なので、IMSUMやIMPOWERにそのまま渡してさらに計算を続けられますよ。

たとえば同じ複素数を3回掛けたい場合、IMPOWERの方が読みやすくなります。

=IMPRODUCT("2+3i", "2+3i", "2+3i")
=IMPOWER("2+3i", 3)

どちらも結果は「-46+9i」で同じですね。ただし異なる複素数を順次掛けたいなら、IMPRODUCTの出番です。役割で使い分けるとシートが読みやすくなりますよ。

割り算がしたい場合は、IMDIV関数を使うと意図が明確になります。「IMPRODUCT(z1, IMPOWER(z2, -1))」とも書けますが、IMDIV(z1, z2) の方がストレートですね。

IMPRODUCT関数のよくあるエラーと対処法

#NUM! エラー(複素数の形式エラー)

複素数として認識できない文字列を渡したときに発生します。虚数単位が大文字になっていたり、i・j以外の文字を使っている場合が典型例ですよ。

=IMPRODUCT("1+1I", "1+1i")   → #NUM!(大文字のIは不可)
=IMPRODUCT("1+1k", "1+1i")   → #NUM!(i・j以外は不可)
=IMPRODUCT("1+1i", "1+1i") → #NUM!(全角文字は不可)

対処法は、複素数文字列を必ず半角の「a+bi」または「a+bj」の形式にすることです。虚数単位は小文字限定なので、CapsLockがオンになっていないか確認してくださいね。

スペースが入っている場合(例: "1 + 1i")も認識できないことがあるので、余計な空白を除いておくと安心です。

#VALUE! エラー(虚数単位の混在)

引数に「i」と「j」が混ざっていると #VALUE! エラーになります。

=IMPRODUCT("1+1i", "1+1j")   → #VALUE!(iとjの混在は不可)

対処法は、虚数単位をすべて「i」かすべて「j」のどちらかに統一することです。シート全体でルールを決めておくと、こうしたミスを防げますよ。COMPLEX関数で複素数を作るときは、第3引数で単位を統一できるので便利ですね。

#VALUE! エラー(引数の型エラー)

論理値やエラー値を渡したときにも #VALUE! エラーが発生します。

=IMPRODUCT("1+1i", TRUE)   → #VALUE!(論理値は不可)
=IMPRODUCT("1+1i", #N/A)   → #N/A(エラー値はそのまま伝播)

対処法は、すべての引数を複素数文字列か数値で統一することです。実数を渡すと「a+0i」として扱われるので、数値そのものは問題なく受け付けてくれますよ。

結果が極端な値になる

たくさんの複素数を掛け合わせると、絶対値が指数的に増えてオーバーフローしたり、数値誤差が積み上がったりします。

=IMPRODUCT(A2:A100)   → 100個の積で誤差が膨らむケース

対処法は、必要に応じて対数領域で計算する、あるいは中間結果を正規化することです。フィルタの直列接続なら各段でゲインを揃える、伝達関数の解析なら局所的にスケーリングする、といった工夫が必要ですね。

IFERRORでまとめてエラーを吸収する

入力データの信頼性が低い場合は、IFERROR関数(エラー時に代替値を返す関数)で包んでおくとシート全体の集計が止まりません。

=IFERROR(IMPRODUCT(A2, B2), "形式エラー")

エラー時にメッセージを返すようにしておけば、安心して大量データに適用できますよ。

IMPRODUCT関数とExcelの互換性

GoogleスプレッドシートのIMPRODUCT関数は、ExcelのIMPRODUCT関数と仕様が完全に一致しています。構文・引数・戻り値の形式・エラー条件まで同じですよ。

ExcelファイルをGoogleスプレッドシートで開いてもIMPRODUCT関数はそのまま動作します。逆にスプレッドシートで作った数式をExcelで開いても問題ありませんね。

ExcelのIMPRODUCT関数は、Excel 2007以降のすべてのバージョンで利用できます。Microsoft 365、Excel for Mac、Excel Online でも同じように使えますよ。古い環境とファイルを共有する場合でも、安心して使える関数ですね。

複素数関連の関数一覧

IMPRODUCT関数と一緒に使うことが多い、複素数関連の関数をまとめました。

関数名機能
COMPLEX実数と虚数から複素数を作成する
IMREAL複素数の実数係数を返す
IMAGINARY複素数の虚数係数を返す
IMABS複素数の絶対値(大きさ)を返す
IMARGUMENT複素数の偏角(角度)をラジアンで返す
IMCONJUGATE共役複素数を返す
IMPOWER複素数のべき乗を返す
IMSQRT複素数の平方根を返す
IMSUM複素数の合計(足し算)を返す
IMSUB複素数の差(引き算)を返す
IMPRODUCT複素数の積(掛け算)を返す
IMDIV複素数の商(割り算)を返す
IMEXP複素数の指数関数を返す
IMLN複素数の自然対数を返す
IMCOS複素数のコサインを返す
IMSIN複素数のサインを返す

IMPRODUCT関数は、これら複素数関数群の中で「積を計算する」役割を担います。COMPLEXで作り、IMPRODUCTで積を取り、IMABS・IMARGUMENTで絶対値と偏角を確認するのが基本パターンですね。

まとめ

GoogleスプレッドシートのIMPRODUCT関数は、複素数同士の積を返す関数です。電気工学のインピーダンス合成、信号処理のフィルタ連結、制御工学の伝達関数の段接続など、複素数の掛け算が必要な場面で欠かせない関数ですよ。

  • 構文は =IMPRODUCT(複素数1, [複素数2, ...]) で最低1つ、最大255個まで指定可能
  • 「a+bi」と「c+di」を渡すと、(a+bi)×(c+di) の結果が返る
  • 「a+bj」のような工学系表記もそのまま受け付ける
  • 共役複素数同士の積で、絶対値の2乗を実数として求められる
  • 3つ以上の複素数も一気に掛け合わせられる
  • COMPLEX関数の結果やセル参照、複素数演算の結果から積を計算できる
  • IMABS・IMARGUMENTと組み合わせて結果を検算できる
  • 同じ複素数の繰り返し掛け算ならIMPOWER、割り算ならIMDIVと使い分ける
  • ARRAYFORMULAで複数行を一括処理できる
  • REDUCEと組み合わせれば、可変長リストの総積も計算できる
  • 大文字の「I」「J」や全角文字、i・j以外の単位は #NUM! エラー
  • 「i」と「j」の混在は #VALUE! エラー
  • 論理値や非数値を引数に渡すと #VALUE! エラー
  • ExcelのIMPRODUCT関数と完全互換(Excel 2007以降)

複素数の積が必要になったら、IMPRODUCT関数の出番ですよ。COMPLEX関数で複素数を作り、IMPRODUCTで積を取り、IMABS・IMARGUMENTで絶対値と偏角を検算する流れで、エンジニアリング系のシートを軽快に組み立ててみてくださいね。

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