スキップしてメイン コンテンツへ

CALL 関数と REGISTER 関数の使い方

重要: 慎重    レジストリを誤って編集すると、オペレーティング システムに重大な障害が発生し、再インストールを要求される場合があります。 Microsoft では、このようなレジストリの誤った編集による問題については保証していません。 レジストリを編集する前に、重要なデータをバックアップしてください。 レジストリの使用および保護の詳細については、Microsoft Windows ヘルプを参照してください。

ここでは、Microsoft Excel の CALLREGISTER、および REGISTER.ID の各関数の書式および使用法について説明します。

注:  CALL 関数と REGISTER 関数は Web 用 Excelでは使用できません。

この記事の内容

説明

データ型

解説

その他のデータ型情報

データ型 F および G

データ型 K

データ型 O

データ型 P

データ型 R: DLL から Excel の関数を呼び出す

可変関数と再計算

指定した引数の変更: Void として宣言される関数

説明

CALLREGISTER、およびREGISTER.IDの各関数で使用される引数と戻り値のデータ型について説明します。 引数と戻り値は、使用しているオペレーティング環境によって若干異なります。これらの相違点については、データ型の表で説明します。

ページの先頭へ

データ型

CALLREGISTERREGISTER.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 と設定されている場合を想定しています。

  • Microsoft Windows のプログラミング環境では、すべてのポインターが far 型となります。 たとえば、Microsoft Windows では、データ型コード D を unsigned char far * として宣言する必要があります。

  • Dll とコードリソースのすべての関数は、Pascal 呼び出し規約を使って呼び出されます。 ほとんどの C コンパイラでは、次の例に示すように、Pascal キーワードを関数宣言に追加することで、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

配列

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 関数またはコードリソースを揮発性として設定できます。これは、ワークシートが再計算されるたびに再計算されることを意味します。 関数を volatile にするには、タイプ引数の最後の文字として感嘆符 (!) を追加します。

たとえば 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 に相当します。

ページの先頭へ

注:  このページは、自動翻訳によって翻訳されているため、文章校正のエラーや不正確な情報が含まれている可能性があります。 私たちの目的は、このコンテンツがお客様の役に立つようにすることです。 情報が役に立ったかどうか、ご意見をお寄せください。 参考までに、こちらから英語の記事をお読みいただけます。

Office のスキルを磨く
トレーニングの探索
新機能を最初に入手
Office Insider に参加する

この情報は役に立ちましたか?

ご意見をいただきありがとうございます。

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×