xlfRegister (形式 1)xlfRegister (Form 1)

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

Microsoft Excel から呼び出された DLL コマンドまたは XLL コマンドから呼び出すことができます。これは、Excel XLM マクロ シートからの REGISTER の呼び出しと同等です。Can be called from a DLL or XLL command that has itself been called by Microsoft Excel. This is equal to calling REGISTER from an Excel XLM macro sheet.

xlfRegister は、2 つの形式で呼び出すことができます。xlfRegister can be called in two forms:

  • xlfRegister (形式 1): コマンドまたは関数を個々に登録します。xlfRegister (Form 1): Registers a single command or function.

  • xlfRegister (形式 2): XLL を読み込んでアクティブ化します。xlfRegister (Form 2): Loads and activates an XLL.

この関数を「形式 1」で呼び出すと、Excel が DLL の関数またはコマンドを使用できるようになります。使用カウントを 1 に設定すると、登録 ID が返されます。この登録 ID は、後から関数を呼び出すときに使用できます (xlUDF 関数または xlfCall 関数を使用)。Called in Form 1, this function makes a DLL function or command available to Excel, sets its use count to 1, and returns its registration ID, which can be used to call the function later by using the xlUDF or the xlfCall function. 登録 ID は、xlfUnregister (形式 1) を使用している関数の登録解除にも使用されます。The registration ID is also used to unregister the function using xlfUnregister (Form 1). 関数が登録されていると、xlfRegister を呼び出すたびに使用カウントが増分されます。If the function has been registered, calling xlfRegister again increments its use count.

関数のこの形式では、非表示の名前 (関数のテキスト引数 pxFunctionText) も定義します。これを評価すると、関数またはコマンドの登録 ID になります。This form of the function also defines a hidden name which is the function text argument, pxFunctionText, and which evaluates to the registration ID of the function or command. 関数を登録解除するときには、この名前を xlfSetName を使用して削除します。When you unregister the function, delete this name using the xlfSetName. 詳しくは、「Excel XLL 開発での既知の問題」をご覧ください。For more information, see Known Issues in Excel XLL Development.

Excel12(xlfRegister, LPXLOPER12 pxRes, int iCount,
    LPXLOPER12 pxModuleText,   LPXLOPER12 pxProcedure,
    LPXLOPER12 pxTypeText,     LPXLOPER12 pxFunctionText,
    LPXLOPER12 pxArgumentText, LPXLOPER12 pxMacroType,
    LPXLOPER12 pxCategory,     LPXLOPER12 pxShortcutText,
    LPXLOPER12 pxHelpTopic,    LPXLOPER12 pxFunctionHelp,
    LPXLOPER12 pxArgumentHelp1, LPXLOPER12 pxArgumentHelp2,
        ...);

パラメーターParameters

pxModuleText (xltypeStr)pxModuleText (xltypeStr)

関数が含まれている DLL の名前。この名前は、登録されている関数も現在実行中の DLL 内にある場合、XLL 専用の関数 xlGetName を呼び出すことで取得できます。The name of the DLL that contains the function. This can be obtained by calling the XLL-only function xlGetName if the function registered is also within the currently executing DLL.

pxProcedure (xltypeStr または xltypeNum)pxProcedure (xltypeStr or xltypeNum)

文字列の場合は、呼び出す関数の名前です (DLL コード内で示された名前)。数字の場合は、呼び出す関数のエクスポートの順序番号です。明確にするために、常に文字列形式を使用します。If a string, the name of the function to call as it appears in the DLL code. If a number, the ordinal export number of the function to call. For clarity, always use the string form.

pxTypeText (xltypeStr)pxTypeText (xltypeStr)

関数への引数の型と関数の戻り値の型を指定する、省略可能な文字列。詳しくは、「解説」セクションを参照してください。この引数は、xlAutoRegister function または xlAutoRegister12 を含むスタンドアロン DLL (XLL) では省略できます。 An optional string that specifies the types of arguments to the function and the type of the return value of the function. For more information, see the Remarks section. This argument can be omitted for a stand-alone DLL (XLL) that includes an xlAutoRegister function or xlAutoRegister12.

注意

xlAutoRegister12 は Excel 2007 でのみサポートされています。xlAutoRegister12 is only supported in Excel 2007.

この引数なしで xlfRegister が呼び出されると、Excel は関数を適切に登録するために、この情報を提供する xlAutoRegister または xlAutoRegister12 を呼び出します (指定した DLL に、どちらかが存在する場合)。If xlfRegister is called with this argument missing, Excel calls xlAutoRegister or xlAutoRegister12, if either exists in the specified DLL, which should then correctly register the function by providing this information.

pxFunctionText (xltypeStr)pxFunctionText (xltypeStr)

関数ウィザードに表示される関数名。この引数は省略可能です。省略すると、この関数は関数ウィザードで使用できなくなります。関数の登録 ID を使用して、XLM マクロ シートから CALL 関数を使用した場合にのみ呼び出せるようになります。そのため、通常のワークシートの使用では、この引数は必須として取り扱う必要があります。The function name as it will appear in the Function Wizard. This argument is optional; if it is omitted, the function is not available in the Function Wizard, and can only be called using the CALL function using the functions registration ID from an XLM macro sheet. Therefore, for ordinary worksheet use, you should handle this argument as required.

pxArgumentText (xltypeStr)pxArgumentText (xltypeStr)

関数への引数について説明する、省略可能な文字列。An optional text string that describes the arguments to the function. この文字列は関数ウィザードでユーザーに表示されます。The user sees this in the Function Wizard. 省略すると、Excel は基本的な説明を pxTypeText から作成します。If it is omitted, Excel constructs basic descriptions from pxTypeText.

pxMacroType (xltypeNum または xltypeInt)pxMacroType (xltypeNum or xltypeInt)

XLL のエントリ ポイントの種類を示す、省略可能な引数。既定値は、省略されている場合は、1 です。An optional argument that indicates the type of XLL entry point. The default value, if it is omitted, is 1.

pxMacroType valuepxMacroType value
.00
1-d1
pbm-22
ワークシートから呼び出し可能Can be called from a worksheet
はいYes
はいYes
いいえNo
マクロ シートから呼び出し可能Can be called from a macro sheet
はいYes
はいYes
はいYes
定義済みの名前の定義から呼び出し可能Can be called from a defined name definition
はいYes
はいYes
はいYes
条件付き書式の式から呼び出し可能Can be called from a conditional format expression
はいYes
はいYes
いいえNo
ワークシート関数の関数ウィザードに表示されるListed in the Function Wizard for worksheet functions
いいえNo
はいYes
いいえNo
マクロ シート関数の関数ウィザードに表示されるListed in the Function Wizard for macro sheet functions
いいえNo
ありYes
はいYes

実際には、ワークシート関数には 1、ワークシートから呼び出すマクロ シートと同等の関数 (タイプ # として登録されたもの) には 1、コマンドには 2 を使用する必要があります。In practice, you should use 1 for worksheet functions, 1 for macro sheet equivalent functions (registered as type #) that you want to call from the worksheet, and 2 for commands.

注意

XLL コマンドは隠されているため、実行中のマクロのダイアログ ボックスには表示されません。ただし、有効なコマンド名が必要になる場所では、その名前を入力できます。XLL commands are hidden and not displayed in dialog boxes for running macros, although their names can be entered anywhere a valid command name is required.

pxCategory (xltypeStr または xltypeNum)pxCategory (xltypeStr or xltypeNum)

省略可能な引数。新しい関数またはコマンドが、どのカテゴリに属するかを指定できます。関数ウィザードは、関数を種類 (カテゴリ) ごとに分類します。カテゴリ名または連番を指定できます。この番号は、関数ウィザードに表示されるカテゴリの位置を表します。詳細については、「カテゴリ名」セクションを参照してください。省略すると、ユーザー定義のカテゴリと見なされます。An optional argument that enables you to specify which category that the new function or command should belong to. The Function Wizard divides functions by type (category). You can specify a category name or a sequential number, where the number is the position in which the category appears in the Function Wizard. For more information, see the "Category Names" section. If it is omitted, the User Defined category is assumed.

pxShortcutText (xltypeStr)pxShortcutText (xltypeStr)

大文字と小文字が区別される 1 文字の文字列。このコマンドに割り当てるコントロール キーを指定します。たとえば、"A" の場合は、このコマンドを CONTROL + SHIFT + A に割り当てます。この引数は省略可能です。また、コマンド専用です。A one-character, case-sensitive string that specifies the control key assigned to this command. For example, "A" assigns this command to CONTROL+SHIFT+A. This argument is optional and is used for commands only.

pxHelpTopic (xltypeStr)pxHelpTopic (xltypeStr)

ヘルプ ファイル (.chm または .hlp) への省略可能な参照。このファイルは、カスタム関数が表示されているときに、ユーザーが [ヘルプ] ボタンをクリックすると表示されます。An optional reference to the Help file (.chm or .hlp) to display when the user clicks the Help button (when your custom function is displayed). filepath!HelpContextID または https://address/path_to_file_in_site!0 の形式になります。Can be in the form filepath!HelpContextID or https://address/path_to_file_in_site!0. "!" の前と後のどちらの部分も必須です。Both parts before and after the "!" are required. HelpContextID には、単一引用符を含むことはできません。これは、Excel によって十進数形式の 4 バイトの長さの符号無し整数に変換されます。HelpContextID must not contain single quotes, and will be converted by Excel to an unsigned integer 4 bytes long, in decimal form. URL 形式を使用すると、Excel は参照されるヘルプ ファイルのみを開きます。When using the URL form, Excel opens only the referenced help file.

pxFunctionHelp (xltypeStr)pxFunctionHelp (xltypeStr)

省略可能な文字列。カスタム関数が選択されたときに関数ウィザードに表示される説明です。An optional string that describes your custom function when it is selected in the Function Wizard.

pxArgumentHelp1 (xltypeStr)pxArgumentHelp1 (xltypeStr)

省略可能。Optional. 関数ウィザードで関数が選択されたときに、その関数のカスタム引数を説明する最初の文字列。The first of the strings that describe the custom arguments of the function when the function is selected in the Function Wizard. Excel 2003 以前では、xlfRegister は最大 30 個の引数を受け取ることができるため、関数の最初の 20 個のみの引数に関するヘルプを提供できます。In Excel 2003 and earlier, xlfRegister can take, at most, 30 arguments so that you can provide this help for the first 20 of your function arguments only. Excel 2007 以降では、xlfRegister は最大 255 個の引数を受け取ることができるため、最大 245 個の関数のパラメーターに関するヘルプを提供できます。Starting in Excel 2007, xlfRegister can take up to 255 arguments so that you can provide this help for up to 245 function parameters.

プロパティの値/戻り値Property value/Return value

登録が成功していた場合、この関数は関数の登録 ID (xltypeNum) を返します。この登録 ID は、DLL 内の xlUDFxlfUnregister の呼び出しに使用できます。また、XLM マクロ シートの CALLUNREGISTER でも使用できます。それ以外の場合は、#VALUE! エラーを返します。If registration was successful, this function returns the register ID of the function (xltypeNum), which can be used in calls to xlUDF and xlfUnregister in a DLL, or with CALL and UNREGISTER in an XLM macro sheet. Otherwise, it returns a #VALUE! error.

備考Remarks

データ型Data types

pxTypeText 引数では、戻り値のデータ型と、DLL 関数またはコード リソースへの引数のすべてのデータ型を指定します。The pxTypeText argument specifies the data type of the return value and the data types of all arguments to the DLL function or code resource. pxTypeText の最初の文字で、戻り値のデータ型を指定します。The first character of pxTypeText specifies the data type of the return value. 残りの文字で、すべての引数についてのデータ型を示します。The remaining characters indicate the data types of all the arguments. たとえば、DLL 関数が浮動小数点数を返し、引数として整数と浮動小数点数を受け取る場合は、pxTypeText の引数を「BIB」にする必要があります。For example, a DLL function that returns a floating-point number and takes an integer and a floating-point number as arguments would require "BIB" for the pxTypeText argument.

XLL とのデータ交換のために Excel で使用されるデータ型と構造体については、次の 2 つの表にまとめています。The data types and structures used by Excel to exchange data with XLLs are summarized in the following two tables.

最初の表は、Excel のすべてのバージョンでサポートされる型を示しています。The first table lists the types supported in all versions of Excel.

データ型Data type 値渡しPass by value 参照渡し (ポインター)Pass by ref (pointer) コメントComments
BooleanBoolean
AA
LL
short [int] (0 = false または 1 = true)short [int] (0=false or 1=true)
doubledouble
BB
EE
char *char *
C、FC, F
Null で終了する ASCII バイト文字列Null-terminated ASCII byte string
unsigned char *unsigned char *
D、GD, G
カウント付き ASCII バイト文字列Counted ASCII byte string
unsigned short [int]unsigned short [int]
HH
16 ビットの Word16-bit WORD
[signed] short [int][signed] short [int]
II
MM
16 ビットの符号付き整数16-bit signed integer
[signed long] int[signed long] int
JJ
NN
32 ビットの符号付き整数32-bit signed integer
FPFP
KK
浮動小数点配列構造Floating-point array structure
配列Array
OO
次の 3 つの引数が渡されます。Three arguments are passed:
- unsigned short int*- unsigned short int *
- unsigned short int*- unsigned short int *
- double []- double []
XLOPERXLOPER
PP
可変型のワークシートの値および配列Variable-type worksheet values and arrays
RR
値、配列、および範囲の参照Values, arrays, and range references

Excel 2007 では、大規模なグリッドと長い Unicode 文字列をサポートするために、次のデータ型が導入されました。In Excel 2007 the following data types were introduced to support the larger grids and long Unicode strings.

データ型Data type 値渡しPass by value 参照渡し (ポインター)Pass by ref (pointer) コメントComments
unsigned short *unsigned short *
C%、F%C%, F%
Null で終了する Unicode ワイド文字列Null-terminated Unicode wide-character string
unsigned short *unsigned short *
D%、G%D%, G%
カウント付き Unicode ワイド文字文字列Counted Unicode wide-character string
FP12FP12
K%K%
大きなグリッドの浮動小数点配列構造Larger grid floating-point array structure
配列Array
O%O%
次の 3 つの引数が渡されます。Three arguments are passed:
- signed int * / RW*- signed int * / RW *
- signed int * / COL *- signed int * / COL *
- double []- double []
XLOPER12XLOPER12
QQ
可変型のワークシートの値および配列Variable-type worksheet values and arrays
UU
値、配列、および範囲の参照Values, arrays, and range references

Excel 2010 以降には、次のデータ型が導入されています。Starting in Excel 2010 the following data types were introduced:

データ型Data Type 値渡しPass by value 参照渡し (ポインター)Pass by ref (pointer) コメントComments
XLOPER12XLOPER12
XX
非同期ハンドルは、保留中の非同期関数呼び出しを追跡するために Excel と XLL で使用されます。型文字列にパラメーター型があることで、その関数を非同期としても指定しています。非同期関数の詳細については、「非同期のユーザー定義関数」を参照してください。 The asynchronous handle is used to track a pending asynchronous function call by Excel and the XLL.The existence of the parameter type in the type string also designates the function as asynchronous.For more information about asynchronous functions, see Asynchronous User-Defined Functions.

文字列型 FF%GG% は、インプレースで変更される引数に使用します。The string types F, F%, G, and G% are used for arguments that are modified-in-place.

前の表に示されたデータ型を使用する場合は、次の点に注意してください。When working with the data types displayed in the previous table, be aware of the following:

  • C 言語の宣言では、コンパイラが既定で 8 バイトの double、2 バイトの short integer、4 バイトの long integer を使用すると想定しています。The C-language declarations assume that your compiler uses 8-byte doubles, 2-byte short integers, and 4-byte long integers by default.

  • DLL およびコード リソース内のすべての関数は、__stdcall の呼び出し規則を使用して呼び出されます。All functions in DLLs and code resources are called using the __stdcall calling convention.

  • データ型を参照で返す関数 (何かへのポインターを返す関数) は、安全に NULL ポインターを返せます。Excel は、NULL ポインターを #NUM! エラーと解釈します。Any function that returns a data type by reference, that is, that returns a pointer to something, can safely return a null pointer. Excel interprets a null pointer as a #NUM! error.

追加のデータ型の情報Additional data type information

このセクションでは、EFF%GG%KOPQR、および U データ型と、pxTypeText 引数の追加情報について詳細に説明します。This section contains detailed information about the E, F, F%, G, G%, K, O, P, Q, R, and U data types, and other information about the pxTypeText argument.

E データ型E data type

Excel は、E データ型を使用する DLL がスタック上の浮動小数点数へのポインターを渡すことを期待します。これは、コプロセッサ エミュレーター スタック上の数値が渡されることを期待する一部の言語 (Borland C++ など) で問題を起こす可能性があります。回避策としては、コプロセッサ スタック上の数値へのポインターを渡します。次の例は、Borland C++ から double が返される方法を示しています。Excel expects a DLL using the E data type to pass pointers to floating-point numbers on the stack. This can cause problems with some languages (for example, Borland C++) that expect the number to be passed on the coprocessor emulator stack. The workaround is to pass a pointer to the number on the coprocessor stack. The following example shows how to return a double from Borland C++.

typedef double * lpDbl;
extern "C" lpDbl __stdcall AddDbl(double D1,
    double D2, WORD npDbl)
{
    lpDbl Result;
    Result = (lpDbl)MK_FP(_SS, npDbl);
    *Result = D1 + D2;
    return (Result);
}

F、F%、G、G% データ型F, F%, G, and G% data types

FF%GG% データ型により、Excel が割り当てた文字列バッファーを関数で変更できるようになります。With the F, F%, G, and G% data types, a function can modify a string buffer that is allocated by Excel. 戻り値の型コードが、これらの型のいずれかの場合、Excel は関数から返された値を無視します。If the return value type code is one of these types, Excel ignores the value returned by the function. その代わりに、Excel は最初に一致するデータ型 (FF%G、または G% ) について関数の引数リストを検索して、割り当てられた文字列バッファーの現在のコンテンツを戻り値として受け取ります。Instead, Excel searches the list of function arguments for the first corresponding data type (F, F%, G, or G%) and then takes the current contents of the allocated string buffer as the return value. Excel のすべてのバージョンが F および Gの ASCII 文字列に 256 バイトを割り当てます。Excel 2007 以降では、F% および G% の Unicode 文字列に 65,536 バイトを割り当てます (32,768 文字の Unicode 文字が十分に収まります)。All versions of Excel allocate 256 bytes for F and G ASCII strings, and starting in Excel 2007 65,536 bytes are allocated, enough for 32,768 Unicode characters, for F% and G% Unicode strings. バッファーにはカウント文字 (G 型と G% 型) または NULL で終了する文字 (F 型と F% 型) を含める必要があるため、実際の最大文字列の長さは 255 と 32,767 になる点に注意してください。Remember that the buffers must include a count character (types G and G%) or a null-termination character (types F and F%), so that the actual maximum string lengths are 255 and 32,767. Unicode 文字列、つまりF% 型と G% 型の引数は、Excel の C API からのみ使用できます。Unicode strings, and therefore type F% and G% arguments, are available only through the C API in Excel.

K および K% データ型K and K% data types

KおよびK% のデータ型は、それぞれ可変サイズの FP および FP12 構造体へのポインターを使用します。The K and K% data types use pointers to the variable-sized FP and FP12 structures respectively. これらの構造体は XLLCALL.H で定義されています。These structures are defined in XLLCALL.H. FP12 構造体の K% 型の引数は、Excel 2007 以降でのみサポートされます。FP12 structures, and therefore type K% arguments, are only supported starting in Excel 2007.

O および O% データ型O and O% data types

O および O% のデータ型は引数にのみ使用できます。戻り値には使用できませんが、O 型または O% 型の引数をインプレースで変更することで値を返すことができます。どちらも 3 つの項目 (配列の行数へのポインター、配列の列数へのポインター、浮動小数点数の 2 次元配列へのポインター) を渡します。The O and O% data types can only be used for arguments, not return values, although values can be returned my modifying an O or O% type argument in place. Each passes three items: a pointer to the number of rows in an array, a pointer to the number of columns in an array, and a pointer to a two-dimensional array of floating-point numbers.

O または O% のデータ型で渡された配列をインプレースで変更するには、pxTypeText 引数として「>O」または「>O%」を使用します。To modify an array passed by the O or O% data type in place, you could use ">O" or ">O%" as the pxTypeText argument. 配列の変更の詳細については、このトピックの「インプレースの変更: Void として宣言される関数」セクションを参照してください。For more information about modifying an array, see the "Modifying in Place: Functions Declared as Void" section in this topic.

O データ型は、引数を参照で渡す Fortran DLL との直接互換性のために作成されたものです。The O data type was created for direct compatibility with Fortran DLLs, which pass arguments by reference.

O% は Excel 2007 以降でサポートされ、Excel がサポートする巨大な行数に対応します。The O% is supported starting in Excel 2007, and accommodates the larger number of rows that Excel supports.

P および Q データ型P and Q data types

DLL 関数の引数が P 型の XLOPER または Q 型の XLOPER12 を受け取るように登録されている場合、これらの引数を準備するときに、Excel は単一セルの参照を単純な値と複数セルの配列への参照に変換します。When DLL function arguments are registered as taking type P XLOPERs or type Q XLOPER12s, Excel converts single-cell references to simple values and multi-cell references to arrays when preparing these arguments. 言い換えると、P および Q 型は常に逆参照されるため、xltypeRefxltypeSRef ではなく、必ず xltypeNumxltypeStrxltypeBoolxltypeErrxltypeMultixltypeMissing または xltypeNil のいずれかとして入力されます。In other words, P and Q types will always arrive in your function as one of these types: xltypeNum, xltypeStr, xltypeBool, xltypeErr, xltypeMulti, xltypeMissing, or xltypeNil, but not xltypeRef or xltypeSRef because these are always dereferenced. XLOPER12Q 型の引数は、Excel 2007 以降でのみサポートされます。XLOPER12s, and therefore type Q arguments, are only supported starting in Excel 2007.

xltypeMissing 型または xltypeNil 型が戻り値に使用されている場合、それらの戻り値は Excel によって数値のゼロと解釈されます。呼び出し元が引数を省略したときには、xltypeMissing が渡されます。呼び出し元が空のセルへの参照を渡したときには、xltypeNil が渡されます。P 型または Q 型として渡すために、セルの範囲が xltypeMulti に変換されるときには、範囲内にある空白のセルが xltypeNil 配列の要素に変換されます。同様に、リテラル配列内で欠落している要素も xltypeNil 要素として渡されます。If types xltypeMissing or xltypeNil are used for return values, they are interpreted by Excel as numeric zero. xltypeMissing is passed when the caller omits an argument. xltypeNil is passed when the caller passes a reference to an empty cell. When a range of cells is converted to an xltypeMulti to be passed as type P or Q, any blank cells within the range are converted to xltypeNil array elements. Missing elements in a literal array are similarly passed as xltypeNil elements.

揮発性関数と再計算Volatile functions and recalculation

ワークシート上で、DLL 関数またはコード リソースを揮発性にすることができるため、ワークシートが再計算されるたびに再計算するようになります。On a worksheet, you can make a DLL function or code resource volatile, so that it recalculates every time the worksheet recalculates. これを行うには、pxTypeText 引数の最後の引数コードの後に感嘆符 (!) を追加します。To do this, add an exclamation mark (!) after the last argument code in the pxTypeText argument.

注意

既定では、R 型の XLOPER または U 型の XLOPER12 を受け取り、マクロ シートと同等 (# 型: 次のセクションを参照) として登録された関数は、Excel では揮発性として処理されます。By default, functions that take type R XLOPERs or type U XLOPER12s and that are registered as macro sheet equivalents (type #; see next section) are handled as volatile in Excel.

Void として宣言される関数Functions declared as void

void を返すように関数を宣言する必要があるケースは 2 つあります。どちらのケースも、関数は別の方法で結果を返します。There are two cases that call for declaring a function as returning void. In both cases, the function returns its result by other means.

インプレースの変更Modifying in place

n の戻り値の型コードには 1 桁の数字を pxTypeText で使用できます。この n は 1 から 9 までの数値です。You can use a single digit n for the return type code in pxTypeText, where n is a number from 1 through 9. これにより、pxTypeText の _n_th 引数がポイントする場所がある変数の値を戻り値として取得するよう Excel に指示します。This instructs Excel to take the value of the variable in the location pointed to by the _n_th argument in pxTypeText as the return value. これはインプレースの変更とも呼ばれます。This is also known as modifying in place. この _n_th 引数は、参照渡しのデータ型 (C、D、E、F、F%、G、G%、K、K%、L、M、N、O、O%、P、Q、R、または U) であることが必要です。The _n_th argument must be a pass-by-reference data type (C, D, E, F, F%, G, G%, K, K%, L, M, N, O, O%, P, Q, R, or U). さらに、DLL 関数またはコード リソースは、C/C++ 言語の void キーワード (または Pascal 言語のプロシージャ キーワード) を使用して宣言されている必要もあります。The DLL function or code resource must also be declared with the void keyword in the C/C++ languages (or the procedure keyword in the Pascal language).

たとえば、引数として NULL で終了する文字列と、整数への 2 つのポインターを受け取る DLL 関数の場合は、文字列をインプレースで変更できます。For example, a DLL function that takes a null-terminated string and two pointers to integers as arguments can modify the string in place. pxTypeText 引数として「1FMM」を使用し、void として関数を宣言します。Use "1FMM" as the pxTypeText argument, and declare the function as void.

以前のバージョンの Excel は、pxTypeText の先頭に > を使用して、関数が void として宣言されたことと、最初の引数がインプレースで変更されたことを知らせます。最初の引数以外を変更する方法はありませんでした。Previous versions of Excel used > at the start of pxTypeText to signify that the function was declared as void and that the first argument was to be modified in place—there was no way to modify any argument other than the first. > は、現行バージョンの Excel の n = 1 に相当します。この**>** の非同期関数での使用は下位互換性のためにのみサポートされます。The > is equivalent to n = 1 in current Excel versions and this use of > in synchronous functions is supported for backward compatibility only.

非同期関数Asynchronous functions

非同期関数 (pxTypeText に X 型のパラメーターを使用して示されます) では、最初の関数呼び出しからの結果は返しません。An asynchronous function, denoted by using a parameter of type X in pxTypeText, does not return its result from the initial function call. その代わりに、非同期関数は void として宣言して、後からアドインでコールバックを通じて結果を返す必要があります。Instead, you must declare an asynchronous function as void and later the add-in returns the result through a callback. 非同期関数は、pxTypeTextの先頭に > を使用して登録する必要があります。The asynchronous function must be registered by using > at the start of pxTypeText. 非同期関数では、その関数が void として宣言されたことを > で示しますが、最初の引数がインプレースで変更されるという意味ではありません。In asynchronous functions, > denotes that the function is declared as void, but does not indicate that the first argument is modified in place. 非同期関数の詳細については、「非同期のユーザー定義関数」を参照してください。For more information about asynchronous functions, see Asynchronous User-Defined Functions.

ワークシート関数のマクロ シート同等としての登録 (計算されないセルの処理)Registering worksheet functions as macro sheet equivalents (handling uncalculated cells)

_pxTypeText_の最後のパラメーター コードの後に # 文字を配置することで、その関数に対してマクロ シート上の関数と同じ呼び出しアクセス許可を付与します。Placing a # character after the last parameter code in pxTypeText gives the function the same calling permissions as functions on a macro sheet. それらは次のとおりです。These are as follows:

  • この再計算サイクルでは、まだ計算されていないセルの値を取得できる関数。The function can retrieve the values of cells that have not yet been calculated in this recalculation cycle.

  • どの XLM 情報 (Class 2) 関数でも呼び出せる関数 (xlfGetCell など)。The function can call any of the XLM information (Class 2) functions, for example, xlfGetCell.

  • 番号記号 (#) が存在しない場合: 計算されていないセルを評価すると xlretUncalced エラーになり、そのセルが計算されると現在の関数が再度呼び出される。xlfCaller 以外の XLM 情報関数を呼び出すと xlretInvXlfn エラーになる。If the number sign (#) is not present: evaluating an uncalculated cell results in an xlretUncalced error, and the current function is called again once the cell has been calculated; calling any XLM information function other than xlfCaller results in an xlretInvXlfn error.

ワークシート関数をスレッドセーフとして登録するRegistering worksheet functions as thread-safe

Excel 2007 以降の Excel は、マルチスレッドでブックの再計算を実行できます。Starting in Excel 2007, Excel can perform multithreaded workbook recalculation. つまり、スレッドセーフな関数の別々のインスタンスを再評価するときに同時実行スレッドに割り当てできるということです。This means that it can assign different instances of a thread-safe function to concurrent threads for reevaluation. Excel 2007 以降では、ほとんどの組み込みのワークシート関数がスレッドセーフになっています。Starting in Excel 2007, most of the built-in worksheet functions are thread-safe. また、Excel 2007 以降の Excel では、XLL でワークシート関数をスレッドセーフとして登録することもできます。Starting in Excel 2007, Excel also allows XLLs to register worksheet functions as thread-safe. これを行うには、pxTypeText の最後のパラメーター コードの後に $ 文字を含めます。To do this, include a $ character after the last parameter code in pxTypeText.

注意

スレッドセーフとして宣言できる関数は、ワークシート関数のみです。Only worksheet functions can be declared as thread-safe. Excel では、マクロ シート同等関数をスレッドセーフにすることは考慮されていません。そのため、pxTypeText 引数に #$ の両方の文字を追加することはできません。Excel does not consider a macro sheet equivalent function to be thread-safe, so that you cannot append both # and $ characters to the pxTypeText argument.

スレッド セーフとして関数を登録している場合は、その関数がスレッド セーフな方法で動作することを保証する必要があります。ただし、Excel は C API を通じたスレッド セーフでない呼び出しを拒否します。たとえば、スレッド セーフな関数が xlfGetCell を呼び出そうとすると、その呼び出しは xlretNotThreadSafe エラーで失敗します。If you have registered a function as thread-safe, you must ensure that it behaves in a thread-safe way, although Excel rejects any thread-unsafe calls via the C API. For example, if a thread-safe function tries to call xlfGetCell, the call fails with the xlretNotThreadSafe error.

ワークシート関数をクラスターセーフとして登録するRegistering worksheet functions as cluster-safe

Excel 2010 以降の Excel では、指定の計算クラスター プロバイダーに関数呼び出しをオフロードできます。Starting in Excel 2010, Excel can offload function calls to a designated compute cluster provider. 詳細については、「クラスターセーフ関数」を参照してください。For more information, see Cluster Safe Functions. クラスターセーフとして登録された XLL ワークシート関数はオフロードに加わります (クラスターが利用可能な場合)。Any XLL worksheet functions registered as cluster-safe take part in offloading if a cluster is available. クラスターセーフな関数は、pxTypeText 引数の最後のパラメーター コードの後に & 文字を含めることで登録します。Cluster-safe functions are registered by including the & character after the last parameter code in the pxTypeText argument.

クラスター セーフとして関数を登録した場合は、その関数がクラスター セーフな方法で動作することを保証する必要があります。詳細については、「クラスター セーフ関数」を参照してください。If you have registered a function as cluster-safe, you must ensure that it behaves in a cluster-safe way. For more information, see Cluster Safe Functions.

注意

クラスターセーフとして宣言できる関数は、ワークシート関数のみです。Only worksheet functions can be declared as cluster-safe. Excel では、マクロ シート同等関数をクラスターセーフにすることは考慮されていません。そのため、pxTypeText 引数に #& の両方の文字を追加することはできません。Excel does not consider a macro sheet equivalent function to be cluster-safe, so that you cannot append both # and & characters to the pxTypeText argument. ワークシート関数は、クラスターセーフとスレッドセーフの両方として宣言できます。Worksheet functions can be declared as both cluster-safe and thread-safe. この場合、Excel は該当する関数がマルチスレッド再計算に加わることを許可します (クラスター オフローディングが無効な場合)。In this case, Excel will allow these functions to take part in multithreaded recalculation when cluster offloading is disabled.

カテゴリ名Category names

次のガイドラインを使用して、カスタムの XLL 関数の分類先カテゴリについて判断します。Use the following guidelines to determine which category to put your XLL functions in.

  • 関数がユーザーが実行できることをアドイン ユーザー インターフェイスの一部として実行する場合は、その関数をコマンド カテゴリに分類します。If the function does something that could be done by the user as a part of your add-in user interface, you should put the function in the Commands category.

  • 関数がアドインの状態に関する情報などの有用な情報を返す場合は、その関数を情報カテゴリに分類する必要があります。If the function returns information about the state of the add-in or any other useful information, you should put the function in the Information category.

  • アドインでは、関数やコマンドをユーザー定義カテゴリに追加してはいけません。このカテゴリは、エンド ユーザー専用です。An add-in should never add functions or commands to the User Defined category. This category is for the exclusive use of end users.

カテゴリは pxCategory パラメーターを使用して xlfRegister に指定されます。The category is specified using the pxCategory parameter to xlfRegister. これは、ハードコードされた標準カテゴリの 1 つに対応する番号またはテキストになるか、DLL で指定した新しいカテゴリのテキストになります。This can be a number or text that corresponds to one of the hard-coded standard categories, or the text of a new category specified by the DLL. 指定されたテキストが存在していない場合は、その名前の新しいカテゴリが Excel によって作成されます。If the text given does not already exist, Excel creates a new category with that name.

次の表は、標準カテゴリの一覧です。これは、ワークシートで [関数の貼り付け] ダイアログ ボックスを表示すると確認できます。The following table lists the standard categories that are visible when you view the Paste Function dialog box from within a worksheet.

数値Number テキストText
1-d1
財務Financial
pbm-22
日付 & 時刻Date & Time
1/33
数学 & 三角Math & Trig
2/44
テキストText
55
論理演算子Logical
シックス6
検索 & 参照Lookup & Reference
77
データベースDatabase
~8
統計Statistical
i-99
情報Information
14
ユーザー定義User Defined
エンジニアリング (Excel 2007 以降)Engineering (starting in Excel 2007)
キューブ (Excel 2007 以降)Cube (starting in Excel 2007)

また、マクロ シートで [関数の貼り付け] ダイアログ ボックスを表示すると、次のカテゴリも確認できます。In addition, these categories are also visible when you view the Paste Function dialog box from within a macro sheet.

数値Number テキストText
10
コマンドCommands
#11
DDE/外部DDE/External
12
ユーザー設定Customizing
スリー13
マクロ制御Macro Control

Example

\SAMPLES\GENERIC\GENERIC.C で、xlAutoClose 関数のコードを参照してください。See the code for the xlAutoOpen function in \SAMPLES\GENERIC\GENERIC.C.

関連項目See also