電気回路の解析や信号処理、制御工学のレポートで「複素数の対数」を扱う場面に遭遇したことはありませんか。手計算では極形式に直してから実部と虚部を別々に求める必要があり、検算も含めてミスが起きやすい計算です。
ExcelのIMLN関数を使えば、複素数を文字列で渡すだけで自然対数(底がeの対数)をワンステップで求められます。この記事では、IMLN関数の構文から実務での活用シーン、エラー対処、IMEXP関数による検算方法までを実例付きで体系的に解説します。
IMLN関数とは?Excelで複素数の自然対数を求めるエンジニアリング関数
IMLN関数は、"x+yi" または "x+yj" の形式で指定した複素数の自然対数(natural logarithm)を返す関数です。読み方は「イマジナリー・ログ・ナチュラル」で、分類はエンジニアリング関数(複素数シリーズ)に属します。対応バージョンはExcel 2013以降・Microsoft 365・Excel for the webで、Googleスプレッドシートでも同じ構文で動作します。
数学的には、複素数 z = x + yi の自然対数は次の式で定義されます。
ln(z) = ln(|z|) + i × arg(z)
つまり「絶対値の対数」+「偏角 × i」で表され、IMLN関数はこの計算を内部で自動的にやってくれます。手計算でIMABS関数(絶対値)とIMARGUMENT関数(偏角)を組み合わせて分解して求める必要がなく、1ステップで結果が得られるのが最大のメリットです。
LN関数・IMEXP関数との関係
| 関数 | 対象 | 複素数への対応 |
|---|---|---|
LN | 実数のみ(正の数) | 不可(#NUM!になる) |
IMLN | 複素数(文字列) | 対応 |
IMEXP | IMLNの逆関数(e^z) | 対応 |
LN("3+4i") はエラーになりますが、IMLN("3+4i") は複素数の自然対数を正しく返します。また、IMEXP(IMLN("3+4i")) は元の値 "3+4i" に戻るので、IMLNの計算結果が正しいかを検算する用途に便利です。
IMLN関数の構文と引数
IMLN関数の構文はシンプルで、引数は1つだけです。
=IMLN(複素数)
| 引数 | 必須 | 説明 |
|---|---|---|
| 複素数 | 必須 | 自然対数を求めたい複素数を "x+yi" または "x+yj" 形式の文字列(またはその文字列が入ったセル参照)で指定 |
引数指定時の注意点
- 複素数はダブルクォーテーションで囲んだ文字列として渡す(例:
"3+4i")。セル参照の場合もセル内の値が文字列として扱われます - 虚数単位は
iとjのどちらでも使えますが、1つの数式内で混在させると#VALUE!エラーになります - 純実数(例:
"5")や純虚数(例:"2i")も渡せます - 実部・虚部の両方が0の複素数
"0"を渡すと#NUM!エラーになります(log(0) は定義されないため) - 戻り値も文字列型で返ります。数値として使いたい場合は後述のIMREAL・IMAGINARYで取り出します
IMLN関数の使い方【3パターン】
実務でよく使う3つのパターンを、順に見ていきましょう。
パターン1:関数内に直接複素数を指定する
もっともシンプルな使い方です。
=IMLN("3+4i")
→ 1.6094379124341+0.927295218001612i
複素数 3+4i の絶対値は 5、偏角は約 0.9273 ラジアンなので、ln(5)≈1.6094 が実部、偏角がそのまま虚部になります。ピタゴラスの定理で絶対値 √(3²+4²)=5、arctan(4/3)≈0.9273 と手計算しても一致します。
パターン2:COMPLEX関数と組み合わせてセル値から計算する
実部と虚部が別のセルに入っている場合は、COMPLEX関数で複素数を組み立ててからIMLN関数に渡すと便利です。
A1: 3 B1: 4
=IMLN(COMPLEX(A1,B1))
→ 1.6094379124341+0.927295218001612i
これなら実部・虚部を入力し直すだけで結果が更新されるので、パラメータを変えながら試算する用途にぴったりです。パラメータスイープや感度分析では、このパターンが基本になります。
パターン3:実部と虚部を分けて取り出す
計算結果から実部・虚部を個別に使いたい場合は、IMREAL関数とIMAGINARY関数を組み合わせます。
=IMREAL(IMLN("3+4i")) → 1.6094379124341
=IMAGINARY(IMLN("3+4i")) → 0.927295218001612
実部だけを使う(例: ゲインの dB 換算 = 20/ln(10) × IMREAL(IMLN(…)))場面や、虚部だけを使う(例: 位相の度数変換 = IMAGINARY(IMLN(…)) × 180/PI())場面で活躍します。
IMLN関数の実務での活用シーン
IMLN関数は理系の専門計算で活躍する関数ですが、具体的には次のような場面で使われます。
- 電気回路の周波数応答解析: 伝達関数 H(jω) の対数ゲインと位相を同時に求める
- 制御工学のボード線図作成: 複素平面上のゲインを dB(20log10)換算する前段の計算
- 信号処理: フーリエ変換後のスペクトル解析で対数表示を作る、ケプストラム分析の前処理
- 統計・機械学習: 複素数値を扱うモデルで対数尤度を計算する
- 物理シミュレーション: 減衰振動や波動の複素振幅から減衰率と位相を分離する
「手計算だと実部と虚部を別々に出す必要があってミスしやすい」という場面で、IMLN関数1つに置き換えると式がスッキリして検算も楽になります。
IMLN関数でよくあるエラーと対処法
| エラー | 原因 | 対処方法 |
|---|---|---|
#NUM! | "0" を指定した、または複素数の形式が不正(例: "1+2k") | ゼロを除外する、i または j のみを使う |
#VALUE! | 引数が複素数として解釈できない文字列、i と j の混在 | "x+yi" の形式になっているか確認する |
#NAME? | 関数名のスペルミス、または分析ツールアドインが無効(古いExcel) | 関数名を確認、必要に応じてアドインを有効化 |
特に #NUM! は、"0+0i" や空セル参照で発生しやすいので、IF関数で事前にチェックしておくと安全です。
=IF(OR(A1="0",A1="0+0i",A1=""),"対数は未定義",IMLN(A1))
また、外部から取り込んだデータで "3 + 4i"(スペース入り)になっているケースもエラーの原因になります。SUBSTITUTE関数でスペースを除去してから渡すと確実です。
=IMLN(SUBSTITUTE(A1," ",""))
IMLN関数に関するよくある質問
Q. Googleスプレッドシートでも使えますか?
はい。=IMLN("3+4i") と書けば同様に動作します。構文は完全に互換で、ExcelとGoogleスプレッドシートの間で数式をそのままコピペしても動きます。
Q. 戻り値の小数が長くて扱いにくいです。
戻り値は文字列なので、そのままではROUND関数で丸められません。IMREAL・IMAGINARYで実部・虚部を数値として取り出してからROUNDで丸め、必要なら再度COMPLEX関数で組み立て直します。
=COMPLEX(ROUND(IMREAL(IMLN("3+4i")),4), ROUND(IMAGINARY(IMLN("3+4i")),4))
→ 1.6094+0.9273i
Q. IMLN と IMEXP の関係を確認するにはどうすればいいですか?
=IMEXP(IMLN("3+4i")) を計算すると元の複素数 "3+4i" に戻ります(浮動小数点の誤差で小数点以下15桁目あたりで微妙にズレる場合があります)。IMEXP は e^z、IMLN は ln(z) で互いに逆関数の関係にあります。
Q. 底が10の対数や2の対数はどう求めますか?
底10なら IMLOG10 関数、底2なら IMLOG2 関数を使います。構文は IMLN と同じで引数は複素数1つです。自分で任意の底の対数を求める場合は、IMDIV(IMLN(z), IMLN(底)) のように換算できます。
IMLN関数と一緒に覚えておきたい関連関数
複素数シリーズは組み合わせて使うことが多いので、セットで覚えておくと一気に実務対応力が上がります。
| 関数 | 機能 | ||
|---|---|---|---|
COMPLEX | 実部と虚部から複素数(文字列)を作る | ||
IMABS | 複素数の絶対値(モジュラス) | z | を求める |
IMARGUMENT | 複素数の偏角(ラジアン)arg(z) を求める | ||
IMLOG10 | 複素数の常用対数(底10)を求める | ||
IMLOG2 | 複素数の底2の対数を求める | ||
IMEXP | 複素数の指数関数 e^z を求める(IMLNの逆関数) | ||
IMREAL | 複素数から実部を取り出す | ||
IMAGINARY | 複素数から虚部を取り出す | ||
IMSUM / IMSUB / IMPRODUCT / IMDIV | 複素数の四則演算 |
これらをつなげると、Excelの表だけで複素解析の基本操作をひと通りこなせます。
まとめ
IMLN関数は、複素数の自然対数を =IMLN(複素数) という1行で求められる便利な関数です。最後にポイントをおさらいしておきましょう。
- 引数は
"x+yi"または"x+yj"の文字列、もしくはセル参照で渡す LN関数では計算できない複素数の対数をワンステップで求められる- 戻り値は文字列型。IMREAL・IMAGINARYで実部・虚部を取り出して活用する
"0"を渡すと#NUM!エラー。IF関数で事前チェックしておくと安全- スペース混入や
i/jの混在も#VALUE!の原因になるので注意 - IMEXP(逆関数)と組み合わせて検算できる
電気回路・制御工学・信号処理などの専門計算で威力を発揮し、COMPLEX関数・IMEXP関数・IMREAL/IMAGINARY関数と組み合わせればExcelだけで複素解析の基本操作をひと通り完結させられます。「複素数の対数をいちいち手計算している」という方は、ぜひIMLN関数に置き換えて検算ミスと計算時間を減らしてみてください。
