Excel ワークシートと式の評価

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

Microsoft Excel ���[�N�V�[�g�̃Z���̓�e�́A���� 4 �‚̊�{�I�ȃf�[�^�^�̂����ꂩ�ɕ]������܂��B

  • Numbers
  • Boolean TRUE �܂��� FALSE
  • Strings
  • Errors

�֐��̈����Ƃ��āA�܂��͔z�񐔎���̕����̃Z���ɂ܂�����l�Ƃ��āA�����̃f�[�^�^�̍����z��𐔎��ɓ��͂��邱�Ƃ�ł��܂��B

ユーザー (またはコマンド マクロ) がセルに文字列を入力すると、Excel は入力の解釈を試み、解釈できない場合にはエラー メッセージを表示します。 入力値が文字列のプレフィックス (単一引用符) で始まっている場合は、Excel は、すべての入力文字をそのまま変更せずにセルに配置します。 (文字列プレフィックスは表示されません)。入力が 、+、または -=始まる場合、Excel は入力を数式として解釈しようとします。構文が正しくない場合、または評価が停止している場合は、エラーが表示され、セルが編集モードになります。 それ以外の場合、Excel は演算子および関数名とその引数の識別、変換、評価を試みます。

演算子が適用される前に、オペランドは左から右に評価されます。 関数は、優先順位の高い演算子と入れ子の一番内側の演算子から評価されます。 関数の引数やオペランドが、予期したデータ型に変換できない場合、評価は失敗し、#VALUE! エラーになります。 トークン (リテラル値ではない) が関数名や定義名、ラベルとして認識されない場合、評価は失敗し、#NAME? エラーになります。

入力値が上記のいずれでも始まっていない場合は、日付、時刻、通貨、パーセンテージ、数値など、既知の入力パターンに照らしてチェックし、それらに応じて解釈されます。 これは、ロケール固有の方法で行われます。 上記のいずれの方法でも解釈できない場合は、文字列として認識し直され、セルの内容は変更されません。

Excel は他のデータ型もサポートしており、その中で最もよく知られているのは、範囲参照です。 参照引数をとらない演算子や関数の引数を評価したり、またはセルの数式内にある式を参照に縮めたりすると、参照は参照先セルの値に変換されます。

Excel では、XLM 関数 EVALUATE またはそれに相当する C API関数 xlfEvaluate を使って、有効な文字列を、ワークシート用の基本的な 4 つのデータ型のいずれかに縮める機能が公開されています。 中でもこの関数を使用すると、DLL コード内の名前付き範囲を簡単に評価することができます。 この関数は、エラーメッセージを表示したり、セルの編集を可能にしたりするのではなく、式の評価ができない場合に #VALUE! エラーを返すという点で、前述の動作とは異なります。

数値

Excel のワークシート番号はすべて、8 バイトの倍精度浮動小数点 (すべての整数を含む) で内部的に表されます。 ただし、Excel におけるこれらの数値の実装は、以下の表に示すように、IEEE 規格に完全には準拠していません。

�^ �ő� �ŏ�
IEEE 8 �o�C�g�̔{���x���������_�^
1.7976931348623157E+308
2.2250738585072014E-308
���[�N�V�[�g (�֐��܂��͓\��t���l�ɂ���ĕԂ����)
1.7976931348623157E+308
2.22507385850721E-308
���[�N�V�[�g (�葀�����)
9.9999999999999E+307
2.22507385850721E-308

IEEE �񐳋K���� ( 2.2250738585072009E?308 ���� 4.9406564584124654E?324 �͈̔͂̐��l) �́AExcel ���[�N�V�[�g�ł̓T�|�[�g����Ă��܂��񂪁AVBA �̔{���x���������_�^�ł̓T�|�[�g����Ă��܂��B

If a DLL function returns IEEE +/- infinity or an invalid double, Excel converts it to #NUM!. All subnormal numbers and numbers smaller than the minimum positive normal in Excel are converted to positive zero. IEEE negative zero is supported, that is, it can be returned by a DLL function and is displayed as -0. (The < operator does not check for negative zero, and so =A1<0 evaluates to TRUE if A1 contains negative zero).

日付と時刻などの一部の数値書式は、上記よりも狭い範囲に制限されていることに注意してください。 整数除算は実際には浮動小数点除算であり、極端な場合は、正確には整数の結果になる場合に非整数の結果をもたらす場合があります。

長い Unicode 文字列

Excel でユーザーに表示されるすべての文字列は、多くのバージョンに対して Unicode 文字列として内部的に格納されるようになりました。Unicode ワークシートの文字列の長さは最大 32,767 文字 (215 から 1) で、任意の有効な Unicode 文字を含めることができます。

C API が最初に導入されたとき、ワークシートの文字列は、長さ 255 文字のバイト列に制限されていましたが、C API でも、これらの制限が反映されます。 Excel 2007 では、Excel の長い Unicode 文字列を処理するように C API が更新されます。これは、正しい方法で登録された DLL 関数が Unicode 引数を受け入れ、Unicode 文字列を返すことができることを意味します。

注:

バイト列は、下位互換性のために C API で完全にサポートされていますが、これまでどおり 255 文字に制限されています。

エラー

関数または演算子の引数を適切な型に変換できない場合、あるいは関数または定義済みの名前が認識されない場合、Excel はセルをエラーに評価します。 これらのシナリオはいずれも上記で説明しています。 組み込みワークシート関数と演算子が失敗した場合、ユーザーにエラーの種類を通知するエラーも表示されます。 自作のアドイン関数が Excel の動作と整合するエラーを返すようにしてください。

#NULL!

#NULL! エラーは、いくつかの XLM 情報関数によって返されます。 たとえば、プリンターがインストールされていない場合に、GET.DOCUMENT(78) を呼び出すか、または引数 78 で同等の C API 関数 xlfGetDocument を呼び出すと、このエラーが返されることになります。 また、上記エラーは空の文字列が評価される場合などにも、一部の関数で返される可能性があります。

他のいずれのエラーも適切ではないと感じる場合も、アドイン関数からこのエラーを返すとよいでしょう。

#DIV/0!

分母が 0 に評価されるか、または数値が小さく 0 以外の数値で表せない場合には、Excel の除算演算子は #DIV/0! エラーを返します。 定義上、除算が関係する一部の関数でもこのエラーが返される場合があります。 たとえば、入力値のいずれも数値に変換できない場合は、AVERAGE によりこのエラーが返されます。

0 による除算が検出されたことを示す場合にのみ、アドイン関数からこのエラーが返されるようにしてください。

#VALUE!

#VALUE! エラーは、関数または演算子の引数が必要な型に変換できない場合に返されます。 たとえば =LN("X")、変換できない関数引数の場合、Excel は関数コードを呼び出しません。 これは、独自のアドイン関数の作成やデバッグを行う際に重要なポイントです。

関数コード内で引数を変換できない場合、一部の関数はこのエラーを返します。 たとえば、 DATEVALUE("30-Feb-2007") 引数が正しい型であるにもかかわらず、このエラーで失敗します。 この場合、コード内からエラーを返す関数です。 一部の関数では、値の型と範囲が許可されている場合でも、このエラーが返されます。たとえば FIND("a","xyz") 、このエラーが返されます。

このエラーをアドイン関数から返して、引数が間違った型であることを示すか、正しい型に変換できなかったか、範囲外であることを示す必要がありますが、範囲外の数値引数に 対して #NUM! を 返す必要があります。 また、範囲または配列の引数の形状またはサイズが間違っている場合は、このエラーを返すこともできます。

#REF!

結果的に相対参照の範囲外の場所にコピーされると、式内で #REF! エラーが生成されます。 たとえば、セル B2 に数式 =A1が含まれている場合、これをセル B1 にコピーすると、数式 =#REF!になります。 このエラーは、切り取り/貼り付け操作で上書きされた参照や、列や行、ワークシートごと削除された参照が数式に含まれる場合にも生成されます。 参照を返すことができる関数の中には、このエラー (例: OFFSET(A1,-1,-1)) が返される場合があります。 ワークシート名の定義に、無効となる参照が含まれている場合は、このエラーに評価されます。

アドイン関数が参照引数を取っていて、参照が無効であるか、または参照エラーを通った場合は、このエラーを返すよう検討してください。 Excel のメモリ管理の XLOPER/XLOPER12 セクションでは、参照引数を受け取り、返すことができる関数を作成する方法について説明しています。

#NAME?

関数名または定義名として認識されないトークンが式に含まれている場合、#NAME? エラーが生成されます。 アドイン関数で定義名にアクセスしようとしたものの、その定義名が定義されていなかった場合に、このエラーを返すようにしてください。

#NUM!

Excel の組み込みの数値関数と数学関数の多くは、数値入力が許可されている範囲外である場合に 、#NUM! エラーを返します。たとえば、 LN(0)です。 数値入力が無効または範囲外であることを示すため、アドイン関数からこのエラーを返すよう検討してください。

#N/A

多くの場合 #N/A エラーは、正常な結果または有効な結果が利用できないことを表します。 たとえば、完全一致が見つからなかった場合には、第 3 引数が 0 の MATCH 関数よりこのエラーが返されます。 また、このエラーは、関数 NA を使用し、関数 ISNA で個別に検出して、生成することもできます。 そのため、このエラーは、アプリケーション固有の条件範囲を示すためにワークシートで一般的に使用されています。

関連項目

Excel プログラミングの概念

Excel �ł� C API ��g�p�����v���O���~���O

[���O�Ƒ��̃���N�V�[�g�̎���]������

Excel XLL SDK API �֐����t�@�����X