スプレッドシートで複素数の sinh を求めようとして、こんなところで手が止まっていませんか。
- IMSINH の結果に 1 を足したら #VALUE! になった
- 書式どおりに入れたつもりなのに #NUM! が出る
- Excel のヘルプを読んだら、手元のエラーの種類と説明が違う
じつは IMSINH の戻り値は数値ではなく文字列です。そのまま計算に回すとエラーになるうえ、エラーの規則も Excel 版ヘルプとは一部異なります。原因が分からないまま式をいじっても、時間ばかりかかりますよね。
この記事では、GoogleスプレッドシートのIMSINH関数の書き方と、結果を数値として取り出す方法を解説します。#NUM!・#N/A になる入力の早見表もまとめたので、エラーの原因探しにも使ってみてください。
スプレッドシートのIMSINH関数とは?(複素数の双曲線正弦を返す関数)
GoogleスプレッドシートのIMSINH関数は、複素数の双曲線正弦(ハイパボリックサイン、sinh)を返す関数です。分類はエンジニアリング関数。電気回路や制御、物理の計算で複素数を扱うときに出番があります。
名前の IM は imaginary(虚数)、SINH は hyperbolic sine(双曲線正弦)の略です。IMREAL や IMCOSH と同じく、IM で始まる複素数関数の仲間ですね。
なお、IMSINH は逆双曲線正弦(asinh)を求める関数ではありません。実数の sinh を、そのまま複素数に広げた関数です。
構文と引数
書式は引数が1つだけのシンプルな形です。
=IMSINH(複素数)
| 項目 | 内容 |
|---|---|
| 引数 | 複素数。"4+3i" のような文字列・セル参照・COMPLEX関数の結果・実数 |
| 虚数単位 | 小文字の i または j(電気系の "3+2j" も可) |
| 戻り値 | a+bi 形式の文字列(例: -27.0168132580039+3.85373803791938i) |
| 分類 | エンジニアリング |
実数を渡したときは、虚部が 0 の複素数として扱われます。Google の公式ヘルプにも、そのように説明があります。
覚えておきたいのは、戻り値が文字列だという点。複素数を返す IM 系の関数は、どれも結果を文字列で返します。この性質が、あとで出てくる #VALUE! の原因になるわけです。
計算の中身(定義式)
内部では次の定義式で計算しています。
sinh(a+bi) = sinh(a)·cos(b) + i·cosh(a)·sin(b)
実部が sinh(a)·cos(b)、虚部が cosh(a)·sin(b) という組み立てですね。a が正で cos(b) が負なら、実部はマイナスになります。
後で出てくる "4+3i" の実部が -27.01… になるのは、cos(3) が負だから。また sinh(-z) = -sinh(z) が成り立つので、符号を反転した複素数を渡すと結果も符号が反転します。
IMSINH関数の基本的な使い方
引数の渡し方は、文字列・セル参照・COMPLEX関数の3通り。結果の例と一緒に、順に見ていきましょう。
なお、記事中の結果は計算上の値と公式ヘルプの例です。セルに表示される桁数は、環境によって多少異なる場合があります。
複素数を文字列で直接指定する
いちばん手軽なのは、複素数を文字列で直接書く方法です。
=IMSINH("4+3i")
=IMSINH("3+2i")
1行目の結果は -27.0168132580039+3.85373803791938i です。実部は sinh(4)·cos(3)、虚部は cosh(4)·sin(3) を計算した値。Microsoft の Excel 版ヘルプに載っている例と同じ値になります。
2行目は Google の公式ヘルプにある例です。結果は -4.16890695996657+9.15449914691143i になります。
複素数はダブルクォーテーションで囲んで渡してください。虚数単位は小文字の i(電気系なら小文字の j)を使います。大文字や全角の文字はエラーになるので、後述の早見表で確認しておきましょう。
セル参照で指定する
実務では、A列に複素数を並べて B列で計算する形が多いですよね。B2 に =IMSINH(A2) と入れて下へコピーすると、次のようになります。
| 行 | A列(入力) | B列 =IMSINH(A2) の結果 |
|---|---|---|
| 2 | 0 | 0 |
| 3 | 1i | 0.841470984807897i |
| 4 | 1+2i | -0.489056259041294+1.40311925062204i |
| 5 | 3+2i | -4.16890695996657+9.15449914691143i |
| 6 | 4+3i | -27.0168132580039+3.85373803791938i |
2行目の 0 は、sinh(0) = 0 なのでそのまま 0 になります。3行目のような実部 0 の純虚数 bi では、結果は i·sin(b) です。
sinh(0)=0、cosh(0)=1 なので、実部が消えて sin(1) の値だけが虚部に残るわけですね。
COMPLEX関数と組み合わせる
実部と虚部が別々のセルに入っているなら、COMPLEX関数で組み立ててから渡します。
=IMSINH(COMPLEX(4, 1))
=IMSINH(COMPLEX(C2, D2))
1行目は Google の公式ヘルプの例です。結果は 14.7448051885587+22.9790855778861i になります。
2行目のように実部を C列・虚部を D列に置いた表なら、そのまま下へコピーできます。文字列を手で組み立てずに済むので、打ち間違いによる #NUM! も防げますよ。
実数を渡すと SINH と同じ値になる
虚部のない実数を渡すと、実数の SINH関数と同じ値が返ります。Google の公式ヘルプの例はこちら。
=IMSINH(3.5) → 16.542627287635
=SINH(3.5) → 同じ値(sinh(3.5))
=IMSINH(1) なら sinh(1) で、約 1.1752 になります。
実数だけを扱うなら、最初から SINH関数を使うほうが素直でしょう。SINH の結果は数値なので、そのまま計算に使えます。
ARRAYFORMULAで複数行を一括計算する
行ごとに式をコピーする代わりに、ARRAYFORMULA関数(数式を範囲全体に広げる関数)で包む方法もあります。
=ARRAYFORMULA(IMSINH(A2:A6))
B2 に1つ入れるだけで、A2:A6 の5行分の結果が下へ並ぶはずです。展開先のセルに値が残っていると #REF! になるので、B3 以降は空けておいてください。
範囲には、入力が入っている行だけを指定しておくと安心です。うまく展開されないときは、B2 の =IMSINH(A2) を下へコピーする方法に戻しましょう。
IMSINHの結果を数値として使うには
結果の -27.0168132580039+3.85373803791938i は、実部と虚部をつないだ1つの文字列です。前半の -27.0168132580039 が実部、i の手前の 3.85373803791938 が虚部。
計算やグラフに使うには、この文字列を数値に分けるひと手間が必要になります。
戻り値は文字列なので + で計算すると #VALUE!
+ や * は数値どうしの演算子です。複素数の文字列は数値に読み替えられないため、そのまま計算すると #VALUE! になります。
=IMSINH("4+3i")+1 → #VALUE!
=IMSUM(IMSINH("4+3i"), 1) → -26.0168132580039+3.85373803791938i
複素数どうしの計算は、IMSUM(和)・IMSUB(差)・IMPRODUCT(積)・IMDIV(商)で行います。2行目は IMSUM で 1 を足した例で、実部だけが 1 増えていますね。
紛らわしいのが、実数を渡して結果が数字だけになるケース。数字だけの文字列は数値に読み替えられるので、+ でも計算できてしまうことがあります。
入力しだいで動いたり止まったりする式は、あとで原因を探すのが大変です。IM 系の関数か IMREAL を挟む習慣をつけておきましょう。
IMREAL・IMAGINARYで実部と虚部に分ける
結果を数値として使いたいときは、IMREAL関数とIMAGINARY関数で分解します。
B2: =IMSINH(A2)
C2: =IMREAL(B2) ← 実部
D2: =IMAGINARY(B2) ← 虚部
A列に複素数を並べて、B〜D列を下へコピーすると次の表になります。
| A列(入力) | C列 実部 | D列 虚部 |
|---|---|---|
| 1+2i | -0.489056259041294 | 1.40311925062204 |
| 3+2i | -4.16890695996657 | 9.15449914691143 |
| 4+3i | -27.0168132580039 | 3.85373803791938 |
C列・D列は普通の数値です。SUM や ROUND、グラフの元データにそのまま使えます。
たとえば C列を横軸、D列を縦軸にして散布図を作れば、結果が複素平面のどこにあるかを確かめられます。入力を少しずつ変えたときの動きを見たいときに便利ですよ。
大きさ(絶対値)がほしいときは IMABS を使いましょう。IMABS の戻り値は数値で、そのまま計算や比較に回せます。一方、数値用の ABS("3+4i") は #VALUE! になります。
COMPLEXとROUNDで桁を丸める
ROUND関数は数値を丸める関数なので、a+bi の文字列をそのまま渡しても丸められません。複素数の形を保ったまま丸めたいときは、分解してから丸め、COMPLEX で組み直します。
=COMPLEX(ROUND(IMREAL(B2), 4), ROUND(IMAGINARY(B2), 4))
A2 が 4+3i の行なら、-27.0168+3.8537i になります。戻り値は複素数の文字列のままなので、ほかの IM 系関数にそのまま渡せるのが利点。
表示を見やすくしたいだけなら、C列・D列に分解した数値を ROUND するほうが手軽でしょう。
IMSINH関数のエラーと対処法
IMSINH のエラーは、ほとんどが「複素数として読めない入力」で起こります。逆に、エラーになりそうでならない入力もあるのが落とし穴です。
入力と結果の早見表(スプレッドシート実機)
スプレッドシートでの入力と結果の対応は次のとおりです。IMSINH だけでなく、IM 系の関数に共通する規則になっています。
| 入力の例 | 結果 | 原因 |
|---|---|---|
=IMSINH("1 + 1i")・=IMSINH(" 1+1i ")(半角の空白) | "1+1i" と同じ値 | 半角の空白は無視される |
=IMSINH("3 + 4i")(全角の空白) | #NUM! | 全角の空白は読めない |
=IMSINH("3+4I")(大文字) | #NUM! | 虚数単位は小文字だけ(大文字の J も同じ) |
=IMSINH("3+4i")・=IMSINH("3+4i") | #NUM! | 全角の文字が混じっている |
=IMSINH("3+4k")・=IMSINH("hello") | #NUM! | i・j 以外の文字、複素数でない文字列 |
=IMSINH(TRUE) | #NUM! | 論理値は受け付けない |
=IMSINH(A2)(A2 が #N/A) | #N/A | 元のエラーがそのまま返る |
=IMSINH()・=IMSINH("1+1i","2") | #N/A | 引数の数が違う |
=IMSINH("4+3i")+1 | #VALUE! | 結果の文字列を + で計算した |
#NUM!になる入力
#NUM! は「渡された値を複素数として読めなかった」というサインです。原因になりやすいのは次の3つ。
- 全角の文字や全角の空白が混じっている(日本語入力のまま打った)
- 虚数単位が大文字の I・J になっている
- i・j 以外の文字や、ただの文字列が入っている
手入力のデータなら、入力モードを半角英数に切り替えて打ち直すのが確実です。ほかのシステムから貼り付けたデータも、全角の文字が混じっていることがあるので要注意。
TRUE のような論理値も #NUM! になります。チェックボックスのセルを誤って参照していないか、確かめてみてください。
#N/Aになる入力
#N/A が出たときは、IMSINH ではなく参照先のセル側に原因があることがほとんどです。参照したセルが #N/A なら、その #N/A がそのまま返ってきます。#VALUE! に変わるわけではありません。
もう1つの原因は、引数の数の間違いです。=IMSINH() のように空のまま、またはカンマで2つ目の値を足してしまうと #N/A になります。IMSINH の引数は常に1つだけ、と覚えておきましょう。
半角スペースはエラーにならない(スプレッドシート固有)
意外なのが半角の空白です。"1 + 1i" のように途中に空白があっても、前後に空白があっても、空白なしと同じ値が返ります。
見た目が崩れた入力でもエラーにならず、気づかないまま計算が進むわけです。Excel 版のヘルプにはこの点の記載がありません。スプレッドシートの挙動として押さえておくと、検算のときに迷わずに済みます。
一方、全角の空白は #NUM! です。「空白があるのにエラーにならない行」と「エラーになる行」が混在していたら、空白が半角か全角かを疑ってみてください。
IFERRORでまとめて吸収する
入力の形式がそろっていないデータを一括処理するなら、IFERROR関数で包んでおくと表が見やすくなります。
=IFERROR(IMSINH(A2), "形式エラー")
ただし、参照先の #N/A まで同じメッセージに置き換わる点には注意が必要です。原因の切り分けが済むまでは包まずに、早見表でエラーの種類を確かめておきましょう。
Excel版との違いと関連関数
書式はスプレッドシートも Excel も =IMSINH(複素数) で共通です。=IMSINH("4+3i") の結果も、Excel 版ヘルプの例と同じ値になります。
Excelとの違い(論理値のエラー)
ただし「完全に同じ」ではありません。Microsoft の Excel 版ヘルプでは、論理値を渡したときは #VALUE! と記載されています。一方、スプレッドシートでは =IMSINH(TRUE) は #NUM! です。
Excel の説明を読んでからスプレッドシートで試すと、エラーの種類が食い違って戸惑うかもしれません。スプレッドシートで作業するなら、上の早見表を基準にしてください。
Excel 版の公式ページの対象製品は、Microsoft 365 や Excel 2016 以降です。Excel 側の使い方は、ExcelのIMSINH関数の記事で確認してください。
あわせて使う関連関数
sinh 以外を求めたいときや、結果を後処理したいときは、次の関数が役に立ちます。
- SINH関数: 実数の sinh を数値で返す。実数だけならこちら
- IMCOSH関数: 対になる複素数の cosh を返す
- IMTANH関数: sinh÷cosh にあたる tanh を1つの関数で返す
- IMCSCH関数: sinh の逆数(1/sinh)を返す
- IMSIN関数: 三角関数の sin を複素数で返す(双曲線版と取り違えやすい)
- COMPLEX関数: 実部と虚部から複素数を作る
- IMREAL関数: 結果の実部を数値で取り出す
- IMAGINARY関数: 結果の虚部を数値で取り出す
tanh を IMSINH と IMCOSH の割り算で組み立てる必要はありません。IMTANH が用意されているので、そちらを使うほうが式もすっきりします。
まとめ:スプレッドシートのIMSINH関数のポイント
GoogleスプレッドシートのIMSINH関数は、複素数の sinh(双曲線正弦)を返す関数です。逆関数の asinh ではありません。
- 書式は
=IMSINH(複素数)。文字列・セル参照・COMPLEX の結果・実数を渡せる =IMSINH("4+3i")は-27.0168132580039+3.85373803791938i- 実数 a なら sinh(a)、純虚数 bi なら i·sin(b) と同じ値になる
- 結果は文字列。
+で計算すると #VALUE! なので、IMSUM などの IM 系で計算する - 数値として使うなら IMREAL・IMAGINARY で分解する
- 全角の文字・全角の空白・大文字の I/J・論理値は #NUM!、半角の空白は無視される
- 参照先の #N/A や引数の数の誤りは #N/A
- 論理値のエラーの種類は、Excel 版ヘルプの記載(#VALUE!)と異なる
まずは =IMSINH("4+3i") を入れてみましょう。IMREAL と IMAGINARY で分解するところまで試せば、流れがつかめます。結果が文字列だと分かっていれば、その先の計算でつまずくことはぐっと減るはずです。

