重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

お世話になります。お教えください。
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を押すと再認識して値が出るのですが・・・。
対処法をご存知の方がいらっしゃったらお教えください。
お願いします。

A 回答 (3件)

再度の登場です。



原因は、揮発性関数により、自動的(知らぬ間)に関係するセルの値がありえない値に変更されたものと考えられます。
揮発性関数はシート再計算、ブックを開いたときなどに自動的に再計算されます。
揮発性関数には次のようなものがあります。(一応ご自分でもお調べください)

 NOW()  RAND()  AREAS() INDEX()  OFFSET()
 CELL()  INDIRECT()  ROWS()  COLUMNS()

これらの関数を使っていると思わぬところでセルの値が変更されてしまうということです。
使用の有無を確認して下さい。

以上です。
 
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
揮発性関数を調べ、遅延評価関数などを調べることができ、この辺りが怪しいと感じました。
(シート内が計算の巣窟のような感じなので、マクロで定義した計算式で算出した値を別のセルで計算に使用しているという状態です。よって計算される前に参照が起こり、エラーを起こしていたのでは?などと推測しています・・・。)
とりあえず、ここまでの情報をいただければ、少し自分で考えられそうなので、ここで一旦スレッドを閉じさせていただきたいと思います。
ありがとうございました。

お礼日時:2007/02/05 23:53

こんばんは。



保存はコードでされているんでしょうか。
でしたら保存直前に引数となるセルの値をErrorが出るような値に変化させてるとかはありませんか。
何れにしろ、その関数及びあれば保存近辺のコードをアップしてみてくだい。

以上です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>保存はコードでされているんでしょうか。
セル内には式(質問で記入したように"=B関数(C3,D2,E2,F2・・・という形。この式がマクロで定義されているので、通常は計算結果の値になっています。)が保存してあります。
B関数、A関数もマクロ内で式定義されており、B関数=B1(・・・)+B2(・・・)+B3(・・・)、、、という形でB1、B2・・・もマクロで定義されると言うような多重的な構造?になっています。

このA関数とB関数が入っているセル、保存直前は計算結果の数字なのですが、上書き保存などをすると、"#VALUE!"というような?形になってしまいます。
ちなみに、保存時は特にコード組をしていません。
お願いします。

お礼日時:2007/02/04 02:11

その関数をどこにおきました?


そのブックの「標準モジュール」上に置かないとエラーが出ますよ。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
FUNCTIONなる名前で標準モジュールを作成し、そこで関数定義しました。

お礼日時:2007/02/02 11:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!