Excel でのカスタム関数の制限事項について

適用先
Excel 2010

概要

[適用対象] セクションに記載されている Microsoft Excel のバージョンでは、Visual Basic for Applications を使用してカスタム計算を返すユーザー定義関数を作成できます。 ただし、ユーザー定義関数は、ワークシートのセル内の数式によって呼び出されたときに Microsoft Excel 環境を変更するアクションを実行できません。

追加情報

ワークシート セルの数式によって呼び出されたユーザー定義関数では、Microsoft Excel の環境を変更することはできません。 つまり、そのような関数は次の操作を実行できません。

  • スプレッドシートのセルを挿入、削除、書式設定します。
  • 別のセルの値を変更する。
  • シートを移動、名前変更、削除、またはブックに追加します。
  • 計算モードや画面ビューなど、環境オプションを変更します。
  • ブックに名前を追加します。
  • プロパティを設定するか、ほとんどのメソッドを実行します。

ユーザー定義関数の目的は、Microsoft Excel に付属する関数には含まれていないユーザー設定の関数をユーザーが作成できるようにすることです。 Microsoft Excel に含まれる関数でも、環境を変更することはできません。 関数は、入力されたセルに値またはテキストを返す計算を実行できます。 環境の変更は、Visual Basic サブルーチンを使用して行う必要があります。

Excel では、ユーザー定義関数が含まれるセルの preformer が計算中に調べられます。 計算プロセス中にすべての先例がこれまでに計算されていない場合、Excel は最終的にユーザー定義関数を呼び出し、Null または Empty セルを関数に渡します。 次に、Excel はすべての先例の計算に十分な計算パスが発生していることを確認します。 最終計算パスでは、ユーザー定義関数にセルの現在の値が渡されます。 これにより、ユーザー定義関数が予期したよりも頻繁に、予期しない引数で呼び出される可能性があります。 したがって、ユーザー定義関数から予期しない値が返されることがあります。

正しい計算を行うには、計算で使用されるすべての範囲を引数として関数に渡す必要があります。 関数の VBA コード内の範囲を参照する代わりに、計算範囲を引数として渡さない場合、Excel は計算エンジン内でそれらの範囲を考慮できません。 したがって、Excel ではブックが適切に計算されて、ユーザー定義関数を計算する前にすべての事前設定が計算されていることを確認できない場合があります。

参考資料

『Visual Basic ユーザーズ ガイド』5.0 版の第 4 章「Visual Basic プロシージャとは」

 ユーザー定義ワークシート関数の作成、Microsoft Excel 7.0 Visual Basic ヘルプ ファイル。