Office アドイン

【2019年6月版】Excel カスタム関数(Excel Custom functions)の紹介

1年半ほど前、Excel カスタム関数について記事を書きました。

上記記事でも書いていますが、ここでいうカスタム関数とは、VBAで定義するユーザー定義関数ではなく、ワークシート上から使える独自関数を、JavaScriptで定義できる機能(= Office アドイン)のことです。

当時とは一部書き方も変わっているので、今回改めて機能を紹介します。

※ Office アドインの概要やテスト環境の構築方法については、下記記事で紹介している自習書をご参照ください。

動作確認環境

  1. OS:Windows 10 Pro バージョン 1809 (OS ビルド 17763.503) x64
  2. Office:Excel バージョン 1906 (ビルド 11727.20064 クイック実行) x86
  3. ローカルサーバー:XAMPP

以下のコードは上記環境で動作確認を行いました。
Excel カスタム関数は2019年6月時点ではまだプレビュー段階であるため、環境によっては動作しない可能性があります。

カスタム関数の構成

カスタム関数は、以下のファイルによって構成されています。

  1. マニフェストファイル
  2. HTMLファイル
  3. スクリプトファイル
  4. JSONメタデータファイル
マニフェストファイル(manifest.xml)

カスタム関数(Office アドイン)を定義するXMLファイルです。
アドイン名や説明、読み込むHTMLファイルやスクリプトファイル、JSONメタデータファイルの場所等を記述します。

また、Namespace要素によって、独自関数の接頭辞(下記コードでは「MYFUNC」)となる名前空間を定義します。
(Id要素の値はGenerate GUIDs online等で作成した値に置き換えてください。)

<?xml version="1.0" encoding="utf-8"?>
<OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bt="http://schemas.microsoft.com/office/officeappbasictypes/1.0" xmlns:ov="http://schemas.microsoft.com/office/taskpaneappversionoverrides" xsi:type="TaskPaneApp">
  <Id>c3808c5a-e48e-497a-9882-e3cbdc96cdb4</Id>
  <Version>1.0</Version>
  <ProviderName>kinuasa</ProviderName>
  <DefaultLocale>ja-JP</DefaultLocale>
  <DisplayName DefaultValue="201906 Custom functions sample" />
  <Description DefaultValue="Custom functionsのサンプルアドインです。" />
  <Hosts>
    <Host Name="Workbook" />
  </Hosts>
  <DefaultSettings>
    <SourceLocation DefaultValue="https://localhost/apps/cf/functions.html"/>
  </DefaultSettings>
  <Permissions>ReadWriteDocument</Permissions>
  <VersionOverrides xmlns="http://schemas.microsoft.com/office/taskpaneappversionoverrides" xsi:type="VersionOverridesV1_0">
    <Hosts>
      <Host xsi:type="Workbook">
        <AllFormFactors>
          <ExtensionPoint xsi:type="CustomFunctions">
            <Script>
              <SourceLocation resid="Functions.Script.Url" />
            </Script>
            <Page>
              <SourceLocation resid="Functions.Page.Url" />
            </Page>
            <Metadata>
              <SourceLocation resid="Functions.Metadata.Url" />
            </Metadata>
            <Namespace resid="Functions.Namespace" />
          </ExtensionPoint>
        </AllFormFactors>
      </Host>
    </Hosts>
    <Resources>
      <bt:Urls>
        <bt:Url id="Functions.Script.Url" DefaultValue="https://localhost/apps/cf/functions.js" />
        <bt:Url id="Functions.Page.Url" DefaultValue="https://localhost/apps/cf/functions.html" />
        <bt:Url id="Functions.Metadata.Url" DefaultValue="https://localhost/apps/cf/functions.json" />
      </bt:Urls>
      <bt:ShortStrings>
        <bt:String id="Functions.Namespace" DefaultValue="MYFUNC"/>
      </bt:ShortStrings>
    </Resources>
  </VersionOverrides>
</OfficeApp>
HTMLファイル(functions.html)

Office アドインの実行に必要なライブラリ(CDN)を読み込むためのファイルです。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <meta http-equiv="Expires" content="0" />
    <title>Sample - Excel Custom functions</title>
    <script src="https://appsforoffice.microsoft.com/lib/1.1/hosted/custom-functions-runtime.js"></script>
  </head>
  <body></body>
</html>
スクリプトファイル(functions.js)

カスタム関数の実体となるスクリプトを記述するファイルです。
CustomFunctions.associateメソッドによって、JavaScript関数と名前空間の紐づけを行います。

function add99(first, second) {
  return first + second + 99;
}
CustomFunctions.associate("ADD99", add99);
JSONメタデータファイル

カスタム関数の説明やパラメーター等、Excel側が必要とする情報を定義するファイルです。

{
  "functions": [
    {
      "id": "ADD99",
      "name": "ADD99",
      "description": "2つの引数に99を足した値を返します。",
      "helpUrl": "http://dev.office.com",
      "result": {
        "type": "number"
      },
      "parameters": [
        {
          "name": "first_num",
          "description": "第一引数",
          "type": "number"
        },
        {
          "name": "second_num",
          "description": "第二引数",
          "type": "number"
        }
      ]
    }
  ]
}

作成したカスタム関数の読み込み

作成したカスタム関数(Office アドイン)は共有フォルダ方式でテストします。
詳しい手順は下記記事、もしくは自習書をご参照ください。

挿入タブの「個人用アドイン」から、上記アドインを追加すると、問題が無ければ下図のようにワークシート上から定義した関数を呼び出せるようになります。

上手くいかない場合は、マニフェストファイルで指定したWebページをInternet Explorerで開いてみて、証明書エラーが表示されないかどうか、まずは確認してください。

ブラウザーの警告が表示される場合は、「自己証明書のhttpsサイトで証明書エラーを非表示にする手順」にあるような方法で、エラーを非表示にする必要があります。

読み込んだカスタム関数の削除方法

読み込んだカスタム関数は下記フォルダに情報が保存されます。
関数の読み込みを解除したいときは、下記フォルダにあるファイルを削除してください。

%LOCALAPPDATA%\Microsoft\Office\16.0\Wef\CustomFunctions

おわりに

Excel カスタム関数の概要や詳しい説明、チュートリアルはOffice デベロッパー センターのリファレンスに記載されています。

上記ページでは、「YO OFFICE」前提でNode.jsを触ったことがある人でないと分かりづらい説明となっているため、必要最小限のコードに絞って、カスタム関数の概要を説明することにしました。

ただ、今回の記事では、マニフェストやメタデータの要素等の説明を端折っているため、詳しいところは、上記公式リファレンスをご参照いただければと思います。

関連記事

  1. Office関連

    コンテンツコントロールに外部XMLのデータをマップするWordマクロ

    Word 2007で追加された機能「コンテンツコントロール」を使うと外…

  2. Office アドイン

    [Officeアドイン]アドイン コマンド(Add-In Commands)の紹介

    前回の記事は“Office アドイン”のAdvent calendar…

  3. Office関連

    Custom UI Editorの最新版がGitHubで公開されました。

    下記記事等で紹介している、リボンUIをカスタマイズするためのツール「C…

  4. Office関連

    Microsoft Translator APIで文字列を翻訳するVBAマクロ

    以前書いた記事で、Google翻訳を使って文字列を翻訳するマクロを紹介…

  5. Office関連

    [Word 2013]表形式のデータ入力にはコレが便利!?「コンテンツ繰り返しコントロール」の紹介

    Wordにはユーザー入力フォームを作るのに便利な機能「コンテンツ コン…

  6. Office関連

    代替テキストを削除するPowerPointマクロ

    PowerPointの図やSmartArt、グループやグラフといった視…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP