【Excel】Javasprictでカスタム関数を作る

2024年7月14日

Excelでカスタム関数と言えば、VBAをイメージされる方が多いと思います。もちろん、今でもVBAでカスタム関数は作れます。しかしながら、VBAはWeb版Excelでは実行できないようになっていることから、今後VBAは廃止されるのではないかと疑念を抱いている人も多いと思います。

じつは2020年代に入ってVBA以外にカスタム関数を作る方法が用意されまして、Javasprictで記述してカスタム関数にする方法がありますので紹介します。(JavasprictというとGoogleスプレッドシートのGASを想像される方も多いと思いますが、恐らくGASを意識して実装されたと思われます。)

ExcelでJavascriptのカスタム関数を作る

必要な環境

Microsoftが提供しているScrictLabという無料ツールをインストールする必要があります。このツールはOffice JavaScript APIが使えるようになるツールだそうです。

それで、このScrictLabは2013以降のExcelでないと対応していません。

  • Excel2013以降またはExcel365
  • ScrictLabをインストール済み

Scrictlabインストール方法

Microsoft公式サイトから「Get it now」をクリックしてインストールします

ちなみに、ScriptLabはExcel、Word、Powerpointで共通ですので、インストールするとExcelのみならずWordやPowerpointでもJavaScript APIが使えるようになります。

カスタム関数を作る手順

まずはScriptLabのライブラリにある関数をカスタム関数化して使ってみましょう。

  1. Excelを起動する
  2. リボンメニューから「ScriptLab」のタブをクリック
  3. 「Code」アイコンをクリック
  4. Excelのウィンドウの右側にScriptLabの作業エリアが現れる。
  5. ScriptLabの作業エリアの左上のΞをクリック
  6. 「Samples」をクリック
  7. 「Custom Functions」の中から試したい関数をクリック
    (ここではBasic custom functionを選んでSphere Volumeという球の体積を球の半径rを与えられた時にいわゆる「三分の4πr3乗」の公式により求めるカスタム関数を有効化します。)
  8. 「Register」をクリック(関数が有効化される)
  9. 適当なセルで「=sphere」と入力すると「SCRIPTLAB.(以下省略)」というような関数が候補として表示されるので自分でRegisterした関数を選び、半径の値をセルから参照するなり、直打ちするなりする。
  10. 4 x π x r^3 ÷3 の計算結果が表示されます。
    半径rとして3のセルを参照すれば、113.0973と表示されるはずです。

code解説

では今回作ったjavascriptのcodeを解説します。今回のコードは以下のコードでした。

/**
 * Calculates the volume of a sphere.
 * @customfunction
 * @param {number} radius
 * @returns The volume of the sphere.
 */
function sphereVolume(radius) {
  return (Math.pow(radius, 3) * 4 * Math.PI) / 3;
}

JSDocコメントでカスタム関数ですよという宣言と関数で使う変数の種類と名前を宣言する必要があります。

3行目の" * @customfunction"がカスタム関数という宣言になります。カスタム関数作る場合はJSDocコメントのどの行でもいいのでこの宣言が必要になります。

4行目の"* @param {number} radius"はなくても大丈夫です。変数が数字でradiusという名前にするというコメントです。

JSDocコメント以外の部分は比較的普通のJavaScriptです。"function ○○(xxx) { }"で○○が関数名になります。セルに入力するする時は"=SCRIPTLAB.DATATYPESCUSTOMFUNCTIONS.〇〇"となります。”DATATYPESCUSTOMFUNCTIONS”の部分はSamplesから選ぶと違う名前になったりします。またxxxの部分が引用する変数の名前になります。

3つの変数を引用するカスタム関数例(ヘロンの公式)

1つの変数を使ったカスタム関数は分かったと思います。続いて、3つの変数を使う例を考えてみます。

3つの変数を使う例としてヘロンの公式で3角形の3辺の長さから3角形の面積を求めるカスタム関数を作ってみます。先にコードを示します。

/**
 * heron fomula from three length side.
 * @customfunction 
 * @returns area.
 */

function heron(first, second, third) {
  var s = (first + second + third) / 2;
  return Math.sqrt(s * (s - first) * (s - second) * (s - third));
}

このように、3つの変数を引用する場合は
“function ○○(xxx1, xxx2, xxx3)"
という感じで書きます。

実際にセルに入力すると下の画像のような感じになります。なお画像では、5, 6, 7を変数としていますが、三角形が成り立つためには3辺の長さの組み合わせが制限がかかりますので、5,6,7の組み合わせは恐らくないです。3辺の長さが6, 5, 5でヘロンの公式の関数で面積が12となればOKです。

JSDoc部分の説明文を日本語にすると日本人と一緒に仕事する場合はいいかも

JSDoc部分の説明文を日本語にすると下の画像のようにExcelに関数の説明が日本語で表示されるようになります。まぁ、一緒に働く人が日本語ネイティブとは限らないと思いますので、ケースバイケースですが。もちろん、英語・日本語併記も可能です。

/**
 * ヘロンの公式より3辺の長さから面積を求める
 * @customfunction
 * @returns heron formula.
 */

変数の説明文

GoogleのGASで作るカスタム関数の方ですと、変数の方もJSDocの部分に書き加えると日本語で説明文を表示できるようになりますが、今のところExcelは変数の説明文には対応していなそうです。

JavaScriptのカスタム関数が使えない環境

JavaScriptのカスタム関数は以下のExcelでは使えません

  • iPad版Office
  • ボリュームライセンスのExcel2013, 2016, 2019

関連ページ