重要
注意 レジストリを誤って編集すると、オペレーティング システムが深刻な損傷を受け、再インストールする必要があります。 Microsoft では、このようなレジストリの誤った編集による問題については保証していません。 レジストリを編集する前に、重要なデータをバックアップしてください。 レジストリの使用および保護の詳細については、Microsoft Windows ヘルプを参照してください。
ここでは、Microsoft Excel の CALL、REGISTER、および REGISTER.ID の各関数の書式および使用法について説明します。
注
CALL および REGISTER 関数は、Excel for the webでは使用できません。
この記事の内容
説明
次に、 CALL、 REGISTER、および REGISTER.ID 関数で使用される引数と戻り値のデータ型について説明します。 引数と戻り値は、使用している環境によって若干異なり、これらの違いはデータ型テーブルに示されています。
データ型
CALL、REGISTER、REGISTER.ID の各関数では、引数 "タイプ" によって、戻り値のデータ型、および DLL 関数またはコード リソースのすべての引数のデータ型を、半角の二重引用符 (") で囲んだ文字列として指定します。 "タイプ" の先頭の文字では、戻り値のデータ型を指定します。 残りの文字では、すべての引数のデータ型を指定します。 たとえば、戻り値が浮動小数点数、引数が整数と浮動小数点数である DLL 関数は、"タイプ" 引数として "BIB" を取ります。
次の表は、Excel で認識されるデータ型のコードの一覧、各データ型の説明、引数または戻り値を渡す方法、および C 言語におけるそのデータ型の典型的な宣言を示しています。
| コード | 説明 | 渡す方法 | C 言語での宣言 |
|---|---|---|---|
| A | 論理 (FALSE = 0)、TRUE = 1) |
値 | short int |
| B | IEEE 8 バイト浮動小数点数 | Value (Windows) 参照 (Macintosh) |
double (Windows) double * (Macintosh) |
| C | 末尾が Null の文字列 (最大文字列長 = 255) | 参照 | char * |
| D | バイト数を含む文字列 (先頭バイトが文字列の長さ、最大文字列長 = 255) | 参照 | Unsigned char * |
| E | IEEE 8 バイト浮動小数点数 | 参照 | double * |
| F | 末尾が Null の文字列 (最大文字列長 = 255) | 参照 (指定した引数の変更) | char * |
| G | バイト数を含む文字列 (先頭バイトが文字列の長さ、最大文字列長 = 255) | 参照 (指定した引数の変更) | unsigned char * |
| H | 符号なし 2 バイト整数 | 値 | unsigned short int |
| I | 符号付き 2 バイト整数 | 値 | short int |
| J | 符号付き 4 バイト整数 | 値 | long int |
| K | 配列 | 参照 | FP * |
| L | 論理 (FALSE = 0、TRUE = 1) |
参照 | short int * |
| M | 符号付き 2 バイト整数 | 参照 | short int * |
| N | 符号付き 4 バイト整数 | 参照 | long int * |
| O | 配列 | 参照 | 3 つの引数が渡されます。 unsigned short int * unsigned short int * double [ ] |
| P | Excel の OPER データ構造体 | 参照 | OPER * |
| R | Excel の XLOPER データ構造体 | 参照 | XLOPER * |
解説
- C 言語での宣言は、コンパイラの既定値として 8 バイトが double、2 バイトが short integer、4 バイトが long integer と設定されている場合を想定しています。
- Microsoft Windows のプログラミング環境では、すべてのポインターが far 型となります。 たとえば、Microsoft Windows で D データ型コードを
unsigned char far* として宣言する必要があります。 - DLL およびコード リソース内のすべての関数は、パスカル呼び出し規則を使用して呼び出されます。 ほとんどの C コンパイラでは、次の例に示すように、Pascal キーワード (keyword)を関数宣言に追加することで、Pascal 呼び出し規則を使用できます。
pascal void main (rows,columns,a) - 戻り値に参照渡しのデータ型を使用している関数では、戻り値として Null ポインターを渡すことができます。 Excel では、Null ポインターがエラー値 #NUM! として解釈されます。
その他のデータ型情報
ここでは、F、G、K、O、P、R の各データ型、および引数タイプについて詳しく説明します。
データ型 F および G
データ型 F および G を使用すると、Excel によって割り当てられる文字列バッファーを関数で変更することができます。 戻り値のコードが F または G の場合は、関数によって返された値が無視されます。 代わりに、関数の引数の一覧から最初に対応するデータ型 (F または G) が検索され、割り当てられた文字列バッファーの現在の内容が戻り値として見なされます。 Excel では引数に 256 バイトを割り当てるため、関数が受け取った文字列より長い文字列を返す場合があります。
データ型 K
データ型 K では、可変サイズの FP 構造体へのポインターを使用します。 この構造体は、DLL またはコード リソース内で次のように定義する必要があります。
typedef struct _FP
{
unsigned short int rows;
unsigned short int columns;
double array[1]; /* Actually, array[rows][columns] */
} FP;
宣言 double array[1] は、単一要素配列にのみストレージを割り当てます。 実際の配列における要素数は、行数に列数を掛けた値になります。
データ型 O
O データ型は、戻り値としてではなく、引数としてのみ使用できます。 3 つの項目 (配列内の行数へのポインター、配列内の列の数へのポインター、浮動小数点数の 2 次元配列へのポインター) が渡されます。
関数では、値を返す代わりに、データ型 O によって渡される配列を変更することができます。 これを行うには、type_text引数として ">O" を使用できます。 詳細については、次の「指定した引数の変更: Void として宣言される関数」を参照してください。
データ型 O は、引数を参照で渡す Fortran DLL との直接的な互換性を確保する目的で作成されたものです。
データ型 P
データ型 P は、OPER 構造体へのポインターです。 OPER 構造体には、8 バイトのデータに続いてデータ型を指定する 2 バイトの識別子が含まれます。 データ型 P を使用すれば、DLL 関数またはコード リソースで、Excel のあらゆるデータ型を取り、また返すことができます。
OPER 構造体は、次のように定義されます。
typedef struct _oper
{
union
{
double num;
unsigned char *str;
unsigned short int bool;
unsigned short int err;
struct
{
struct _oper *lparray;
unsigned short int rows;
unsigned short int columns;
} array;
} val;
unsigned short int type;
} OPER;
type フィールドには、次のいずれかの値が格納されます。
| 型 | 説明 | 使用する val フィールド |
|---|---|---|
| 1 | 数値 | num |
| 2 | 文字列 (先頭バイトは文字列長) | str |
| 4 | ブール値 (論理値) | bool |
| 16 | エラー。エラー値は次のいずれかです。 0#NULL! 7#DIV/0! 15#Value! 23#REF! 29#NAME? 36#NUM! 42#N/A |
err |
| 64 | 配列 | array |
| 128 | 引数の欠落 | |
| 256 | 空白セル |
最後の 2 つは引数としてのみ使用され、戻り値には使用されません。 呼び出し側が引数を省略した場合は、引数の欠落を表す 128 が渡されます。 呼び出し側が空白セル参照を渡した場合は、空白セルを表す 256 が渡されます。
データ型 R: DLL から Excel の関数を呼び出す
データ型 R は、OPER 構造体の拡張版である XLOPER 構造体へのポインターです。 Excel 4.0 以降では、データ型 R を使用して Excel の関数を呼び出す DLL とコード リソースを作成することができます。 XLOPER 構造体を使用すれば、DLL 関数で、データの受渡し以外にシート参照の受け渡しやフロー制御の実現が可能になります。 このトピックでは、データ型 R や Excel のアプリケーション プログラミング インターフェイス (API) について詳しく説明しません。 データ型 R、Excel の API、および Excel に関するその他の技術情報については、『Microsoft Office XP Developer's Guide』で詳しく説明されています。
可変関数と再計算
通常、Microsoft Excel では、DLL 関数 (またはコード リソース) は、セルに入力されたとき、優先順位のいずれかが変更されたとき、またはマクロ中にセルが計算された場合にのみ計算されます。 ワークシートでは、DLL 関数またはコード リソースを揮発性にすることができます。つまり、ワークシートが再計算されるたびに再計算されます。 関数を揮発性にするには、type_text引数の最後の文字として感嘆符 (!) を追加します。
たとえば Windows 版 Excel では、ワークシートが再計算されるたびに、次のようなワークシートの数式も再計算されます。
CALL("Kernel32","GetTickCount","J!")
指定した引数の変更: Void として宣言される関数
タイプの戻り値のコードとして 1 桁の数字 n を使用することができます。 この 1 から 9 までの数字 n を使って、値を返すのではなく、タイプの n 番目の引数で示される場所にある変数を変更するように指定できます。 これは、指定した引数の変更とも呼ばれます。 n 番目の引数は、参照渡しのデータ型 (C、D、E、F、G、K、L、M、N、O、P、または R) であることが必要です。 また、DLL 関数やコード リソースを、C 言語の void キーワード (または Pascal の procedure キーワード) で宣言する必要があります。
たとえば、引数として末尾が Null の文字列および 2 つの整数へのポインターを取る DLL 関数では、指定した位置の文字列を変更することができます。 この場合、タイプ引数として "1FMM" を使用し、関数を void として宣言します。
Microsoft Excel 4.0 より前のバージョンでは、 > 文字を使用して最初の引数を変更しました。最初の引数以外の引数を変更する方法はありませんでした。 >文字は、Microsoft Excel バージョン 4.0 以降の n = 1 と同じです。