今日のトリビア Excelは三角関数に関してVBAを使わなければ動かない


♯ 公式の間違った解説
[VBA DXで必ず使う関数 Pi つまりπ、そしてラジアン変換](https://qiita.com/Q11Q/items/286f72278c75935bb741)

この中のMSの公式の解説がめちゃくちゃだった。

> [注意] これは、Excel の ATAN() 関数と同等です。 奇妙なことに、 Excel.WorksheetFunctions.ATAN() は存在しません (他の Excel 数式関数と同様)。 代わりに、この VBA Atn() 関数を 使用できます
# 存在するのに存在しない？

この説明は謎である。しかし、原文にもそう書いてある。

# ATANは95から？
なぜこの奇妙な説明があるのだろう。
仮説として、excel 2007から追加されたとか。

しかし、Bing ChatはExcel95からATAN関数が追加されたとか言っているけど、根拠がないのでは。


>Excel ATN関数は、Excel 95からExcelの機能になりました¹。Excel 95は、1995年8月に発売された最初の32ビット版のExcelで、関数の数が163から321に増えました²。ATN関数は、数値のアークタンジェント（逆正接）をラジアン単位で返す関数です³。例えば、ATN(1)は0.785398163という値を返します³。

>¹: https://support.microsoft.com/ja-jp/office/atn-%E9%96%A2%E6%95%B0-2f2262c7-1296-4166-a30d-62b9c6b4a413
²: https://ja.wikipedia.org/wiki/Microsoft_Excel
³: https://support.microsoft.com/ja-jp/office/atan-%E9%96%A2%E6%95%B0-50746fa8-630a-406b-81d0-4a2aed395543

>ソース: Bing との会話 2023/9/12
(1) Atn 関数 - Microsoft サポート. https://support.microsoft.com/ja-jp/office/atn-%E9%96%A2%E6%95%B0-2f2262c7-1296-4166-a30d-62b9c6b4a413.
(2) ATAN 関数 - Microsoft サポート. https://support.microsoft.com/ja-jp/office/atan-%E9%96%A2%E6%95%B0-50746fa8-630a-406b-81d0-4a2aed395543.
(3) Atn関数 | ExcelのVBA関数. https://bing.com/search?q=Excel+ATN%e9%96%a2%e6%95%b0.
(4) Atn関数 | ExcelのVBA関数. https://www.vba-ie.net/function/atn.php.
(5) Atn 関数 (Visual Basic for Applications) | Microsoft Learn. https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/atn-function.
(6) Excel関数のバージョン対応表（2022年2月15日時点）バージョン .... https://aka-aca.com/func_version-01/.
(7) Excel関数で【ATAN】（アークタンジェント）関数と【ATAN2 .... https://onepoint.softcampus.co.jp/mos_onepoint/48155/.

とにかく2000以降追加されたとかそんなことはないようだ。


# 存在するのに存在しない？

関数 エクセル関数にあってVBAにない関数一覧(三角関数) | JPIA
https://www.jp-ia.com/posts/blog208.html

この記事は本記事とは逆にエクセルのワークシート関数主体に記述している。
また、式を展開することでVBA（マクロ）にあるとしている関数がある。
|名称 	| EXCEL |	VBA|
|:---|:----------|:-------|
|アークセカント |	なし |	Arcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) - 1) * (2 * Atn(1))|
|アークコセカント |	なし |	Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1))|
|アークコタンジェント |	なし |	Arccotan(X) = Atn(X) + 2 * Atn(1)|

公式の奇妙な説明がさしているのはアークセカントのような関数を指していると考えられる。

最も、本当はVBAにもそのものずばりの関数はないので、この部分は本来、両者なしとすべきだと思う。
そうしないと、アークコタンジェントは既存のATAN関数で作れるので、ワークシート関数にないと言い切れないからだ。

しかし、一応公式の「存在しない」という回答に従うと、大学や工学で使う三角関数をすべて使うにはVBAを使わないとできない、ということになる。
## 確かに公式もVBAを使う説明をしている
[Excel でカスタム関数を作成する - Microsoft サポート](https://support.microsoft.com/ja-jp/office/excel-%E3%81%A7%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E9%96%A2%E6%95%B0%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-2f06c10b-3622-40d6-a1b2-b6748ae8231f)
> 多数Excel組み込みのワークシート関数が含まれていますが、実行する計算のすべての種類の関数を持つ可能性があります。 ユーザーのデザイナー Excel、すべてのユーザーの計算ニーズを予測できなかった可能性があります。 代わりに、Excelカスタム関数を作成する機能を提供します。この記事で説明します。

> <b>単純なカスタム関数を作成する</b>
カスタム関数 (マクロなど) では、Visual Basic for Applications (VBA)プログラミング言語を使用します。 マクロとは 2 つの重要な点で異なります。 最初に 、Sub プロシージャの代わりに Function プロシージャを使用します。 つまり、Sub ステートメントではなく Function ステートメントで始め 、End Sub ではなく End 関数 で 終わるのです。 次に、アクションを実行する代わりに計算を実行します。 範囲の選択や書式設定を行うステートメントなど、特定の種類のステートメントは、カスタム関数から除外されます。 この記事では、カスタム関数を作成して使用する方法について説明します。 関数とマクロを作成するには、Visual Basicエディター (VBE)を操作します。このエディターは、Excel から別の新しいウィンドウで開きます。