電気回路の解析や信号処理、制御工学のレポートで「複素数の対数」を扱う場面に遭遇したことはありませんか。手計算では極形式に直してから実部と虚部を別々に求める必要があり、検算も含めてミスが起きやすい計算ですよね。
ExcelのIMLN関数を使えば、複素数を文字列で渡すだけで自然対数(底がeの対数)をワンステップで求められます。この記事では、IMLN関数の構文から実務での活用シーン、IMLOG10・IMLOG2との使い分け、エラー対処、IMEXP関数による検算方法までを実例付きで体系的に解説します。
ExcelのIMLN関数とは?複素数の自然対数を求めるエンジニアリング関数
ExcelのIMLN関数は、"x+yi" または "x+yj" の形式で指定した複素数の自然対数(natural logarithm)を返す関数です。読み方は「イマジナリー・ログ・ナチュラル」で、分類はエンジニアリング関数(複素数シリーズ)に属します。対応バージョンはExcel 2010以降・Microsoft 365・Excel for the web・Excel for Macで、Googleスプレッドシートでも同じ構文で動作しますよ。
数学的には、複素数 z = x + yi の自然対数は次の式で定義されます。
ln(z) = ln(|z|) + i × arg(z)
つまり「絶対値の対数」+「偏角 × i」で表され、IMLN関数はこの計算を内部で自動的にやってくれます。手計算でIMABS関数(絶対値)とIMARGUMENT関数(偏角)を組み合わせる必要がなく、1ステップで結果が得られるのが最大のメリットですよ。
なお、IMLN が返す虚部は 主値(principal value)と呼ばれる範囲 -π < θ ≤ π のラジアン値です。対数関数は本来は無限多価ですが、Excelは主値分岐のみを返す仕様になっています。
LN関数・IMEXP関数との関係
| 関数 | 対象 | 複素数への対応 |
|---|---|---|
LN | 実数のみ(正の数) | 不可(#NUM!になる) |
IMLN | 複素数(文字列) | 対応 |
IMEXP | IMLNの逆関数(e^z) | 対応 |
LN("3+4i") はエラーになりますが、IMLN("3+4i") は複素数の自然対数を正しく返します。また、IMEXP(IMLN("3+4i")) は元の値 "3+4i" に戻るので、IMLNの計算結果が正しいかを検算する用途に便利ですよ。IMEXP関数とセットで覚えておくと、複素解析の往復計算が一気に楽になります。
ExcelのIMLN関数の構文と引数
IMLN関数の構文はシンプルで、引数は1つだけです。
=IMLN(複素数)
| 引数 | 必須 | 説明 |
|---|---|---|
| 複素数 | 必須 | 自然対数を求めたい複素数を "x+yi" または "x+yj" 形式の文字列、またはその文字列が入ったセル参照で指定 |
引数指定時の注意点
- 複素数はダブルクォーテーションで囲んだ文字列として渡します(例:
"3+4i")。セル参照の場合もセル内の値が文字列として扱われます - 虚数単位は
iとjのどちらでも使えますが、1つの数式内で混在させると#VALUE!エラーになります - 純実数(例:
"5")や純虚数(例:"2i")も渡せます - 実部・虚部の両方が0の複素数
"0"を渡すと#NUM!エラーになります(log(0) は定義されないため) - 戻り値も文字列型で返ります。数値として使いたい場合は後述のIMREAL・IMAGINARYで取り出します
Excelの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 換算)や、虚部だけを使う場面(例: 位相を度数に変換 = IMAGINARY(IMLN(...)) × 180/PI())で活躍しますよ。
IMLN・IMLOG10・IMLOG2の違いと使い分け
Excelには複素数の対数を求める関数が3種類あります。読者の方が一番悩むのは「結局どれを使えばいいのか」というポイントなので、ここで整理しておきましょう。
数学的な関係
3関数はすべて自然対数 IMLN を底変換しただけの兄弟関係です。
IMLOG10(z) = IMLN(z) / ln(10) ≈ IMLN(z) × 0.4342944819
IMLOG2(z) = IMLN(z) / ln(2) ≈ IMLN(z) × 1.4426950408
底変換公式 log_b(z) = ln(z) / ln(b) をそのまま反映しているだけなので、どれか1つを覚えればあとは換算で求められます。
計算結果の比較(z = 3+4i)
| 関数 | 数式 | 戻り値 |
|---|---|---|
IMLN("3+4i") | ln(3+4i) | 1.60944+0.92730i |
IMLOG10("3+4i") | log₁₀(3+4i) | 0.69897+0.40272i |
IMLOG2("3+4i") | log₂(3+4i) | 2.32193+1.33780i |
実部はそれぞれ ln(5)、log₁₀(5)、log₂(5) と一致し、虚部は同じ偏角 0.9273 ラジアンを底変換した値になります。
使い分けの実務指針
| 用途 | おすすめ関数 | 理由 |
|---|---|---|
| 微分方程式・連続系の解析・自然指数 e^z との往復 | IMLN | 自然対数が物理量と直接対応する |
| dBゲイン換算・周波数応答(Bode plot) | IMLOG10 | dB = 20×log₁₀ という慣習に直結 |
| 情報量・エントロピー・ビット表現 | IMLOG2 | 情報理論は底2が標準 |
| 任意の底 b の対数 | IMDIV(IMLN(z), IMLN(b)) | 底変換公式で計算 |
迷ったら IMLN を選んでおき、最後に dB やビットに換算するために IMLOG10/IMLOG2 を被せる流れがエンジニアリング計算では一番扱いやすいですよ。
任意の底 b を扱うサンプル
例えば底 5 の対数を求めたい場合は次の通りです。
=IMDIV(IMLN("3+4i"), IMLN("5"))
→ 1+0.576313159234032i
実部が 1 になるのは、log₅(5) = 1 だからですね。底自身を引数にすると 1 になるという対数の基本性質で、結果を簡単に検算できます。
ExcelのIMLN関数の実務での活用シーンとサンプル数式
IMLN関数は理系の専門計算で活躍する関数ですが、具体的には次のような場面で使われます。
- 電気回路の周波数応答解析: 伝達関数 H(jω) の対数ゲインと位相を同時に求める
- 制御工学のボード線図作成: 複素平面上のゲインを dB(20log10)換算する前段の計算
- 信号処理: フーリエ変換後のスペクトル解析で対数表示を作る、ケプストラム分析の前処理
- 統計・機械学習: 複素数値を扱うモデルで対数尤度を計算する
- 物理シミュレーション: 減衰振動や波動の複素振幅から減衰率と位相を分離する
ここでは特によく使う2つのパターンを、サンプル数式付きで紹介しますね。
活用例1: ボード線図のゲインと位相を一括算出する
伝達関数 H = "1+1i"(一次系の特定周波数応答を想定)について、ゲイン[dB] と位相[度] を求めてみましょう。
A1: 1+1i ← 伝達関数の複素数値
B1: =20*IMREAL(IMLOG10(A1)) → ゲイン[dB] = 3.0103
C1: =IMAGINARY(IMLN(A1))*180/PI() → 位相[度] = 45
|H| = √2 なので 20×log₁₀(√2) ≈ 3.01 dB、偏角は π/4 で 45 度と、教科書の値と一致します。複数の周波数点を縦に並べて B 列・C 列をオートフィルすれば、そのままボード線図用のデータ表が完成しますよ。
活用例2: 減衰振動から減衰係数と角周波数を逆算する
複素振幅 A(t) = A₀ × e^(-α t) × e^(iω t) を観測したとき、IMLN を使うと減衰率と位相をきれいに分離できます。
A1: 0.260123+0.260123i ← 観測した A(1)/A0(時刻 t=1)
=IMREAL(IMLN(A1)) → -1.0000 (-α × t)
=IMAGINARY(IMLN(A1)) → 0.7854 (ω × t = π/4)
時刻 t = 1 のときの観測値なので、α ≈ 1.0、ω ≈ 0.7854 rad/s(= π/4)と読み取れます。手計算では「絶対値を出して log を取り、別途偏角を出す」と二段階必要でしたが、IMLN なら1つの式で済みますよね。
活用例3: 離散時間システムの安定性を判定する
離散時間システムの極 p が単位円内にあるかどうか(安定条件)は、Re(ln(p)) < 0 で判定できます。
A1: 0.5+0.3i ← 極の位置
=IF(IMREAL(IMLN(A1))<0,"安定","不安定") → 安定(|p|=0.583<1のため)
IMABS で絶対値を出して 1 と比較するだけでも判定はできますが、対数空間に揃えると、複数の極の減衰特性をまとめて評価したいときに便利になります。
ExcelのIMLN関数でよくあるエラーと対処法
| エラー | 原因 | 対処方法 |
|---|---|---|
#NUM! | "0" や "0+0i" を指定した、または複素数の形式が不正(例: "1+2k") | ゼロを除外する、i または j のみを使う |
#VALUE! | 引数が複素数として解釈できない文字列、i と j の混在、スペース混入、全角文字 | "x+yi" の形式になっているか確認する |
#NAME? | 関数名のスペルミス、または分析ツールアドインが無効(Excel 2007 のみ) | 関数名を確認、必要に応じてアドインを有効化 |
特に #NUM! は、"0+0i" や空セル参照で発生しやすいので、IF関数で事前にチェックしておくと安全です。
=IF(OR(A1="0",A1="0+0i",A1=""),"対数は未定義",IMLN(A1))
また、外部から取り込んだデータで "3 + 4i"(スペース入り)になっているケースもエラーの原因になります。SUBSTITUTE関数でスペースを除去してから渡すと確実ですよ。
=IMLN(SUBSTITUTE(A1," ",""))
全角の i や全角プラス + が紛れ込んでいるパターンも要注意で、業務システムからのコピー貼り付けで混入することがあります。SUBSTITUTE を多段でかけるか、ASC 関数で半角化してから渡してください。
Excelの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つです。任意の底 b で求めたい場合は、IMDIV(IMLN(z), IMLN(b)) のように底変換公式で計算してくださいね。
Q. 配列で一気に複数の複素数を処理したいのですが?
Microsoft 365 や Excel 2024 ならスピル機能で配列処理ができます。=IMLN(A2:A10) と書けば、A2:A10 のすべての複素数に IMLN を適用した結果が縦方向に展開されます。古いバージョンの Excel では、各行に同じ数式をオートフィルしてください。新しい Excel なら =MAP(A2:A10, LAMBDA(z, IMLN(z))) のように LAMBDA+MAP で書く方法もありますよ。
Q. ln(-1) を計算したらどうなりますか?
=IMLN("-1") は 0+3.14159265358979i(虚部は π)を返します。これはオイラーの等式 e^(iπ) = -1 から導かれる ln(-1) = iπ という関係を反映していて、複素数の対数ならではの結果です。実数の世界では「マイナスの対数は定義されない」とされる値が、複素数の世界では問題なく計算できるのが面白いポイントですよね。
Q. 戻り値の虚部が範囲外(例: 2π を超える値)になることはありますか?
ありません。IMLN は 主値(-π < θ ≤ π)の範囲でしか返さない仕様です。多価関数としての他の分岐値(θ + 2πk)が必要な場合は、自分で IMAGINARY(IMLN(z)) + 2PI()k のように加算してください。
ExcelのIMLN関数と一緒に覚えておきたい関連関数
複素数シリーズは組み合わせて使うことが多いので、セットで覚えておくと一気に実務対応力が上がります。
| 関数 | 機能 | ||
|---|---|---|---|
COMPLEX | 実部と虚部から複素数(文字列)を作る | ||
IMABS | 複素数の絶対値(モジュラス) | z | を求める |
IMARGUMENT | 複素数の偏角(ラジアン)arg(z) を求める | ||
IMLOG10 | 複素数の常用対数(底10)を求める | ||
IMLOG2 | 複素数の底2の対数を求める | ||
IMEXP | 複素数の指数関数 e^z を求める(IMLNの逆関数) | ||
IMREAL | 複素数から実部を取り出す | ||
IMAGINARY | 複素数から虚部を取り出す | ||
IMSUM / IMSUB / IMPRODUCT / IMDIV | 複素数の四則演算 |
これらをつなげると、Excelの表だけで複素解析の基本操作をひと通りこなせます。特に COMPLEX → IMLN → IMREAL/IMAGINARY の流れは王道パターンとして頻出ですよ。「セル値から複素数を作って対数を取り、実部・虚部に分解する」という三段構えで覚えておきましょう。
まとめ
ExcelのIMLN関数は、複素数の自然対数を =IMLN(複素数) という1行で求められる便利な関数です。最後にポイントをおさらいしておきましょう。
- 引数は
"x+yi"または"x+yj"の文字列、もしくはセル参照で渡す LN関数では計算できない複素数の対数をワンステップで求められる- 戻り値は文字列型。IMREAL・IMAGINARYで実部・虚部を取り出して活用する
- 虚部は 主値(-π < θ ≤ π)の範囲で返る
- IMLOG10/IMLOG2 は IMLN の底変換版。dB はIMLOG10、情報量はIMLOG2、解析はIMLNで使い分ける
"0"を渡すと#NUM!エラー。IF関数で事前チェックしておくと安全- スペース混入や
i/jの混在も#VALUE!の原因になるので注意 - IMEXP(逆関数)と組み合わせて検算できる
電気回路・制御工学・信号処理などの専門計算で威力を発揮する関数です。COMPLEX関数・IMEXP関数・IMREAL/IMAGINARY関数と組み合わせれば、Excelだけで複素解析の基本操作をひと通り完結させられますよ。「複素数の対数をいちいち手計算している」という方は、ぜひIMLN関数に置き換えて検算ミスと計算時間を減らしてみてくださいね。