スプレッドシートのCOMPLEX関数の使い方|実数と虚数から複素数を作成する

スポンサーリンク

「スプレッドシートで複素数(3+4iのような数)を扱いたいけど、手で入力するとただのテキストになってしまう…」

スプレッドシートで電気回路のインピーダンスや信号処理の数式を組んでいると、複素数を計算可能な形で持ちたい場面がありますよね。セルに「3+4i」と入力しても、それは文字列扱いになってしまうので計算には使えません。

そんなときに頼りになるのがGoogleスプレッドシートのCOMPLEX関数です。実数部と虚数部を引数に渡すだけで、IM系関数(複素数演算用の関数群)でそのまま計算できる複素数を作れますよ。

しかもExcelのCOMPLEX関数と完全互換なので、Excelファイルとやり取りする現場でも安心です。複素数の四則演算や絶対値の算出、共役複素数の生成などにつなげていけば、エンジニアリング系のシートが一気に楽になりますね。

この記事では、スプレッドシートのCOMPLEX関数の基本構文から虚数単位の指定方法、IMABS・IMREAL・IMAGINARY・IMSUM などの関連関数との組み合わせまで解説します。よくあるエラーと対処法にもしっかり触れていきますよ。

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

GoogleスプレッドシートのCOMPLEX関数(コンプレックス関数)は、実数と虚数から複素数を作成する関数です。エンジニアリング関数(電気・物理・工学系の計算で使う関数群)のひとつに分類されますよ。

返ってくる結果は「3+4i」のような文字列形式の複素数です。文字列ですが、IMSUM・IMABS・IMREALといったIM系関数に渡せばそのまま計算に使えます。

そもそも複素数とは「a+bi」の形で表される数のことです。aが実数部、bが虚数部、iは虚数単位(2乗すると-1になる仮想的な数)を表します。電気工学のインピーダンス計算や、信号処理のフーリエ変換などでよく登場しますね。

スプレッドシートで複素数を扱うときは、まずCOMPLEX関数で「計算できる複素数」を作るところから始めましょう。これが基本の流れですよ。

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

基本構文

=COMPLEX(実数, 虚数, [虚数単位])

引数は3つで、最後の「虚数単位」だけが省略可能です。

引数の詳細

引数必須/任意説明
実数(real_num)必須複素数の実数部となる数値
虚数(i_num)必須複素数の虚数部となる数値
虚数単位(suffix)任意虚数部の単位記号「i」または「j」。省略時は「i」

第1引数の「実数」と第2引数の「虚数」には数値またはセル参照を指定します。文字列を渡すと #VALUE! エラーになるので注意してくださいね。

第3引数の「虚数単位」は、数学では「i」、電気工学では「j」を使う慣習があります。指定できるのは小文字の「i」「j」のみです。大文字の「I」「J」を渡すと #NUM! エラーになりますよ。

TIP

COMPLEX関数の結果は「文字列」として返ります。見た目は数式バーで「3+4i」と表示されますが、内部的には文字列なので通常の +- 演算子では計算できません。複素数同士の計算は必ずIM系関数(IMSUMなど)を使ってくださいね。

COMPLEX関数の基本的な使い方

値を直接指定して複素数を作成する

実数部が3、虚数部が4の複素数を作ってみましょう。

=COMPLEX(3, 4)

結果は「3+4i」になります。シンプルですね。

虚数単位を「j」にしたい場合は、第3引数に指定します。電気回路の計算では「j」表記が一般的なので、現場に合わせて使い分けてくださいね。

=COMPLEX(3, 4, "j")

結果は「3+4j」になります。

セル参照で実数部と虚数部を指定する

実務ではセルに入った数値を使う場面が多いですよ。A2に「5」、B2に「-2」が入っている場合は次のように書きます。

=COMPLEX(A2, B2)

結果は「5-2i」です。虚数部が負の数なら、自動的に「-」が付いた形で返してくれますね。

特殊なケースの動作

引数の値によっては、結果の表示が少し変わります。よく出てくるパターンをまとめました。

数式結果説明
=COMPLEX(0, 0)0実数部・虚数部ともに0なら「0」が返る
=COMPLEX(5, 0)5虚数部が0なら実数部だけが返る
=COMPLEX(0, 3)3i実数部が0なら虚数部だけが返る
=COMPLEX(0, 1)i虚数部が1なら係数の「1」は省略される
=COMPLEX(0, -1)-i虚数部が-1なら「-i」と表示される
=COMPLEX(-2, -7)-2-7i負の値もそのまま使える

虚数部が0や±1のときは表示が省略形になる点を覚えておくと、結果を見たときに混乱せずに済みますよ。

ARRAYFORMULAで複数行を一括変換する

実数列と虚数列が並んでいる表から、一気に複素数列を作りたい場面もありますよね。そんなときはARRAYFORMULA関数(数式を範囲全体に展開する関数)と組み合わせます。

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

A列の実数部とB列の虚数部から、対応する複素数をC列に一発で展開できますよ。複素数のテーブルを作るときに重宝しますね。

COMPLEX関数の実践例|IM系関数と組み合わせる

COMPLEX関数の真価は、IM系関数(複素数を扱う関数群)と組み合わせて発揮されます。代表的な使い方を順に見ていきましょう。

複素数の絶対値を求める(IMABS関数)

複素数の絶対値(原点からの距離)はIMABS関数で求められます。

=IMABS(COMPLEX(3, 4))

結果は「5」になります。3+4iの絶対値は √(3² + 4²) = √25 = 5 という計算ですね。

電気回路のインピーダンスから「実効的な抵抗値」を出したいときなどに使えますよ。

実数部と虚数部を取り出す(IMREAL関数・IMAGINARY関数)

逆に、複素数から実数部や虚数部だけを取り出したい場面もあります。

  • IMREAL関数: 複素数の実数係数を返す
  • IMAGINARY関数: 複素数の虚数係数を返す
=IMREAL(COMPLEX(3, 4))    → 3
=IMAGINARY(COMPLEX(3, 4)) → 4

COMPLEX関数で作った複素数をそのまま渡せるので、数式がシンプルにまとまりますね。計算途中の値を確認したいときにも便利ですよ。

複素数の四則演算(IMSUM・IMSUB・IMPRODUCT・IMDIV)

2つの複素数の足し算・引き算・掛け算・割り算は、それぞれ専用のIM系関数を使います。

演算関数数式例結果
足し算IMSUM=IMSUM(COMPLEX(3,4), COMPLEX(1,2))4+6i
引き算IMSUB=IMSUB(COMPLEX(3,4), COMPLEX(1,2))2+2i
掛け算IMPRODUCT=IMPRODUCT(COMPLEX(3,4), COMPLEX(1,2))-5+10i
割り算IMDIV=IMDIV(COMPLEX(3,4), COMPLEX(1,2))2.2+0.4i

複素数の掛け算や割り算は手計算だとなかなか面倒ですよね。IMPRODUCTやIMDIVに任せれば、ミスなく一瞬で結果が出ますよ。

共役複素数を作る(IMCONJUGATE関数)

複素数の虚数部の符号を反転させた数を「共役複素数」と呼びます。IMCONJUGATE関数(イマジナリーコンジュゲート関数)で取得できますよ。

=IMCONJUGATE(COMPLEX(3, 4))

結果は「3-4i」です。共役複素数は、複素数の割り算を手計算する際の定番テクニックでもあります。

COMPLEX関数の活用例|電気工学のインピーダンス計算

COMPLEX関数の現場での使いどころとして、電気回路のインピーダンス計算を見てみましょう。

抵抗R、コイルL、コンデンサCの直列回路では、それぞれの素子が次のようなインピーダンス(複素数)を持ちます。

素子インピーダンス
抵抗 RR + 0j
コイル L0 + jωL
コンデンサ C0 – j/(ωC)

ωは角周波数(2π × 周波数)を表します。これらをスプレッドシートで複素数として持ちたい場合、COMPLEX関数が活躍しますよ。

抵抗のインピーダンス:    =COMPLEX(R, 0, "j")
コイルのインピーダンス:  =COMPLEX(0, omega*L, "j")
コンデンサのインピーダンス: =COMPLEX(0, -1/(omega*C), "j")
合成インピーダンス:      =IMSUM(Z_R, Z_L, Z_C)
絶対値(インピーダンスの大きさ): =IMABS(Z_total)

電気工学では虚数単位に「j」を使うのが通例なので、第3引数で "j" を指定する点がポイントですね。COMPLEXで素子ごとの値を作り、IMSUMで合成、IMABSで大きさを出す。この流れがそのままシートに落とし込めますよ。

COMPLEX関数とExcelの互換性

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

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

ExcelのCOMPLEX関数は、Excel 2007以降のすべてのバージョンで利用できます。古いExcel 2003以前のファイルとやり取りする場合のみ、互換性に注意してくださいね。

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

#VALUE! エラー

実数または虚数の引数に、数値以外の値(文字列など)を指定したときに発生します。

=COMPLEX("a", 4)   → #VALUE!(実数部が文字列)
=COMPLEX(3, "b")   → #VALUE!(虚数部が文字列)

対処法は、セルの値が本当に数値かを確認することです。テキストとして取り込まれた数値の場合は、VALUE関数(文字列を数値に変換する関数)で数値化してから渡すと解決しますよ。

=COMPLEX(VALUE(A2), VALUE(B2))

#NUM! エラー

第3引数の虚数単位に、「i」「j」以外の文字を指定したときに発生します。大文字の「I」「J」もエラーになるので要注意です。

=COMPLEX(3, 4, "I")   → #NUM!(大文字は不可)
=COMPLEX(3, 4, "k")   → #NUM!(i・j以外は不可)

対処法はシンプルで、虚数単位は必ず小文字の "i" または "j" を指定することです。手で入力する場合は、CapsLockがオフになっているか確認してくださいね。

#N/A エラー

引数が不足している場合に発生します。COMPLEX関数は実数と虚数の2つが必須です。

=COMPLEX(3)   → #N/A(虚数部が指定されていない)

対処法は、必須引数の2つ(実数・虚数)を必ず指定することですよ。

通常の四則演算でエラーになる

COMPLEX関数の結果は文字列として返ります。そのため、通常の +- で計算しようとすると #VALUE! エラーになりますよ。

=COMPLEX(3,4) + COMPLEX(1,2)         → #VALUE!(文字列同士の加算はできない)
=IMSUM(COMPLEX(3,4), COMPLEX(1,2))   → 4+6i(IMSUMが正解)

複素数の計算には必ずIM系の専用関数を使う、と覚えておきましょう。

IFERRORでエラーを吸収する

入力値の信頼性が低い場合は、IFERROR関数(エラー時に代替値を返す関数)で包んでおくと安心ですよ。

=IFERROR(COMPLEX(A2, B2), "入力エラー")

エラー時にメッセージを返すようにしておけば、シート全体の集計が止まらずに済みますね。

複素数関連の関数一覧

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

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

COMPLEX関数は、これらIM系関数の「入力」を作る土台になります。まずCOMPLEXで複素数を作り、目的に応じた関数で計算する、という流れで使ってみてくださいね。

まとめ

GoogleスプレッドシートのCOMPLEX関数は、実数係数と虚数係数を指定して計算可能な複素数を作成する関数です。エンジニアリング系の計算で複素数を扱うときの入り口になってくれますよ。

  • 構文は =COMPLEX(実数, 虚数, [虚数単位])、虚数単位は省略可能
  • 虚数単位は小文字の「i」(数学用)または「j」(電気工学用)を指定する
  • 結果は文字列として返るので、計算には必ずIM系関数を使う
  • IMSUM・IMSUB・IMPRODUCT・IMDIV で四則演算ができる
  • IMABS で絶対値、IMREAL・IMAGINARY で実数部・虚数部を取り出せる
  • ARRAYFORMULAと組み合わせて複素数列を一括生成できる
  • ExcelのCOMPLEX関数と完全互換(Excel 2007以降)
  • 大文字の「I」「J」は #NUM! エラーになる点に注意

複素数の計算が必要になったら、まずCOMPLEX関数で「計算できる複素数」を準備するところから始めてみてくださいね。IM系関数と組み合わせれば、電気工学や信号処理の難しい計算もスプレッドシート上でスマートに片付きますよ。

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