このトピックに記載されている内容は、言語によっては適用されない場合もあります。
注意 レジストリを誤って編集すると、オペレーティング システムに重大な障害が発生し、再インストールを要求される場合があります。マイクロソフトでは、このようなレジストリの誤った編集による問題については保証していません。レジストリを編集する前に、重要なデータのバックアップを行ってください。レジストリの使用および保護の詳細については、Microsoft Windows ヘルプを参照してください。
次に示すのは、CALL、REGISTER、REGISTER.ID の各関数で使用される引数および戻り値のデータ型です。引数と戻り値は、動作環境によって若干異なります。この差異については、データ型の一覧で説明します。
データ型
CALL 関数、REGISTER 関数、および REGISTER.ID 関数では、引数タイプによって、戻り値のデータ型、および DLL 関数またはコード リソースのすべての引数のデータ型を、半角の二重引用符 (") で囲んだ文字列として指定します。タイプの先頭の文字では、戻り値のデータ型を指定します。残りの文字では、すべての引数のデータ型を指定します。たとえば、戻り値が浮動小数点数、引数が整数と浮動小数点数である DLL 関数は、タイプ引数として "BIB" を取ります。
次の表は、Excel で認識されるデータ型のコードの一覧、各データ型の説明、引数または戻り値を渡す方法、および C 言語におけるそのデータ型の典型的な宣言を示しています。
| コード |
説明 |
渡す方法 |
C 言語での宣言 |
| A |
論理値 (FALSE = 0、TRUE = 1) |
値 |
short int |
| B |
IEEE 8 バイト浮動小数点数 |
値 (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 と設定されている場合を想定しています。
- Windows のプログラミング環境では、すべてのポインタが far 型となります。たとえば、Windows ではデータ型コード D を
unsigned char far として宣言する必要があります。
- DLL とコード リソースの関数は、すべて Pascal 方式で呼び出されます。ほとんどの C コンパイラでは、関数宣言にキーワード 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] では、1 要素の配列に対してのみ記憶領域が割り当てられます。実際の配列における要素数は、行数に列数を掛けた値になります。
データ型 O
データ型 O は引数としてのみ使用され、戻り値には使用されません。引数には 3 種類あります。つまり、配列内の行数へのポインタ、配列内の列数へのポインタ、および浮動小数点数の 2 次元配列へのポインタです。
関数では、値を返す代わりに、データ型 O によって渡される配列を変更することができます。そのためには、タイプ引数として ">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 |
配列 |
配列 |
| 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』で詳しく説明されています。
可変関数と再計算
通常、Excel で DLL 関数またはコード リソースが計算されるのは、それらがセルに入力されるとき、その参照元のいずれかが変更されたとき、またはマクロの中でセルが計算されるときに限られます。ワークシート上で、DLL 関数またはコード リソースを可変にすることができます。つまり、ワークシートで再計算が行われるたびに DLL またはコード リソースも再計算されます。関数を可変にするには、タイプ引数の末尾に感嘆符 (!) を追加します。
たとえば 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 として宣言します。
Excel 4.0 より前のバージョンでは、> 記号を使って最初の引数を指定して変更できるだけで、それ以外の引数を変更する方法はありませんでした。> 記号は、Excel 4.0 以降における n = 1 に相当します。