「スプレッドシートで複素数の sin を計算したら、長い文字列が返ってきて足し算もできない…」。交流回路の計算や課題の答え合わせで、こんな場面に出会ったことはありませんか。
IMSIN関数の結果は「a+bi」形式の文字列です。そのまま + でつなぐと #VALUE! になり、答えが合っているのかも見えにくいですよね。全角の空白が1つ混じっただけで #NUM! になるなど、つまずく所が意外と多い関数です。
この記事では、Googleスプレッドシートの IMSIN 関数を解説します。書き方から結果を数値として取り出す方法まで、順に見ていきましょう。分解公式で答え合わせする表と、実機で確かめたエラーの規則もまとめました。
スプレッドシートのIMSIN関数とは
IMSIN関数は、複素数の正弦 sin(x+yi) を求めるGoogleスプレッドシートの関数です。読み方は「イマジナリー・サイン」。imaginary(虚数)と sine(正弦)を組み合わせた名前で、エンジニアリング関数の仲間に入ります。
中身は、次の分解公式と同じ計算をしています。
sin(x+yi) = sin x・cosh y + i・cos x・sinh y
実部が sin x・cosh y、虚部が cos x・sinh y という形ですね。この式は後半の検算でそのまま使うので、頭の片隅に置いておいてください。
構文と引数(=IMSIN(複素数)・i/j・ラジアン)
=IMSIN(複素数)
引数は1つだけです。
| 引数 | 必須/任意 | 指定できるもの |
|---|---|---|
| 複素数 | 必須 | "3+2i" のような文字列、複素数が入ったセル、COMPLEX関数の結果、実数 |
書くときのポイントは次の3つ。
- 虚数単位は小文字の
iかj。jで入れると、結果もjで返る - 角度の単位はラジアン。度数のまま渡すと別の値になる
- 半角の空白は無視されるが、全角の空白や大文字の
Iは#NUM!
戻り値は「a+bi」形式の文字列
IMSINが返すのは数値ではなく文字列です。「0.53092108624852-3.59056458998578i」のように、a+bi の形で文字が並びます。
実数を渡しても同じです。=IMSIN(3.5) の「-0.35078322768962」も、ISTEXT で調べると TRUE でした。
表示の形にも少しクセがあります。実機で確かめた結果を並べてみましょう。
| 式 | 結果(文字列) |
|---|---|
=IMSIN("3+2i") | 0.53092108624852-3.59056458998578i |
=IMSIN(COMPLEX(4,1)) | -1.16780727488952-0.768162763456573i |
=IMSIN("1+1i") | 1.29845758141598+0.634963914784736i |
=IMSIN("-1-1i") | -1.29845758141598-0.634963914784736i |
=IMSIN("0+1i") | 1.1752011936438i |
=IMSIN(3.5) | -0.35078322768962 |
=IMSIN(0) | 0 |
結果の実部が 0 のときは「1.1752011936438i」のように、虚部だけが表示されます。虚部が 0 なら「-0.35078322768962」と実数だけ。「0+」や「+0i」は付かないので、見た目で戸惑わないようにしましょう。
IMSIN関数の基本の使い方
ここからは、引数の渡し方を5通り紹介します。どれも1行で書ける形なので、手元のシートで試しながら読んでみてください。
複素数を文字列で直接指定する
いちばん手軽なのは、複素数をダブルクォーテーションで囲んで直接書く方法です。
=IMSIN("3+2i")
結果は「0.53092108624852-3.59056458998578i」です。"1 + 1i" のように半角の空白を入れても、"1+1i" と同じ値になりますよ。
電気系の教科書に合わせて j を使うこともできます。=IMSIN("3+2j") の結果は「0.53092108624852-3.59056458998578j」。入力と同じく j のまま返ってくるので、表記をそろえたいときも安心です。
セル参照で指定する
A2セルに「1+1i」が入っているなら、=IMSIN(A2) と書くだけです。結果は「1.29845758141598+0.634963914784736i」になります。
注意したいのは、参照先が空白セルのときの動きです。エラーにはならず、文字列の「0」が返ってきます。入力漏れに気づきにくいので、データの欠けがないか先に確認しておきましょう。
なお、引数に空の文字列 "" を直接渡すと #NUM! になります。空白セルと空文字で結果が違う点は、覚えておくと役立ちますよ。
COMPLEX関数と組み合わせる
実部と虚部が別々の列に入っているなら、COMPLEX関数で複素数の文字列を組み立ててから渡します。
=IMSIN(COMPLEX(4,1))
結果は「-1.16780727488952-0.768162763456573i」です。A列に x、B列に y がある表なら、=IMSIN(COMPLEX(A2,B2)) と書けます。文字列を手で打つ手間がなくなりますね。
この形は、あとで紹介する検算表でもそのまま使います。実部と虚部を数値で持っておくと、入力ミスも見つけやすいですね。
実数を渡す(度数ならRADIANSで変換)
IMSINには実数も渡せます。普通の sin と同じ計算になり、結果が文字列で返る点だけが違います。
=IMSIN(RADIANS(30))
結果は「0.5」です。角度を度数で持っているときは、RADIANS関数でラジアンに直してから渡しましょう。
ひとつ面白いのが =IMSIN(PI()) の結果です。0 ではなく「1.22464679914735E-16」になります。PI() 自体が近似値で、ごく小さな誤差が残るためです。
実数の sin だけが欲しいなら、数値で返る SIN 関数のほうが扱いやすいでしょう。
ARRAYFORMULAで複数行を一括で計算する
複数の複素数をまとめて計算したいときは、ARRAYFORMULA関数で包みます。
=ARRAYFORMULA(IMSIN({"1+1i";"0+1i"}))
実機では2行に展開されました。1行目は「1.29845758141598+0.634963914784736i」、2行目は「1.1752011936438i」。
範囲で指定するなら =ARRAYFORMULA(IMSIN(A2:A10)) の形になります。空白セルからは「0」が返るので、空の行を空欄のままにしたいときは IF で除外しておくと見やすくなります。
計算結果を数値として使うには
IMSINの結果をグラフにしたり、しきい値と比べたりしたい場面もありますよね。この章では、文字列の結果を数値として使うための手順をまとめます。
そのまま足すと#VALUE!になる理由
IMSINの戻り値は文字列なので、虚部を含む結果は普通の四則演算に使えません。たとえば次の式は #VALUE! になります。
=IMSIN("1+1i")+1
原因は、+ が数値どうしを計算する演算子だからです。「1.29845758141598+0.634963914784736i」のような文字列は数値に直せず、エラーになります。複素数のまま計算を続けるなら、足し算は IMSUM、掛け算は IMPRODUCT を使いましょう。
IMREAL・IMAGINARY・IMABSで取り出す
数値として扱いたいなら、必要な部分を取り出す関数を通します。B2に =IMSIN("3+2i") が入っているとすると、次のようになります。
| 取り出すもの | 式 | 結果(数値) |
|---|---|---|
| 実部 | =IMREAL(B2) | 0.53092108624852 |
| 虚部 | =IMAGINARY(B2) | -3.59056458998578 |
| 絶対値 | =IMABS(B2) | 3.629604837… |
3つとも戻り値は数値なので、SUM・グラフ・条件付き書式にそのまま使えます。実部はIMREAL関数、虚部はIMAGINARY関数の記事で詳しく説明しています。
大きさで判定したいときは、IMABS関数の出番ですね。=IMABS(B2)>=3 のように、比較の式にそのまま組み込めます。
表示桁をROUNDで整える
IMSINの結果は15桁前後まで表示されるので、表に並べると読みにくいですよね。実部と虚部を丸めてから、COMPLEXで組み直すと見た目がすっきりします。
=COMPLEX(ROUND(IMREAL(B2),4),ROUND(IMAGINARY(B2),4))
小数4桁にそろった複素数の文字列が返ってきます。ただし、丸めた値で計算を続けると誤差が積み重なります。計算用には元のB列を使い、丸めた列は表示専用にしておきましょう。
数値のまま桁をそろえたいなら、=ROUND(IMREAL(B2),4) のように取り出した値を丸めるだけで十分です。
計算が合っているか確かめる(検算と関連関数)
課題の答え合わせや、計算シートの確認に使える検算の方法を紹介します。あわせて、IMSINと関係の深い関数も整理しておきます。
sin x・cosh y と cos x・sinh y で検算する表
冒頭の分解公式を使えば、IMSINの結果を SIN・COS・SINH・COSH だけで検算できます。A列に x、B列に y を入れて、2行目に次の式を並べます。
C2: =IMSIN(COMPLEX(A2,B2)) ← IMSINの結果
D2: =SIN(A2)*COSH(B2) ← 実部の理論値
E2: =COS(A2)*SINH(B2) ← 虚部の理論値
F2: =IMREAL(C2)-D2 ← 実部の差
G2: =IMAGINARY(C2)-E2 ← 虚部の差
H2: =AND(ABS(F2)<1E-10,ABS(G2)<1E-10) ← 判定
実機で差を測った結果がこちら。
| x | y | IMSINの結果 | 実部の差 | 虚部の差 |
|---|---|---|---|---|
| 1 | 1 | 1.29845758141598+0.634963914784736i | 2.66453525910038E-15 | -1.11022302462516E-16 |
| 3 | 2 | 0.53092108624852-3.59056458998578i | 2.22044604925031E-16 | -4.44089209850063E-16 |
差はぴったり 0 にはならず、1E-15 前後の小さな値が残ります。これは浮動小数点の丸め誤差で、計算の間違いではありません。
そのため、=F2=0 のような比べ方をすると FALSE になってしまいます。判定は H列のように「差の絶対値が 1E-10 未満か」で見るか、ROUND で丸めてから比べるのが確実です。
誤差は理論上 0 になるはずの部分にも出ます。たとえば =IMSIN(COMPLEX(PI()/2,0.5)) の結果は「1.12762596520638-1.81939453489018E-15i」でした。
cos(π/2) は本来 0 なので、虚部の「E-15」は誤差だと読み取れますね。
純虚数を渡すと i・sinh になる(IMSINHとの関係)
分解公式で x=0 とすると、sin 0=0・cos 0=1 なので sin(yi)=i・sinh y になります。純虚数の正弦は、双曲線正弦に i を掛けた形になるわけですね。
実際に =IMSIN("0+1i") を計算すると「1.1752011936438i」が返ります。この虚部の値は sinh 1 の値(1.1752…)と同じです。=IMSIN("i") と書いても同じ結果になります。
双曲線正弦そのものを求めたいときは、専用のIMSINH関数を使うほうが式の意図が伝わります。IMSINとIMSINHは「純虚数で入れ替わる関係」と覚えておくと、検算にも使えて便利ですよ。
IMCOS・IMTANなどの関連関数とExcel版
IMSINと一緒に使うことが多い関数をまとめました。
| 関数 | 求めるもの | IMSINとの関係 |
|---|---|---|
| IMCOS | 複素数の余弦 cos z | sin と対になる関数 |
| IMTAN | 複素数の正接 tan z | tan z = sin z ÷ cos z |
| IMSINH | 複素数の双曲線正弦 sinh z | 純虚数で sin と入れ替わる |
| IMEXP | 複素数の指数関数 e^z | sin z を e^(iz) で表せる |
sin z は指数関数を使って (e^(iz)−e^(−iz))÷2i とも書けます。IMEXPで組み立てた値と比べれば、別ルートの検算にもなりますね。
Excelにも同じ名前のIMSIN関数があり、構文は =IMSIN(複素数) で共通です。対応バージョンやExcel側の動きは、ExcelのIMSIN関数の記事で解説しています。
IMSIN関数のエラーと対処法
IMSINのエラーは、ほとんどが「複素数として読めない文字列」が原因です。Googleスプレッドシートの実機で確かめた結果を表にまとめました。
| 入力 | 例 | 結果 |
|---|---|---|
| 半角の空白 | =IMSIN("1 + 1i") | 空白なしと同じ値 |
| 全角の空白 | =IMSIN("3 + 4i") | #NUM! |
| 大文字の I | =IMSIN("3+4I") | #NUM! |
| 全角の文字 | =IMSIN("3+4i") | #NUM! |
| i・j 以外の文字 | =IMSIN("3+4k") | #NUM! |
| ただの文字列 | A1の「hello」を参照 | #NUM! |
| 空の文字列 | =IMSIN("") | #NUM! |
| 論理値 | =IMSIN(TRUE) | #NUM! |
| 虚部が大きすぎる | =IMSIN("1+710i") | #NUM! |
| エラー値 | =IMSIN(NA()) | #N/A(そのまま返る) |
| 引数なし | =IMSIN() | #N/A |
戻り値に + で計算 | =IMSIN("1+1i")+1 | #VALUE! |
#NUM!になる入力(全角空白・大文字I・全角文字・論理値など)
#NUM! の多くは、全角や大文字が紛れ込んだ文字列です。日本語入力のまま打ったり、ほかの資料からコピーしたりすると起こりやすいですね。
半角の空白は通るのに、全角の空白は通らない点がわかりにくいところです。見た目では区別しにくいので、#NUM! が出たらまず入力モードを確認してみてください。
元データを直せないときは、関数側で整えてから渡す方法もあります。
=IMSIN(LOWER(SUBSTITUTE(A2," ","")))
SUBSTITUTEで全角の空白を消し、LOWERで大文字の I を小文字にしています。全角の数字には効かないので、その場合は半角で入力し直しましょう。
TRUE・FALSE のような論理値や、「hello」のような文字列も #NUM! です。チェックボックスの列を誤って参照していないか、範囲指定も見直してみてください。
虚部が大きすぎると#NUM!になる
分解公式のとおり、虚部 y が大きくなると cosh y・sinh y が急激に増えます。実機では =IMSIN("1+709i") を計算できました。結果は「3.45777571011361E+307+2.22021225102104E+307i」です。
ところが =IMSIN("1+710i") は #NUM! です。虚部が 711 のときも同じで、境界は 709 と 710 の間にあります(それより細かい境界は測っていません)。
一方、実部はかなり大きくしても計算できます。=IMSIN("710") は「0.0000602887066915853」でした。=IMSIN(1E+10) も「-0.487506025087511」と答えが返ります。
#NUM! の原因が桁の大きさなら、まず虚部の値を疑うのが近道です。
エラー値はそのまま返る・引数の数の誤りは#N/A
参照先がエラーのときは、そのエラーがそのまま返ってきます。=IMSIN(NA()) の結果は #N/A で、#VALUE! に変わることはありません。この場合はIMSINではなく、参照元のセルを直すのが正解です。
=IMSIN() のように引数を書き忘れたときも #N/A になります。VLOOKUPなどの「見つからない」とは別の原因なので、式の括弧の中を確認しましょう。
IFERRORで包めばエラー表示は消せます。ただ、入力ミスまで隠れてしまうので、検算が終わってから使うのがおすすめです。
まとめ
GoogleスプレッドシートのIMSIN関数は、複素数の正弦 sin(x+yi) を求める関数です。最後にポイントを振り返っておきましょう。
- 構文は
=IMSIN(複素数)。虚数単位は小文字の i か j で、j で入れると結果も j - 角度はラジアン。度数は RADIANS で変換する
- 戻り値は「a+bi」形式の文字列で、実数を渡しても文字列になる
- a+bi の結果をそのまま
+で計算すると#VALUE!。数値が必要なら IMREAL・IMAGINARY・IMABS で取り出す - sin x・cosh y と cos x・sinh y で検算でき、差は 1E-15 前後の誤差になる
- 差は
=0ではなく ABS(差)<1E-10 か ROUND で判定する - 純虚数では sin(yi)=i・sinh y となり、IMSINH とつながる
- 全角の空白・大文字の I・全角文字・論理値・空文字は
#NUM! - 虚部が 710 になると
#NUM!(709 までは計算できた) - エラー値はそのまま返り、引数の数の誤りは
#N/A
まずは =IMSIN(COMPLEX(A2,B2)) と検算の列を並べた表を作ってみてください。答えが合っているか一目でわかると、複素数の計算もぐっと気楽になりますよ。

