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

スポンサーリンク

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

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

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

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

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

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

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

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

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

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

NOTE

虚数単位「i」は数学では「2乗すると-1になる数」として定義されます。電気工学では電流の記号「i」と区別するため、虚数単位に「j」を使う慣習があります。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の複素数を作ってみましょう。

01 data sample table
=COMPLEX(3, 4)
02 formula complex basic

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

03 result complex basic

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

=COMPLEX(3, 4, "j")

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

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

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

=COMPLEX(A2, B2)

結果は「5-2i」です。虚数部が負の数なら、自動的に「-」が付いた形で返してくれますね。マイナス符号の付け方を気にする必要はありません。

04 result complex cellref

特殊なケースの動作パターン

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

数式結果説明
=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負の値もそのまま使える
=COMPLEX(0, 1, "j")j虚数単位を「j」にしても同じルールが適用される

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

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

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

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

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

虚数単位を「j」にしたい場合は、第3引数も配列で渡せます。

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

電気工学系のシートで使うときは、この形がおすすめですよ。

COMPLEX関数とIM系関数の連携実例

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

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

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

=IMABS(COMPLEX(3, 4))

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

電気回路のインピーダンスから「実効的な抵抗値」を出したいときなどに使えますよ。複素ベクトルの大きさを知りたい場面ではIMABSが基本です。

05 result complex imabs

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

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

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

上の数式の結果はそれぞれ「3」と「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に任せれば、ミスなく一瞬で結果が出ますよ。

TIP

IMSUMとIMPRODUCTは3つ以上の複素数も一度に処理できます。例えば =IMSUM(z1, z2, z3, z4) のように、複素数を並べて渡せばまとめて合計できますよ。電気回路の素子を直列でつなげるときに便利ですね。

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

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

=IMCONJUGATE(COMPLEX(3, 4))

結果は「3-4i」です。共役複素数は、複素数の割り算を手計算する際の定番テクニックでもあります。物理学では波動の干渉計算などにも登場しますね。

偏角を求める(IMARGUMENT関数)

複素数の偏角(複素平面上の角度)はIMARGUMENT関数で取得できます。返り値の単位はラジアンです。

=IMARGUMENT(COMPLEX(1, 1))

結果は約「0.7853…」になります。これは π/4 ラジアン、つまり45度のことですね。

度数法(°)で見たい場合は DEGREES 関数と組み合わせます。

=DEGREES(IMARGUMENT(COMPLEX(1, 1)))

結果は「45」になります。複素数を極形式(大きさと角度)で扱いたいときに、IMABSとIMARGUMENTのセットで使うパターンが鉄板ですよ。

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

COMPLEX関数の現場での使いどころとして、電気回路のインピーダンス計算を見てみましょう。RLC直列回路(抵抗R・コイルL・コンデンサCを直列につないだ回路)が典型例です。

各素子のインピーダンス

それぞれの素子は次のような複素インピーダンスを持ちます。

素子インピーダンス説明
抵抗 RR + 0j周波数によらず一定
コイル L0 + jωL周波数が上がるほど大きくなる
コンデンサ C0 – j/(ωC)周波数が上がるほど小さくなる

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

シートでの計算手順

R、L、C、周波数fをセルに入力し、各素子のインピーダンスをCOMPLEXで作って合成する流れです。

角周波数 ω:           =2*PI()*f
抵抗のインピーダンス:    =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)
位相角(ラジアン):      =IMARGUMENT(Z_total)
位相角(度):            =DEGREES(IMARGUMENT(Z_total))

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

NOTE

周波数特性をグラフ化したい場合は、周波数fを列方向に並べて、各行で同じインピーダンス計算を実行します。ARRAYFORMULAは複素数の中間計算には使いにくいので、行ごとに通常の数式をコピーする運用がおすすめですよ。

信号処理での活用

フーリエ変換やデジタルフィルタ設計では、伝達関数を複素数で表現します。例えば、離散フィルタの周波数応答 H(e^jω) を計算したい場面を考えましょう。IMEXP(複素指数関数)と組み合わせて次のように書けます。

=IMPRODUCT(IMEXP(COMPLEX(0, -omega, "j")), b0)

複素指数関数を使った計算もCOMPLEX関数が入り口になります。エンジニアリング系の計算は、まずCOMPLEXで複素数を作るところからスタートしてくださいね。

COMPLEX関数とExcelの互換性

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

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

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

環境対応状況
Googleスプレッドシート標準で利用可能
Excel 2007以降(Windows / Mac)標準で利用可能
Excel for the web標準で利用可能
Excel 2003以前非対応(xls形式の互換性なし)

ARRAYFORMULAとの組み合わせはGoogleスプレッドシート特有の書き方です。Excelで同じことをしたい場合は、Microsoft 365のスピル機能や旧来の配列数式を使ってくださいね。

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

#VALUE! エラー

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

=COMPLEX("a", 4)
=COMPLEX(3, "b")

どちらも #VALUE! エラーになります。実数部・虚数部が文字列のままだとCOMPLEX関数では扱えません。

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

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

CSVやWebからコピーしたデータでよく発生するパターンです。VALUEで挟むクセを付けておくと安心ですね。

06 error value

#NUM! エラー

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

=COMPLEX(3, 4, "I")
=COMPLEX(3, 4, "k")

どちらも #NUM! エラーになります。

対処法はシンプルで、虚数単位は必ず小文字の "i" または "j" を指定することです。手で入力する場合は、CapsLockがオフになっているか確認してくださいね。セル参照で虚数単位を渡す場合は、参照先のセルの値も小文字かどうかをチェックしましょう。

#N/A エラー

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

=COMPLEX(3)

上の数式は #N/A エラーになります。虚数部が指定されていないためですね。

対処法は、必須引数の2つ(実数・虚数)を必ず指定することですよ。虚数部が0でも問題ないので、複素数化したい場合は =COMPLEX(3, 0) のように明示してください。

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

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

=COMPLEX(3,4) + COMPLEX(1,2)
=IMSUM(COMPLEX(3,4), COMPLEX(1,2))

上は #VALUE! エラー、下は「4+6i」が返ります。複素数の計算には必ずIM系の専用関数を使う、と覚えておきましょう。

四則演算に対応するIM系関数の早見表は次のとおりです。

通常の演算子対応するIM系関数
+IMSUM
-IMSUB
*IMPRODUCT
/IMDIV
^IMPOWER

IFERRORでエラーを吸収する

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

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

エラー時にメッセージを返すようにしておけば、シート全体の集計が止まらずに済みますね。実務シートでは、ユーザー入力に依存するセルにはIFERROR を被せておくのが鉄則です。

複素数関連の関数早見表

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

関数名機能主な用途
COMPLEX実数と虚数から複素数を作成する複素数の入力
IMABS複素数の絶対値を返すベクトルの大きさ
IMARGUMENT複素数の偏角(ラジアン)を返す位相角の取得
IMREAL複素数の実数係数を返す実数部の抽出
IMAGINARY複素数の虚数係数を返す虚数部の抽出
IMSUM複素数の合計(足し算)を返す直列インピーダンス
IMSUB複素数の差(引き算)を返す電位差の計算
IMPRODUCT複素数の積(掛け算)を返すフィルタ係数計算
IMDIV複素数の商(割り算)を返す並列インピーダンス
IMCONJUGATE共役複素数を返す割り算の有理化
IMPOWER複素数のべき乗を返す高次の係数計算
IMSQRT複素数の平方根を返す二次方程式の解
IMEXP複素数の指数関数 e^z を返すフーリエ変換
IMLN複素数の自然対数を返すボード線図
IMLOG10複素数の常用対数を返すデシベル計算
IMSIN / IMCOS / IMTAN複素数の三角関数を返す信号処理

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

まとめ

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

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

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

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