- ベストアンサー
Excel VBAで組んだ自作関数が認識されない
お世話になります。お教えください。 Excel2000や2003において、自作関数を作成。 (B(C3,D2,E2,F2,F3,$E$6,$E$7,$I$5)-A(C4,D4,E4,F4,$E$6,$E$7,$I$5)のように、セルの数値を読み込み、ある計算を2回(A関数とB関数)させ 最後に差を求める。) 計算させると値が出るのですが、VBAを盛り込んだExcelファイルを保存させるとエラーを表示します。("=VALUE"?などと出る) 自作関数のセル位置でEnterを押すと再認識して値が出るのですが・・・。 対処法をご存知の方がいらっしゃったらお教えください。 お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
再度の登場です。 原因は、揮発性関数により、自動的(知らぬ間)に関係するセルの値がありえない値に変更されたものと考えられます。 揮発性関数はシート再計算、ブックを開いたときなどに自動的に再計算されます。 揮発性関数には次のようなものがあります。(一応ご自分でもお調べください) NOW() RAND() AREAS() INDEX() OFFSET() CELL() INDIRECT() ROWS() COLUMNS() これらの関数を使っていると思わぬところでセルの値が変更されてしまうということです。 使用の有無を確認して下さい。 以上です。
その他の回答 (2)
- onlyrom
- ベストアンサー率59% (228/384)
こんばんは。 保存はコードでされているんでしょうか。 でしたら保存直前に引数となるセルの値をErrorが出るような値に変化させてるとかはありませんか。 何れにしろ、その関数及びあれば保存近辺のコードをアップしてみてくだい。 以上です。
お礼
回答ありがとうございます。 >保存はコードでされているんでしょうか。 セル内には式(質問で記入したように"=B関数(C3,D2,E2,F2・・・という形。この式がマクロで定義されているので、通常は計算結果の値になっています。)が保存してあります。 B関数、A関数もマクロ内で式定義されており、B関数=B1(・・・)+B2(・・・)+B3(・・・)、、、という形でB1、B2・・・もマクロで定義されると言うような多重的な構造?になっています。 このA関数とB関数が入っているセル、保存直前は計算結果の数字なのですが、上書き保存などをすると、"#VALUE!"というような?形になってしまいます。 ちなみに、保存時は特にコード組をしていません。 お願いします。
- FEX2053
- ベストアンサー率37% (7991/21371)
その関数をどこにおきました? そのブックの「標準モジュール」上に置かないとエラーが出ますよ。
お礼
回答ありがとうございます。 FUNCTIONなる名前で標準モジュールを作成し、そこで関数定義しました。
お礼
回答ありがとうございます。 揮発性関数を調べ、遅延評価関数などを調べることができ、この辺りが怪しいと感じました。 (シート内が計算の巣窟のような感じなので、マクロで定義した計算式で算出した値を別のセルで計算に使用しているという状態です。よって計算される前に参照が起こり、エラーを起こしていたのでは?などと推測しています・・・。) とりあえず、ここまでの情報をいただければ、少し自分で考えられそうなので、ここで一旦スレッドを閉じさせていただきたいと思います。 ありがとうございました。