概要
この資料の対象製品として記載されている Microsoft Excel のバージョンでは、ユーザー設定の計算を返すユーザー定義関数を Visual Basic for Applications で作成できます。ただし、ユーザー定義関数は、ワークシートのセルに含まれる数式から呼び出されたときに、Microsoft Excel の環境を変更する操作を実行できません。
詳細
ワークシートのセル内の数式から呼び出されるユーザー定義関数では、Microsoft Excel の環境を変更できません。つまり、このような関数では次の処理が実行できません。
-
スプレッドシートでのセルの挿入、削除、または書式の設定。
-
別のセルの値の変更。
-
ブックでのシートの移動、名前の変更、削除、または追加。
-
計算方法や画面表示など、環境オプションの変更。
-
ブックへの名前の追加。
-
プロパティの設定およびほとんどのメソッドの実行。
ユーザー定義関数の目的は、Microsoft Excel に付属の関数に含まれていないユーザー設定の関数を作成することです。Microsoft Excel に含まれている関数でも、環境は変更できません。関数で実行できるのは、入力元のセルに値またはテキストを返す計算です。環境の変更は、Visual Basic サブルーチンを使用して行う必要があります。
Excel では、計算中に、ユーザー定義関数を含むセルの参照元が調べられます。未計算の参照元がある場合、関数に対して NULL または空白のセルが渡されます。その後、すべての参照元を計算するのに十分な計算パスが実行されます。最後の計算パスの間に、ユーザー定義関数にセルの現在の値が渡されます。これが原因で、ユーザー定義関数は予想より頻繁に呼び出される場合があります。このため、ユーザー定義関数によって予期しない値が返されることがあります。
正しい計算を行うには、計算で使用されるすべての範囲を引数として関数に渡す必要があります。計算範囲を引数として渡さない場合、関数の VBA コード内でその範囲を参照しなければ、計算エンジンでその範囲を計算に含めることができません。したがって、Excel でブックが適切に計算されず、ユーザー定義関数を計算する前にすべての参照元を確実に計算できない場合があります。
関連情報
『Visual Basic User's Guide』バージョン 5.0 の「Chapter 4 What Is a Visual Basic Procedure」
Microsoft Excel 7.0 Visual Basic ヘルプ ファイルの「ユーザー定義ワークシート関数を作成する」