Excel での XLL コードへのアクセスAccessing XLL code in Excel

適用対象: Excel 2013 | Office 2013 | Visual StudioApplies to: Excel 2013 | Office 2013 | Visual Studio

XLL に含まれる関数やコマンドに Microsoft Excel でアクセスできるようにするには、次の事柄が必要となります。To be accessible in Microsoft Excel, the functions and commands that an XLL contains:

  • XLL によってエクスポートされなければなりません。Must be exported by the XLL.

  • Excel に登録する必要があります。Must be registered with Excel.

関数とコマンドを Excel に登録するRegistering functions and commands with Excel

登録することによって、DLL エントリ ポイントについて次のことを Excel に指示します。Registration tells Excel the following about a DLL entry point:

  • 非表示かどうか。また関数の場合には、関数ウィザードに表示するかどうか。Whether it is hidden or, if a function, whether it is visible in the Function Wizard.

  • XLM マクロシートからのみ呼び出せるか、あるいはワークシートからも呼び出せるか。Whether it is callable only from an XLM macro sheet, or also from a worksheet.

  • コマンドの場合、ワークシート関数か、またはマクロシート同等関数かどうか。If a command, whether it is a worksheet function or a macro sheet equivalent function.

  • XLL/DLL エクスポート名、および Excel で使用する名前。What its XLL/DLL export name is, and what name you want Excel to use.

  • 関数の場合:If it is a function:

    • 返すデータ型、および引数として取るデータ型。What data types it returns and takes as arguments.

    • 引数をインプレースで変更して結果を返すかどうか。Whether it returns its result by modifying an argument in place.

    • 揮発性かどうか。Whether it is volatile.

    • スレッド セーフであるかどうか (Excel 2007 以降でサポートされています)。Whether it is thread safe (supported starting in Excel 2007).

    • 関数貼り付けウィザードとオートコンプリート エディターに、関数の呼び出しを支援するために表示するテキスト。What text the Paste Function Wizard and AutoComplete editor should display to help with calling the function.

    • リスト表示に使用する関数カテゴリ。Which function category it should be listed under.

前述の点は、すべて C API 関数の xlfRegister を使用して行えます。この関数は XLM 関数の REGISTER に相当します。This is all achieved using the C API function xlfRegister, equivalent to the XLM function REGISTER.

Excel から直接 XLL 関数を呼び出すCalling XLL functions directly from Excel

XLL ワークシート関数とマクロシート関数を登録すると、組み込み関数を呼び出すことが可能な次に示すすべての場所からそれらも呼び出せます。Once they are registered, XLL worksheet and macro sheet functions can be called from anywhere a built-in function can be called from:

  • ワークシートの単一セルまたは配列数式。A single-cell or array formula on a worksheet.

  • マクロシートの単一セルまたは配列数式。A single-cell or array formula on a macro sheet.

  • 定義された名前の定義。The definition of a defined name.

  • 条件付き書式のダイアログ ボックスの、条件と制限のフィールド。The condition and limit fields in a conditional format dialog box.

  • C API 関数 xlUDF を介して他のアドインから。From another add-in via the C API function xlUDF.

  • Application.Run メソッドを介して Visual Basic for Applications (VBA) から。From Visual Basic for Applications (VBA) via the Application.Run method.

C API 関数 xlfCaller を使用すると、関数内の呼び出し元セルへの参照またはセルの範囲を取得できます。関数がセルの条件付き書式の式から呼び出された場合、関連する 1 つまたは複数のセルへの参照が返されます。したがって、セルの数式に XLL 関数が含まれているとは限りません。関数が VBA ユーザー定義関数 (UDF) から呼び出された場合、xlfCaller は VBA 関数を呼び出したセルのアドレスを再び返します。詳細については、「xlfCaller」を参照してください。You can obtain a reference to the calling cell or range of cells within your function using the C API function xlfCaller. If the function was called from the cell's conditional format expression, you are still returned a reference to the associated cell or cells, so you cannot assume that the cell's formula contains the XLL function. If your function was called from a VBA user-defined function (UDF), xlfCaller again returns the address of the cells that called the VBA function. For more information, see xlfCaller.


また Excel は、[関数貼り付けウィザード] および [置換] ダイアログ ボックスから XLL 関数コードを呼び出します。Excel also calls XLL function code from the Paste Function Wizard and Replace dialog boxes. [関数引数貼り付け] ダイアログ ボックスではコードの通常の実行を制限する必要がある場合があります。特に、関数の実行に長時間かかる可能性がある場合にはそう言えます。You might need to restrict your code's normal running in the case of the Paste Function Arguments dialog box, especially where your function can take a long time to execute. 関数がこれらのいずれかのダイアログ ボックスから呼び出されているかどうかを調べるには、そのいずれかが前面のウィンドウであるかどうか、前面のウィンドウであればそのどれであるかを判別するコードを、すべての開いているウィンドウで繰り返して、プロジェクト内で実装する必要があります。To detect if your function is being called from either of these dialog boxes, you must implement some code in your project that iterates through all the open windows to determine if the front window is one of these dialog boxes, and, if so, which one.

Excel から直接 XLL コマンドを呼び出すCalling XLL commands directly from Excel

XLL コマンドを登録すると、他のユーザー定義マクロを呼び出すことができる次に示すあらゆる方法で XLL コマンドを呼び出すことができます。Once they are registered, XLL commands can be called in all the ways that other user-defined macros can be called:

  • ワークシートに埋め込まれているコントロール オブジェクトに関連付けることによって。By being associated with a control object embedded on a worksheet.

  • [マクロの実行] ダイアログ ボックスから。From the Run Macro dialog box.

  • Application.Run メソッドを使用して VBA ユーザー定義マクロから。From a VBA user-defined macro using the Application.Run method.

  • カスタマイズされたメニュー項目またはツールバーから。From a customized menu item or toolbar.

  • コマンドを登録するときにセットアップされるショートカット キーボード操作を使用して。Using a shortcut keystroke set up when registering the command.

  • 指定したイベントがトラップされるときに実行するコマンドとして。As the command to be run when a specified event is trapped.


XLL コマンドは非表示で、Excel のダイアログ ボックスで使用できるマクロの一覧に表示されません。ただし、[マクロ名] フィールドに手動で入力できます。Excel では、それらのダイアログ ボックスで、DLL エクスポート名ではなく登録されたとおりの名前であることが必要となります。XLL commands are hidden in that they do not appear on the list of available macros in Excel dialog boxes. But they can be entered manually into the macro name field. Excel expects the registered-as name in these dialog boxes, not the DLL export name.

Excel に登録されているすべての XLL コマンドは、次の形式であることが Excel で想定されています。All XLL commands registered with Excel are assumed by Excel to be of the following form:

short WINAPI xll_cmd_name(void)
// Function code...
    return 1;

Excel は戻り値を無視します。ただし、XLM マクロ シートから呼び出されたものを除きます (この場合、戻り値は TRUE または FALSE に変換されます)。そのため、コマンドが正常に実行された場合は 1 を返す必要があります。また、コマンドが失敗したり、ユーザーによって取り消されたりした場合は 0 を返す必要があります。Excel ignores the return value unless it is called from an XLM macro sheet, in which case the return value is converted to TRUE or FALSE. You should therefore return 1 if your command executed successfully, and 0 if it failed or was canceled by the user.

C API 関数の xlfCaller を使用すると、コマンドが呼び出された方法についての情報を取得できます。詳細については、「xlfCaller」を参照してください。You can obtain information about how your command was invoked using the C API function xlfCaller. For more information, see xlfCaller.

Excel 2007 以降のユーザー インターフェイスは以前のバージョンのものとは大きく異なります。ほとんどの場合、カスタム メニュー バー、メニュー、サブメニュー、メニュー項目、ユーザー設定ツールバー、ツールバー ボタンの追加と削除を行える C API 関数が引き続きサポートされています。ただし、必ずしも、ユーザーがこれまでに慣れている方法で追加項目が使用可能になるわけではありません。追加機能が引き続き利用できるかどうかを注意して確認し、利用できない場合にはバージョン固有のカスタマイズを実装してください。Excel 2007 以降、ユーザー インターフェイスはマネージ コード モジュールを使用して最適の方法でカスタマイズされていて、XLL コマンドと密に連動させることができます。Starting in Excel 2007 user interface is very different from earlier versions. The C API functions that permit the addition and deletion of custom menu bars, menus, submenus, menu items, custom toolbars and toolbar buttons are still supported in most cases. However, they may not always make the added item available in a way that your users are familiar with. You should carefully check that any added functionality is still accessible, or implement a version-specific customization. Starting in Excel 2007 the user interface is best customized by using a managed code module that can then be tightly coupled to your XLL commands.

関連項目See also