スプレッドシートのIMLOG10関数の使い方|複素数の常用対数を一発計算

スポンサーリンク

「スプレッドシートで複素数の常用対数を出したいけど、毎回IMLNをln(10)で割る式を書くのが面倒…」

スプレッドシートで複素数を扱う場面では、log₁₀(a+bi) の値が必要になることがありますよね。デシベル計算やpH解析、地震マグニチュードのように「桁数」を直感的に扱う分野では、自然対数より10を底とする常用対数のほうがしっくりきます。でも、毎回 IMLN とLNを組み合わせて分母にln(10)を入れるのは、数式が読みづらくなりがちです。

そんなときに頼りになるのがGoogleスプレッドシートのIMLOG10関数です。複素数を1つ渡すだけで「その複素数の10を底とする対数」を一発で返してくれますよ。デシベルやpHの数式が、ぐっとすっきりしますね。

ExcelのIMLOG10関数と完全互換なので、Excelファイルとやり取りする現場でも安心です。COMPLEX関数で作った複素数や、IMLN関数IMLOG2関数と組み合わせた式からも、そのまま渡せますよ。

この記事では、スプレッドシートのIMLOG10関数の基本構文と実務での活用例を解説します。IMLNとの関係や、主値の範囲、よくあるエラーと対処法もしっかり紹介していきますね。

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

GoogleスプレッドシートのIMLOG10関数は、複素数の10を底とする対数(log₁₀(z))を返す関数です。エンジニアリング関数(電気・物理・工学系の計算で使う関数群)のひとつに分類されますよ。

読み方は「イマジナリー・ログ・テン」または「アイエム・ログ・テン」です。英語の「imaginary(虚数の)」と「logarithm base 10(10を底とする対数)」を組み合わせた名前ですね。複素数「a+bi」の常用対数を、複素数として返してくれるのが役割です。

複素数の常用対数は、自然対数を ln(10) で割り算した形で定義できます。具体的な式は次のとおりですよ。

log10(a+bi) = ln(a+bi) / ln(10)
           = log10(|a+bi|) + i × arg(a+bi) / ln(10)
           = log10(√(a²+b²)) + i × atan2(b, a) / ln(10)

実部は「絶対値の常用対数」、虚部は「偏角を ln(10) で割った値」となり、結果も複素数で返るのが特徴ですね。ln(10) は約2.3026なので、IMLN の結果に対しておよそ0.4343倍したものに相当します。

複素数(z)IMLOG10(z)の結果内部計算
1+0i0log10(1) = 0
10+0i1+0ilog10(10) = 1
100+0i2+0ilog10(100) = 2
1000+0i3+0ilog10(1000) = 3
-1+0i0+1.3644ilog10(1) + i×π/ln(10)
0+1i0+0.6822ilog10(1) + i×π/(2ln(10))
1+1i0.1505+0.6822ilog10(√2) + i×(π/4)/ln(10)

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

複素数の常用対数は、デシベル計算・pH/化学濃度の解析・地震マグニチュード・周波数応答のボード線図・天文学の等級など、「桁数」のスケールが必要な場面で活躍します。「10倍するごとに1ずつ増える」という直感的なスケールが欲しい場面で、欠かせない基礎パーツですね。

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

基本構文

=IMLOG10(複素数)

引数は1つで、常用対数を取りたい複素数を渡す形ですよ。

引数の詳細

引数必須/任意説明
複素数(inumber)必須常用対数を計算する複素数。文字列またはセル参照で指定する

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

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

TIP

IMLOG10が返す虚部の範囲は -π/ln(10) < θ ≤ π/ln(10)、おおよそ -1.3644 < θ ≤ 1.3644 です。これは IMLN関数 の主値(-π〜π)を ln(10) で割った値に相当しますよ。覚えておきましょう。

引数に正の実数だけを渡せば、通常のLOG10関数と同じ結果になります。「IMLOG10(“1000”)」も「LOG10(1000)」もどちらも3ですね。違いは戻り値が複素数文字列になるか実数になるかだけですよ。

IMLOG10関数の基本的な使い方

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

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

=IMLOG10("1+1i")

結果は「0.150514997831991+0.682188176920921i」になります。実部はlog₁₀(√2)≈0.1505、虚部は(π/4)/ln(10)≈0.6822ですね。

正の実部だけの複素数を渡すと、通常のLOG10関数と同じ結果になります。

=IMLOG10("1000")
=IMLOG10("1000+0i")

どちらも結果は約「3+0i」、つまり log₁₀(1000) = 3 ですよ。実数の世界の常用対数と一致しますね。

純虚数を渡すと、結果は実部0で虚部が±π/(2ln(10))になります。

=IMLOG10("0+1i")
=IMLOG10("0-1i")

前者は「0+0.6822…i」、後者は「0-0.6822…i」になりますよ。複素平面の縦軸に乗っている純虚数の偏角が、±π/(2ln(10))として返ってきますね。

負の実数の対数を計算する

実数の世界では「負の数の対数は計算できない」とされますよね。複素数まで広げると、IMLOG10はちゃんと値を返してくれます。

=IMLOG10("-1")

結果は「0+1.36437635384184i」になりますよ。実部は0、虚部はπ/ln(10)となります。これは「-1 = 1 × e^(iπ)」を10底に直したものですね。LOG10(-1) はエラーになりますが、IMLOG10 なら計算できる点が便利なところです。

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

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

=IMLOG10(A2)

結果は「0.1505…+0.6822…i」になります。セル参照を渡すだけで、入っている複素数の常用対数を取り出せますよ。

COMPLEX関数と組み合わせる

COMPLEX関数で作った複素数を、その場でIMLOG10に渡すこともできます。

=IMLOG10(COMPLEX(1, 1))

結果は「0.1505…+0.6822…i」、つまり「IMLOG10(“1+1i”)」と同じですね。COMPLEX(1, 1)が内部で「1+1i」を作り、IMLOG10関数がその常用対数を返してくれます。

数値で実部と虚部を渡したいときに便利な書き方ですよ。

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

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

=ARRAYFORMULA(IMLOG10(A2:A10))

A列の複素数を順番に常用対数に変換して、対応する結果をB列に一発で展開できますよ。デシベル計算やpH解析を一括処理するときに重宝しますね。

IMLOG10関数の実務活用例

活用例1: デシベル(dB)計算

電気・音響工学では、信号の比をデシベルで表しますよね。電圧比なら 20×log₁₀(V₁/V₀)、電力比なら 10×log₁₀(P₁/P₀) という公式です。複素フェーザの比をそのままデシベル化したい場面で IMLOG10 が活躍しますよ。

A列に複素電圧の比(V₁/V₀)が並んでいるとしましょう。

B2: =IMLOG10(A2)            ← 複素常用対数
C2: =IMREAL(B2)             ← log10(|V1/V0|)
D2: =20*C2                  ← 電圧ゲイン(dB)

D列がデシベルでの利得です。位相情報も保持したまま大きさをデシベル化できるので、ボード線図の数値テーブルを作るときに便利ですね。

活用例2: ボード線図のデータを作る

周波数応答 H(jω) = R + jX を、周波数ごとにゲインと位相に分解する作業もすっきり書けますよ。

A2: =COMPLEX(R, X)              ← 周波数 ω での H(jω)
B2: =IMLOG10(A2)                ← 複素常用対数
C2: =20*IMREAL(B2)              ← ゲイン(dB)
D2: =DEGREES(IMARGUMENT(A2))    ← 位相(度)

C列がボード線図のゲイン軸、D列が位相軸の値になりますね。IMLOG10 を1つ挟むだけで、周波数応答からボード線図用のデータが整いますよ。

活用例3: IMLN関数との関係を確認する

IMLOG10関数は、内部的に「IMLN(z) ÷ ln(10)」と等価です。実際にスプレッドシートで確認してみましょう。

A2: =COMPLEX(1, 1)              ← z = 1+i
B2: =IMLOG10(A2)                ← 直接計算
C2: =IMDIV(IMLN(A2), COMPLEX(LN(10), 0))   ← IMLNから計算

B2とC2の値は一致して「0.1505…+0.6822…i」になりますよ。IMLOG10は IMLN の結果を ln(10) で割った形と同じだと、数式レベルで確認できますね。底の変換公式を理解する勉強用にも使える書き方です。

活用例4: pH・化学濃度の桁数表示

化学では水素イオン濃度 [H⁺] から pH = -log₁₀([H⁺]) を求めますよね。シミュレーションで濃度を複素数として扱うケース(複素誘電率の解析など)でも、IMLOG10 で一気に処理できますよ。

A2: =COMPLEX(1E-7, 0)           ← [H+] = 1.0e-7
B2: =IMLOG10(A2)                ← 複素常用対数
C2: =-IMREAL(B2)                ← pH = -log10(|[H+]|)

C2は7になります。中性のpHですね。実数だけならLOG10で十分ですが、複素誘電率や交流インピーダンスを介した解析パイプラインに乗せるときは、IMLOG10 で型を揃えると見通しが良くなりますよ。

活用例5: 地震マグニチュードや天文等級の桁スケール

地震マグニチュード(M = log₁₀(A) + 補正項)や、星の等級(m = -2.5×log₁₀(F))のように、対数スケールで「桁」を扱う指標は身近にたくさんあります。観測値の補正に複素数振幅が混じる解析でも、IMLOG10 がそのまま使えますよ。

A2: =COMPLEX(1.0E5, 0)          ← 観測振幅 A
B2: =IMLOG10(A2)                ← 桁スケール
C2: =IMREAL(B2)                 ← log10(A) の実部

A2が10万なら C2 は5になります。データ量が10倍になるごとに1ずつ増えるスケールが、シート上で直感的に確認できますね。複素数を扱わない単純なケースなら =LOG10(A2) でも構いません。複素数を含む解析パイプラインの中では、IMLOG10 で型を揃えるとシートが整いますよ。

IMLOG10関数とCOMPLEX関数群の関係

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

関数入力出力役割
COMPLEX実数 a, b複素数 a+bi複素数を作る
IMREAL複素数 a+bi実数 a実部を取り出す
IMAGINARY複素数 a+bi実数 b虚部を取り出す
IMABS複素数 a+bi実数 √(a²+b²)大きさを取り出す
IMARGUMENT複素数 a+bi実数(ラジアン)偏角を取り出す
IMEXP複素数 z複素数 e^z指数関数
IMLN複素数 z複素数 ln(z)自然対数
IMLOG2複素数 z複素数 log₂(z)2を底とする対数
IMLOG10複素数 z複素数 log₁₀(z)10を底とする対数
IMPOWER複素数 z, 実数 n複素数 z^nべき乗

IMLOG10関数とIMLN関数は「底の変換公式」でつながっています。「IMLOG10(z) = IMLN(z) / ln(10)」が数学的な関係ですよ。同様に IMLOG2 は IMLN(z) / ln(2) と等価ですね。

たとえば定義式どおりに log₁₀(a+bi) を手動で組み立てると次のようになります。

=COMPLEX(LOG10(SQRT(IMREAL(A2)^2+IMAGINARY(A2)^2)), ATAN2(IMREAL(A2), IMAGINARY(A2))/LN(10))

これはIMLOG10と同じ結果になりますが、絶対値と偏角を毎回手書きする必要がありますよね。IMLOG10を使えば1関数で済むので、数式が読みやすくなります。

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

#NUM! エラー(複素数の形式エラー、または z=0)

複素数として認識できない文字列を渡したときや、ゼロを渡したときに発生します。

=IMLOG10("1+1I")     → #NUM!(大文字のIは不可)
=IMLOG10("1+1k")     → #NUM!(i・j以外は不可)
=IMLOG10("1 + 1i")   → #NUM!(途中の空白は不可)
=IMLOG10("0")        → #NUM!(log10(0)は定義されない)
=IMLOG10("0+0i")     → #NUM!(同上)

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

2つ目は、ゼロを渡さないことです。実数の世界でlog₁₀(0)が定義されないのと同じく、複素数の世界でも0の対数は計算できません。入力データに0が混じる可能性がある場合は、後述のIFERROR対策を入れておきましょう。

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

引数に論理値やエラー値を渡したときに発生します。

=IMLOG10(TRUE)       → #VALUE!(論理値は不可)
=IMLOG10(#N/A)       → #VALUE!(エラー値は不可)

対処法は、正しい複素数文字列または数値・セル参照を渡すことです。入力元のセルがエラーになっている場合は、そのエラーを先に解消する必要がありますよ。

主値の範囲を超えた角度を期待してしまう問題

IMLOG10が返す虚部は -π/ln(10) < θ ≤ π/ln(10)、つまり約 -1.3644 < θ ≤ 1.3644 の主値だけです。これは IMLN関数 の主値 (-π, π] を ln(10) で割った値ですね。

=IMLOG10("0-1i")     → 0-0.6822i(-π/(2ln10))

この複素数 -i は「3π/2 ラジアン回転した点」とも見なせますが、IMLOG10 はそのうち主値(-π/2 を ln(10) で割った値)を返します。連続的に偏角を追跡したい場面では、後段で「アンラップ処理」を実装する必要がある点に注意してくださいね。

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

入力データの信頼性が低い場合や、ゼロが混じる可能性がある場合に備えておきたいですよね。そんなときはIFERROR関数(エラー時に代替値を返す関数)で包んでおきましょう。シート全体の集計が止まらず安心です。

=IFERROR(IMLOG10(A2), "計算不可")

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

IMLOG10関数とExcelの互換性

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

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

ExcelのIMLOG10関数は、Excel 2007以降のすべてのバージョンで利用できます。Microsoft 365、Excel for Mac、Excel Online でも同じように使えますよ。古いExcelファイルとの互換性も心配いりません。

複素数関連の関数一覧

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

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

IMLOG10関数は、これら複素数関数群の中で「常用対数」を担う基本関数ですね。COMPLEXで複素数を作り、IMLOG10で常用対数値を求めるのが基本の流れです。最後はIMREAL・IMAGINARYで実部と虚部に分けて可視化しましょう。デシベル計算やボード線図、pH解析のシートを軽快に組み立てられますよ。

まとめ

GoogleスプレッドシートのIMLOG10関数は、複素数の10を底とする対数(log₁₀(z))を返す関数です。デシベル計算・ボード線図・pH解析・地震マグニチュード・天文等級など、「10倍ごとに1増える」直感的な桁スケールが欲しい場面で欠かせない関数ですよ。

  • 構文は =IMLOG10(複素数) で複素数を1つ渡すだけ
  • 「log10(a+bi) = ln(a+bi) / ln(10)」が内部計算式
  • 実部は絶対値の常用対数、虚部は偏角を ln(10) で割った値になる
  • 「a+bi」と「a+bj」のどちらの表記もそのまま受け付ける
  • 虚部の主値は -π/ln(10) < θ ≤ π/ln(10)(約 -1.3644 〜 1.3644)
  • 正の実部だけの複素数を渡すと通常のLOG10と同じ結果になる
  • 「log10(-1)」も計算でき、結果は 0+(π/ln(10))i になる
  • COMPLEX関数の結果やセル参照、複素数演算の結果も渡せる
  • ARRAYFORMULAで複数の複素数を一括処理できる
  • IMLN関数とは「IMLOG10(z) = IMLN(z) / ln(10)」の関係
  • z=0 を渡すと #NUM! エラー(log10(0)は定義されない)
  • 大文字の「I」「J」やi・j以外の単位は #NUM! エラー
  • 論理値やエラー値を渡すと #VALUE! エラー
  • ExcelのIMLOG10関数と完全互換(Excel 2007以降)

複素数の常用対数が必要になったら、IMLOG10関数の出番ですよ。COMPLEX関数で複素数を作り、IMLOG10で対数を取りましょう。最後にIMREAL・IMAGINARYで実部と虚部に分解すれば、デシベル計算やボード線図、pH解析のシートを軽快に組み立てられますね。

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