Excel LAMBDA関数をExcel Labsアドインで快適に開発する

Excel LAMBDA関数の作成ですが、デバッグしにくいですし、IDEの支援がないので、まぁまぁメンドクサイです。
で、便利なツールをExcelアドインの形式でマイクロソフトが提供してくれているので、ご紹介。

# まずはExcelアドインのインストール
次のURLから入手。
[https://appsource.microsoft.com/ja-jp/product/Office365/WA200003696](https://appsource.microsoft.com/ja-jp/product/Office365/WA200003696)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76786/981e7485-01ad-9976-d8ef-90e9217acd5f.png)

インストールが完了すると、「ホーム」リボンに「Excel Labs」が登録されていると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76786/03f2b435-1eba-157d-f6fc-4fb23fcb0c57.png)


# セル内のLAMBDA関数の編集とデバッグ
## 編集
「Excel Labs」ボタンをクリックすると、下図のように画面右側に編集画面が表示されます。
「Grid」タブをクリックし、A1セルにフォーカスを当て、編集画面でLAMBDA関数を作っていきます。
Ctrl+Sで上書き保存するか、フロッピーディスクアイコン(今時この記号でよいのだろうか？)をクリックすればセルにLAMBDA関数が反映されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76786/b4b60a00-e8a8-c85d-ac43-064591b33d49.png)

## デバッグ
右上の虫アイコンをクリックすると下段にデバッグ画面が開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76786/06af625d-3094-c543-d0fa-78b465b45a30.png)

緑三角アイコンをクリックすると折りたたまれた関数をドリルダウンします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76786/e67a8f06-9c7a-580e-87b0-12e0ebac659e.png)

# 名前定義したLAMBDA関数の編集とデバッグ
Excel Labs画面で「Modules」タブをクリックすると、編集画面が開きます。
ここでLAMBDA関数を作ります。ここでうれしいのは、
- コメントが書ける事。
- モジュールという概念があること。この図では、デフォルトの「Workbook」モジュールですが、モジュールの中に複数のLAMBDA関数が書けるので、ある程度のまとまりで関数を管理したいときに便利。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76786/c1ece191-62f8-f4e4-e3e4-bd1e38ee46f8.png)

## モジュールを作って関数を編集
「＋New」ボタンをクリックすると、モジュール名を指定するダイアログが表示されるので、名付けたいモジュール名、例えば「MY_LIB」と入力して「Add」ボタンをクリックすると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76786/111c5d0b-e9d6-2b27-abf3-cf43630e7fbc.png)
次のように「MY_LIB」の編集画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76786/24b29b45-b561-5055-2e8d-ec8caa19b053.png)
ここに、次のような書式で関数を作っていきます。
```javascript:
関数名=LAMBDA( .... );
```
例えばこんな感じに入力して、保存します。
```javascript:
fncMY_ADD=LAMBDA(a, b, a+b);
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76786/0292da2e-a53f-56fc-c064-dc39bb92b0b8.png)

すると、名前の管理で定義を見ると次のようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76786/9dc556d1-3886-52cb-a8d8-59b37b59b29b.png)

「Excel Labs」で名前定義を見ることができて、「Names」タブの「Modules」タブをクリックすると、モジュールで定義した関数を一覧で見ることができます。鉛筆ボタンをクリックすると編集画面に遷移します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76786/163f9d8e-6a0a-505f-c367-47a43ae6cc0e.png)

「Names」タブには、他にも「Functions」や「Ranges」、「Formulas」のタブがありますが、これらは他に名前定義しているものが見られます。

## 名前定義した関数のデバッグ
どこか適当なセル、例えばF2セルに先ほどの「fncMY_ADD」関数を入力して実行してみます。
モジュール化しているので、接頭辞に「MY_LIB」をつける必要があります。入力予測してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76786/df8ce63d-faa3-b671-239c-b6fd613db223.png)

例えばこんな感じで入力すると、結果は期待値通り「3」が返ってきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76786/1aecb959-6ad2-9beb-73c2-70129fffc6ff.png)

デバッグは、F2セルが当たっている状態で、「Grid」タブをクリックしてデバッグ画面を表示すれば内容を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76786/5c0b9f00-6de8-e958-c900-5c8eb0cd9321.png)