スプレッドシートのIMCSC関数で、複素数の余割(コセカント)を求めたくなったことはありませんか。IMSINで正弦を出してから1で割る、という回り道をしている人もいるかもしれません。
しかもスプレッドシートの複素数は、結果が「a+bi」形式の文字列で返ってきます。そのまま足し算して #VALUE! が出たり、入力の書き方ひとつで #NUM! になったり。公式ヘルプを見ても、どの入力でどのエラーになるかまでは載っていません。
この記事では、複素数の余割を1関数で返すIMCSC関数の使い方を解説します。基本の書き方から、結果を計算に使うときのコツ、エラーになる入力の早見表まで順番に見ていきましょう。
IMCSC関数とは?スプレッドシートで複素数の余割(1/sin)を返す関数
IMCSC関数は、Googleスプレッドシートで複素数の余割(コセカント)を求める関数です。名前は「IM(Imaginary=虚数)」と「CSC(Cosecant=余割)」の組み合わせ。
読み方は「アイエム・コセカント」と覚えておけばよいでしょう。解説によっては「コサイカント」と表記されることもあります。
余割は正弦(sin)の逆数のことで、定義は次のとおりです。
csc(z) = 1 / sin(z)
つまりIMCSCは、IMSIN関数で求めた正弦の逆数を1回で返してくれる関数。複素数 z を渡すと、1/sin(z) の値が「a+bi」の形で返ってきます。
見た目は数値のようですが、戻り値の中身は文字列です。足し算などでつまずきやすいポイントなので、後半でくわしく見ていきましょう。
逆数系の三角関数は、IMCSCのほかにもあります。名前が似ていて混同しやすいので、定義を並べておきましょう。
| 関数 | 求める値 | 定義 |
|---|---|---|
| IMCSC | 余割(コセカント) | 1 / sin(z) |
| IMSEC | 正割(セカント) | 1 / cos(z) |
| IMCOT | 余接(コタンジェント) | 1 / tan(z) |
| IMCSCH | 双曲線余割 | 1 / sinh(z) |
IMSECとIMCOS関数の関係は、IMCSCとIMSINの関係と同じ形です。とくにIMCSCHは末尾にHが付くだけで、sinhの逆数を返す別の関数になります。
うっかり取り違えると、結果はまったく違う値になります。数式を入れたら、関数名を一度見直しておくと安心ですね。
IMCSC関数の書き方と基本の使い方
構文と引数
=IMCSC(複素数)
引数は「複素数」の1つだけ。「”1+1i”」のような文字列のほか、セル参照やCOMPLEX関数の結果、ふつうの数値も渡せます。
虚数単位には小文字の i か j を使います。実数部分はラジアン(弧度法)として扱われるため、度で考えたいときは変換が必要です。
文字列で複素数を直接指定する
いちばん手軽なのは、複素数を文字列で直接書く方法。全体をダブルクォーテーションで囲むのを忘れないようにしましょう。
=IMCSC("1+1i")
=IMCSC("2-2i")
1つ目の結果は、およそ「0.621518017170428-0.303931001628426i」です。「2-2i」を渡した2つ目は、およそ「0.244687-0.107955i」になります。
この記事の値は、計算上の値を15桁程度に丸めて載せています。画面の表示と末尾の桁が少し違って見えても、上位の桁がそろっていれば気にしなくて大丈夫ですよ。
なお「”1 + 1i”」のように半角スペースが入っていても、スペースなしと同じ値が返ります。一方で全角スペースはエラーになるため、後半の早見表で整理しています。
セル参照・COMPLEX関数で指定する
実務では、複素数をセルに入れておいて参照する書き方が便利です。A2に「1+2i」が入っているなら、次のように書きます。
=IMCSC(A2)
=IMCSC(COMPLEX(4, 3))
=IMCSC(A2) の結果は、およそ「0.228375065599687-0.141363021612408i」。セルの中身を書き換えるだけで、結果も自動で更新されますね。
2つ目は、実部4・虚部3から「4+3i」を組み立てて渡す書き方です。結果はおよそ「-0.0754898329158637+0.0648774713706355i」になります。
実部と虚部を別の列で管理しているなら、COMPLEX(B2, C2) のように渡すと扱いやすいでしょう。COMPLEX関数のくわしい使い方は、スプレッドシートのCOMPLEX関数の解説にまとめています。
実数だけを渡したとき
虚部のない実数を渡した場合は、ふつうの三角関数で求める余割と同じ値です。Google公式ヘルプにも、=IMCSC(4) のように数値を渡す例が載っています。
=IMCSC("1")
=IMCSC("1i")
「1」を渡した結果は 1/sin(1) で、およそ 1.18839510577812 です。虚部が0なので、実数の余割をそのまま求めたことになります。
逆に実部が0の「1i」を渡すと、結果は実部0・虚部およそ -0.850918128239322 の純虚数。csc(bi) = -i/sinh(b) という関係から、-i/sinh(1) の値が返るというわけ。
IMCSC関数の結果を計算に使うときの注意
戻り値は文字列なので + で足すと #VALUE! になる
IMCSCの戻り値は、数値ではなく「a+bi」形式の文字列。そのため、結果に + で数値を足そうとしても計算できません。
=IMCSC("1+1i")+1 → #VALUE!
複素数どうしを足すならIMSUM、掛けるならIMPRODUCTのように、IM系の演算関数を使うのが基本です。ふつうの数値として扱いたいときは、次の方法で実部と虚部を取り出しましょう。
IMREAL・IMAGINARYで実部と虚部を取り出す
IMREAL関数は実部を、IMAGINARY関数は虚部を数値で返します。IMCSCの結果をいったん別のセルに置くと、数式が読みやすくなります。
A2: 1+1i
B2: =IMCSC(A2)
C2: =IMREAL(B2)
D2: =IMAGINARY(B2)
C2はおよそ 0.6215、D2はおよそ -0.3039 です。どちらも数値なので、=C2*2 のような計算やグラフ作成にそのまま使えますよ。
複素数の大きさ(絶対値)を知りたいときは、=IMABS(B2) のようにIMABS関数を使う方法もあります。
IMDIV(1, IMSIN()) で検算する
計算が合っているか不安なときは、定義 csc(z) = 1/sin(z) をそのまま数式にして見比べてみましょう。IMDIVは、複素数の割り算をする関数です。
=IMCSC(A2)
=IMDIV(1, IMSIN(A2))
2つの結果の上位の桁がそろっていれば、IMCSCが定義どおりに計算できていると確かめられます。計算の経路が違うので、末尾の桁まで同じになるとは限らない点だけ覚えておきましょう。
IMCSC関数でエラーになる入力と対処法
エラーになる入力の早見表
IMCSCに渡す入力と結果の対応を、種類ごとにまとめました。入力の読み取り方は、IM系の多くの関数に共通する規則です。
| 入力の種類 | 数式の例 | 結果 |
|---|---|---|
| 途中に半角スペース | =IMCSC("1 + 1i") | スペースなしと同じ値 |
| 前後に半角スペース | =IMCSC(" 1+1i ") | スペースなしと同じ値 |
| 全角スペース | =IMCSC("1 + 1i") | #NUM! |
| 大文字の I / J | =IMCSC("1+1I") | #NUM! |
| 全角の文字 | =IMCSC("1+1i") | #NUM! |
| i・j 以外の文字 | =IMCSC("1+1k") | #NUM! |
| 複素数でない文字列 | =IMCSC("hello") | #NUM! |
| 論理値 | =IMCSC(TRUE) | #NUM! |
| エラー値 | =IMCSC(#N/A) | #N/A がそのまま返る |
| 戻り値に数値を足す | =IMCSC("1+1i")+1 | #VALUE! |
#NUM! は「複素数として読み取れない」というサイン。ネットやPDFからコピーした値は全角文字が混じりやすいので、まず半角かどうかを見直しましょう。
大文字の I や J が原因なら、LOWER関数で小文字に変換してから渡す方法もあります。
=IMCSC(LOWER(A2))
#N/A は、IMCSC自体ではなく参照先のセルがすでにエラーになっている状態です。#VALUE! などに変わらず元のエラーが返るので、参照元のセルを直せば解消します。
Excelの公式説明と違う点
ExcelにもIMCSC関数があり、Microsoftの公式ヘルプで説明されています。ただ、論理値を渡したときの結果は、スプレッドシートの動きと一致しません。
Excel版の説明では、論理値を渡すと #VALUE! になるとされています。一方スプレッドシートでは、=IMCSC(TRUE) は #NUM! を返します。
Excel向けの解説を参考に数式を組むと、ここで食い違いが起きがち。エラーの種類で処理を分けるなら、スプレッドシートでは #NUM! になる前提で考えましょう。
IFERRORでエラーをまとめて処理する
形式がそろっていないデータを扱うなら、IFERROR関数で包んでおくと表が見やすくなります。
=IFERROR(IMCSC(A2), "入力を確認")
ただしIFERRORは、#NUM! も #N/A もまとめて置き換えてしまいます。原因を探したいときは、いったんIFERRORを外して元のエラーを確認するのがおすすめです。
よくある質問
IMCSCとIMCSCHの違いは?
IMCSCは正弦 sin の逆数、IMCSCHは双曲線正弦 sinh の逆数を返します。関数名は1文字違うだけですが、計算する内容は別物。双曲線余割を求めたい場合は、IMCSCH関数の使い方を参照してください。
Excelでも使える?
Excelにも同じ名前のIMCSC関数があり、=IMCSC(複素数) という同じ書き方で使えます。ただし前の節のとおり、論理値を渡したときのエラーの説明は異なるので注意しましょう。
Excelでの使い方は、ExcelのIMCSC関数の解説にまとめています。
虚数単位にjを使える?
使えますよ。「”1+1j”」のように小文字の j で書けば、i と同じく複素数として読み取られます。大文字の J は #NUM! になるため、入力が大文字になっていないか確認してみてください。
角度を度で渡すには?
RADIANS関数で度をラジアンに変換してから渡します。たとえば30°の余割を求める数式はこちら。
=IMCSC(RADIANS(30))
結果は 1/sin(30°) で、およそ2になります。浮動小数点で計算するため、末尾にごくわずかな誤差が出る場合もあるでしょう。
まとめ
スプレッドシートのIMCSC関数は、複素数の余割(コセカント)=1/sin(z) を1関数で求められる関数です。最後にポイントを振り返っておきましょう。
- 構文は =IMCSC(複素数)。文字列・セル参照・COMPLEX関数・数値を渡せる
- 戻り値は「a+bi」形式の文字列で、+ で数値を足すと #VALUE! になる
- 数値として使うときは、IMREAL・IMAGINARYで実部と虚部を取り出す
- =IMDIV(1, IMSIN(z)) と見比べれば、定義どおりか検算できる
- 半角スペースは空白なしと同じ値になる
- 全角文字・大文字の I / J・論理値は #NUM! になる
- エラー値を渡すと、そのエラー(#N/A など)がそのまま返る
- 論理値の扱いは、Excelの公式説明(#VALUE!)と結果が異なる
迷ったときは、エラーの早見表と IMDIV での検算を思い出してみてください。複素数の三角関数をまとめて扱うなら、IMSIN・IMSEC・IMCOT の記事もあわせて読むと理解が深まりますよ。

