Excel アドイン (XLL) 開発における既知の問題Known Issues in Excel XLL Development

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

このトピックでは、Microsoft Excel での XLL 開発で遭遇する可能性のある既知の問題について説明します。This topic describes known issues in Microsoft Excel that you might encounter in XLL development.

XLL のコマンドおよび関数を登録解除するUnregistering XLL Commands and Functions

XLL で関数やコマンドを登録すると、Excel 上で新しいリソース名が作成され、そのリソース名を持つ DLL 関数の参照と関連付けられます。When an XLL registers a function or command, Excel creates a new name for the resource and associates a reference to the DLL function with that name. このリソース名は、xlfRegister 関数の 4 番目の引数である pxFunctionText から取得されます。The name is taken from the fourth argument, pxFunctionText , of the xlfRegister function. また、このリソース名は、ワークシート名を管理する標準のダイアログ ボックスからは非表示になっています。This name is hidden from the normal dialog boxes for managing worksheet names. 関数やコマンドを登録解除するには、xlfSetName 関数を使用してリソース名を削除する必要があります。この際、リソース名を渡しますが、定義は渡しません。To unregister a function or command, you must delete the name by using the xlfSetName function, passing the name but not passing a definition. ただし、バグがあると、この関数ウィザードの一覧からリソース名を削除することができません。However, a bug prevents this from removing the name from the Function Wizard lists.

関数ウィザードにおける引数の説明文字列の切り捨てArgument Description String Truncation in the Function Wizard

PxArgumentHelp1 パラメーターと、その後の xlfRegister 関数のパラメーターはすべて、XLL 関数の引数に相当し、文字列は省略することができます。The pxArgumentHelp1 parameter and all subsequent parameters of the xlfRegister function are optional strings that correspond to the arguments of the XLL function. 引数作成ダイアログ ボックスにヘルプを表示するために、関数ウィザードにはこれらのパラメータが表示されます。The Function Wizard displays these to provide help in the argument construction dialog box. ダイアログ ボックスに表示する際、最後の引数に相当する文字列が Excel 上で 1 文字または 2 文字切り捨てられる場合があります。Sometimes Excel truncates the string that corresponds to the final argument by one or two characters when displaying it in the dialog box. これを回避するには、最終文字列の末尾に 1 文字または 2 文字分のスペースを追加します。You can avoid this by adding one or two spaces to the end of the final string.

バイナリ名のスコープ制限Binary Name Scope Limitation

バイナリ名とそのデータは、作成された時点でアクティブだったワークシートが再度アクティブになったときにのみ取得できます。ワークシート関数では、ワークブック内のワークシートをアクティブにすることはできないため (コマンドでのみ可能)、バイナリ名の適用は非常に制限されています。特定のワークシートからのみ呼び出されるコマンドがあれば、バイナリ名を使用してコマンドに関するデータを格納することもできます。Binary names and their data can be retrieved only when the worksheet that was active at the time they were created is again active. Because worksheet functions cannot activate worksheets within a workbook (only commands can do this), applications of binary names are very limited. If you have a command that is only invoked from a particular worksheet, for example, you could use a binary name to store command-related data.

xlSet と配列数式を含むワークブックxlSet and Workbooks with Array Formulas

Excel 2003 以前のバージョンにおいて、作業中ではないワークシートの範囲に値を割り当てようとすると、xlSet 関数 はエラーになり、作業中のシート上の同等範囲に配列数式が入ります。In Excel 2003 and earlier versions, the xlSet function fails if you try to assign values to a range on a worksheet that is not the active worksheet, where the equivalent range on the active sheet contains an array formula. In this case, Excel displays the message "You cannot change part of an array." This was fixed in xlxlshort. この場合、「配列の一部を変更できません」というメッセージが表示されます。In this case, Excel displays the message "You cannot change part of an array." この問題は、Excel 2007 で修正されました。This was fixed in Excel 2007.

データ テーブルで循環参照が可能Circular References are Tolerated in Data Tables

Excel では現在、データ テーブルのベースとなる計算において、同テーブル上の値を参照している場合でもエラーになりません。このようなシナリオはまれなことですが、データ テーブルの値を計算する数式の作成や変更には注意が必要です。Excel currently does not raise an error if the calculation that a data table is based on refers to something in the table itself. As unlikely as this scenario might be, you should be careful when you are creating or modifying formulas that are used to calculate data table values.

整数 XLOPER12 を XLOPER に変換するConverting an Integer XLOPER12 to an XLOPER

整数型 xltypeInt は、XLOPER12 データ型では 32 ビットの符号付き整数ですが、XLOPER データ型では 16 ビット符号付き整数であるため、整数 XLOPER12 の値の中には、整数 XLOPER に含められないものがある可能性があります。Excel 内部でこのデータ型を変換する場合は、データ型を浮動小数点 xltypeNum XLOPER に変換してこの問題を回避します。Because the integer type xltypeInt is a 32-bit signed integer in the XLOPER12 data type, but it is only a 16-bit signed integer in the XLOPER data type, it is possible that some integer XLOPER12 values cannot be contained in an integer XLOPER. Where Excel converts this type internally, it gets around this problem by converting the type to a floating-point xltypeNum XLOPER.

フレームワーク関数 XLOper12ToXLOper は、この動作を反映して、Excel 内部の動作と一致するようにします。この関数を呼び出す際、返される XLOPER が常に xltypeInt であると想定しないでください。my_xloper 型が xltypeNum の場合に my_xloper.val.w を読み出すと、false の値が返されます。The Framework XLOper12ToXLOper function mirrors this behavior to be consistent with Excel internally. When you call this function, you should not assume that the returned XLOPER will always be xltypeInt; reading my_xloper.val.w gives a false value if the my_xloper type is xltypeNum.

引数をインプレースで変更して XLOPER または XLOPER12 を返すReturning XLOPER or XLOPER12 by Modifying Arguments in Place

Excel では引数をインプレースで変更して、XLOPER または XLOPER12 を返すように関数を登録することができます。しかし、XLOPER/ XLOPER12 引数がメモリをポイントしており、そのポインターが DLL 関数の戻り値で上書きされると、Excel でメモリ リークが発生する可能性があります。Excel でエラーは表示されませんが、結果的にクラッシュする恐れがあります。また、DLL で戻り値用のメモリが割り当てられている場合、Excel はそのメモリを解放しようとするため、すぐにアプリケーションがクラッシュする恐れがあります。そのため、XLOPER/ XLOPER12 引数はインプレースで変更しないでください。XLOPER 引数や XLOPER12 引数はすべて、必ず読み取り専用として扱ってください。Excel permits the registration of functions that return an XLOPER or XLOPER12 by modifying an argument in place. However, if an XLOPER/ XLOPER12 argument points to memory, and the pointer is then overwritten by the return value of the DLL function, Excel can leak memory. Excel does not display an error, but it might eventually crash. Also, if the DLL allocated memory for the return value, Excel might try to free that memory, which could cause an immediate application crash. Therefore, you should not modify XLOPER/ XLOPER12 arguments in place. All XLOPER or XLOPER12 arguments should be treated as strictly read-only.

詳細については、「Excel のメモリ管理」を参照してください。For more information, see Memory Management in Excel.

関連項目See also

XLOper12ToXLOperXLOper12ToXLOper

Excel XLL の開発Developing Excel XLLs

Excel XLL SDK API 関数リファレンスExcel XLL SDK API Function Reference

Excel のメモリ管理Memory Management in Excel