「GoogleスプレッドシートでBESSELY関数を入力したら #NAME? エラーになった」。それ、数式のミスではありません。
先に結論をお伝えします。GoogleスプレッドシートにBESSELY関数はありません。BESSELYは Excel 専用のエンジニアリング関数で、スプレッドシートには実装されていないんです。
この記事では、実際に検証した結果と、スプレッドシートユーザーが第2種ベッセル関数 Y_n(x) を計算するための代替方法を紹介します。
スプレッドシートでBESSELYは使えない(実機検証)
実際にGoogleスプレッドシートのセルに入力してみると、次のようになります。
=BESSELY(1, 0) → #NAME? エラー
#NAME? は「そんな名前の関数は知らない」というエラーです。スペルミスでも設定の問題でもなく、Googleスプレッドシートの関数リストにBESSELYが存在しないことが原因です。BESSELJ・BESSELI・BESSELKも同様に未実装で、すべて #NAME? になります。
ExcelにはBESSELJ・BESSELY・BESSELI・BESSELKの4関数が標準搭載されていますが、Googleスプレッドシートはエンジニアリング関数の一部しか実装しておらず、ベッセル関数系は対象外です。Web上には「スプレッドシートでBESSELYが使える」と書かれた解説も見かけますが、Excelの仕様と混同したものなので注意してください。
代替方法1: Excelで計算する(いちばん手軽)
BESSELYが必要なら、Excelを使うのが最も確実です。デスクトップ版だけでなく、無料のExcel On the web(Web版Excel)でもBESSELYは使えます。
=BESSELY(1, 0) → 0.0883(Excelでの結果)
構文は =BESSELY(x, n) で、xに評価する値(正の数)、nに次数(0以上の整数)を指定します。引数の意味やエラー対処の詳細は、ExcelのBESSELY関数の使い方で解説しています。
Excelで計算した場合の参考値を載せておきます。検算にお使いください。
| 数式 | 結果(概算) |
|---|---|
| =BESSELY(1, 0) | 0.0883 |
| =BESSELY(1, 1) | -0.7812 |
| =BESSELY(2, 0) | 0.5104 |
| =BESSELY(2, 1) | -0.1070 |
Excelで使うときのエラー対処
Excel側で発生しやすいエラーもまとめておきます。
- #NUM! エラー: x に 0 以下を指定した場合に発生します。Y_n(x) は x→0 で負の無限大に発散するため、x は正の数で指定してください。次数 n に負の値を指定した場合も同様です
- #VALUE! エラー: 引数に文字列を渡した場合に発生します。セル参照の場合は参照先が数値か確認してください
- 次数 n に小数を指定すると、小数点以下が切り捨てられて整数として計算されます
代替方法2: 外部ツールで計算する
単発で値が知りたいだけなら、外部ツールを使うのが手軽です。
- Wolfram Alpha: 検索欄に「BesselY(0, 1)」と入力するだけで値が得られます
- Python(SciPy):
scipy.special.yv(n, x)で高精度に計算できます
計算結果をスプレッドシートに貼り付ければ十分、というケースは意外と多いですよ。
代替方法3: GASカスタム関数(ただしY_nは自作向きではない)
Google Apps Script(GAS)でカスタム関数を自作する方法もあります。ただし、第2種ベッセル関数 Y_n(x) は級数展開に対数項やディガンマ関数が含まれており、単純な級数では書けません。精度を保った自作はかなり大変なので、Y_n(x) に関しては方法1か方法2をおすすめします。
級数が単純な第1種ベッセル関数 J_n(x) と第1種変形ベッセル関数 I_n(x) は自作しやすく、コピペで使えるGASコードをBESSELJの記事とBESSELIの記事に載せています。
そもそもBESSELY(第2種ベッセル関数)とは
第2種ベッセル関数 Y_n(x)(ノイマン関数とも呼ばれます)は、円筒座標系の微分方程式を解くときに登場する特殊関数です。主に次のような場面で必要になります。
- 円筒導波管や同軸構造の電磁場解析(外側領域の解)
- 円環膜の振動解析
- 音響・波動問題の境界条件処理
第1種ベッセル関数 J_n(x) と同じく振動しながら減衰しますが、x→0 で負の無限大に発散するのが決定的な違いです。原点を含む領域では J_n(x) を、原点を含まない領域(円筒の外側など)では Y_n(x) を組み合わせて使います。
Excelの4つのベッセル関数の使い分け
Excelに搭載されている4関数の違いも整理しておきます(いずれもスプレッドシートでは未実装です)。
| 関数名 | 正式名称 | 数学記号 | 特性 | 主な用途 |
|---|---|---|---|---|
| BESSELJ | 第1種ベッセル関数 | J_n(x) | 振動的・原点で有限 | 振動・波動の正則解 |
| BESSELY | 第2種ベッセル関数 | Y_n(x) | x→0 で発散・振動的 | 振動・波動の特異解 |
| BESSELI | 第1種変形ベッセル関数 | I_n(x) | 単調増加(指数発散) | 熱伝導・拡散の正則解 |
| BESSELK | 第2種変形ベッセル関数 | K_n(x) | 単調減少(指数減衰) | 熱伝導・拡散の特異解 |
振動・波動現象ならJ/Y、熱伝導・拡散現象ならI/K、原点で有限の解が欲しければJ/I、という使い分けです。
まとめ
ポイントを振り返っておきましょう。
- GoogleスプレッドシートにBESSELY関数はない。入力すると
#NAME?エラーになる(BESSELJ/I/Kも同様) - いちばん手軽な代替はExcel(Web版でも使える)。
=BESSELY(x, n)で計算できる - 単発の計算ならWolfram AlphaやPython(SciPy)が便利
- Y_n(x) はGASカスタム関数の自作には向かない(級数が複雑)。J_n(x)・I_n(x)なら自作コードあり
「スプレッドシートに関数がない」とわかるだけでも、原因調査の時間をかなり節約できます。Excelでの詳しい使い方はExcelのBESSELY関数の使い方をどうぞ。

