スプレッドシートのIMSINH関数の使い方|複素数sinhとエラー

スポンサーリンク

スプレッドシートで複素数の 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) の結果
200
31i0.841470984807897i
41+2i-0.489056259041294+1.40311925062204i
53+2i-4.16890695996657+9.15449914691143i
64+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.4890562590412941.40311925062204
3+2i-4.168906959966579.15449914691143
4+3i-27.01681325800393.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 で分解するところまで試せば、流れがつかめます。結果が文字列だと分かっていれば、その先の計算でつまずくことはぐっと減るはずです。

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