• ベストアンサー

VBAのFunction内でのセル値書き換え

Excel上でVBAを使ってある値を求めるユーザー定義関数を 自作しようとしています。 その関数の中でワークシートの中のセル値を書き換えようとしましたが そこでプログラムは停止してしまいます。 エラーメッセージなどは無く、VBAプログラムが終了します。 サブプロシージャの中でなら当然書き換えはできるのですが、 関数の中でセル値を書き換えることはできないのでしょうか? 環境はWinXP SP2, Office 2000です。 どなたか分かる方、教えていただけると幸いです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 どうも具体性がないので良く分からないのですが、ソルバーの実行をどのようにしているかではないでしょうか? 書き換え自体は、最初からマクロでソルバーを動かせばよいし、そうでなければ、どの道、セルが変化するのですから、Worksheet_Change イベントを用いれば済むように思います。ただし、ソルバーは、解の見つからない場合を想定しておかないと、こちらの思惑では動かないことがあります。 そうでなくて、繰り返し計算なら、循環参照を作って回数を入れれば済むと思います。

funifuni11
質問者

補足

アドバイスありがとうございました。 結局、マクロで全部を動かすことにしました。

その他の回答 (1)

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

ワークシート関数で他のセルの値を書き換えられないのと 同じです。 何ゆえユーザー定義関数で行いたいのでしょう?

funifuni11
質問者

補足

そうなんですか… やりたいことは、繰り返し計算を必要とする式を、 関数内でソルバを用いて解いて、 自作ワークシート関数の戻り値として利用したいのです。 ソルバ実行前にソルバのパラメータが参照しているセルを書き換えたいのです。 何かうまい解決法があればぜひ教えていただきたいです。

関連するQ&A

  • VBAでセルのコピーがおかしい??バグ??

    VBAでセルのコピーをする際におかしいことがあります。 詳しい方よろしくお願いします。 sheet2のA1からZ5の間に罫線と5個のセルに入力規則を貼ったものをただターゲットセルからオフセットした所へコピーするだけのプログラムなのですが画面更新を停止していてもブルブル揺れてしまいます。 しかし、画面更新は停止しているので動作自体は見えませんが画面が揺れます。何故なのでしょうか? また別の問題ですが、Sheet2の入力規則なのですが名前の定義とINDIRECT関数を利用して連動したドロップダウンリストにしています。 C1セルにドロップダウンリストを作りその内容に応じてD1~D5のリストを変化させています。 =INDIRECT($C$1)と固定してあるのですがこれをSheet1にそのままコピーしていくと値がおかしくなってしまいます。 動的に変化させるいい知恵は無いでしょうか?

  • excel vbaのプログラムが作成できません

    プログラミングでexcel vbaを勉強しています。 excel vbaのプログラムでフィボナッチ数列のプログラムを作れという問題なんですけど、正直全くわかりません。誰かこのプログラミングを教えてください。お願いします。 フィボナッチ数列は次のように帰納的に定義される。 fib(1) = fib(2) = 1 fib(n) = fib(n - 1) + fib(n - 2) (ただしn >= 3) この関数fib(n)を定義せよ。ただし引数nはInteger型、fib関数の返す値はLong型とする。 またfib関数を呼び出す適当なメインプロシージャを定義し、A1セルからA20セルまでに fib数列の1~20番目の値を書き出すようにせよ。 という問題です。ほんとに困ってますお願いします

  • エクセルVBAで関数が入った空白セルの取得

    エクセルVBAで下記のようなセルの参照をしたいのですが、よろしくお願いします。(エクセル2002です)   A  B  C  D  E  F 1 78 80 セル(A1)(B1)には値も関数も入れられています。 セル(C1)(D1)(E1)には値は入っていませんが、ワークシート関数が組み込まれており空白となっています。(関数の""にて空白) セル(F1)には何も入力されていません。 今回はセル(B1)の80の値を取得できるようにVBAで下記のようにコードを組みました。 Range("F1").End(elToLeft).Activate そうすると、セル(E1)に関数があるために(?)(E1)がアクティブな状態となります。 関数が入力されていても空白として(B1)をアクティブな状態にするために良い方法はありますでしょうか? 誠に申し訳ございませんが、よろしくお願いします。

  • エクセルVBA 「このセルを選択する」方法は? (超初心者です)

    ExcelのVBA初心者です。どなたか教えてください。 自作の関数を作りたいのですが、excelで、「この場所のセルのひとつ左のセルを選択」して、ある処理をするにはどのようにしたらいいのでしょうか? たとえば、A1に何かデータがあるとき、B1に自作関数を打ち込むとA1の値を使って何らかの処理をして、その値をB1に返す、ということがしたいのです。また、例えばデータがB8にあるときは、C8に関数を入れるとB8のデータが処理されてC8に返ってくるようにしたいです。 最初、ActiveCell.Offset(0,-1) でうまくいくと思っていましたが、実際やってみるとどうもうまくいきませんでした。 どなたかわかる方、よろしくお願いします。

  • VBAで特定のセルに値を入力したい

    VBAについて教えてください. (当方初心者です) VBAでユーザー定義関数で 計算しているセルから相対的な位置に値を入力したいのです. より具体的に言うと、例えば B3のセルでユーザー定義関数を用いて計算します。 その関数で計算した結果である一定の条件を満たした時にだけ その関数で計算しているセルから2行2列隣のセルに 特定の値を入力したい場合にはどうすればよいのでしょうか? 試しに簡単に書いてみたのが以下です。 ------------------------------------------- Sub test1() ActiveCell.Offset(2, 2).Value = 100 End Sub Function test2() test1 End Function ------------------------------------------- これだとtest1を単体で実行した場合は上手く動作するのですが test2でtest1を呼び出した場合はエラーになります。 これをどう直せばtest2内でtest1の動作を実行できるのでしょうか? ご教授のほどよろしくお願いいたします。

  • VBA 固定セルから可変セルへのハイパーリンク

    VBA、マクロの記述方法を教えてください ハイパーリンク元:ワークシート1のA1セル ハイパーリンク先:ワークシート2のcells(リンク先セルの行番号,リンク先セルの列番号) リンク先セルの行番号、リンク先セルの列番号はいずれもINTEGERの変数名、でハイパーリンクを張ろうとする時点(段階)でマクロによって値が定義(付与)されているもの、とします

  • Excel VBAの Functionをワークシートから使用できないようにしたいのですが...

    Excel VBAについて質問です。 functionプロシージャを使っている時,一般のマクロからは呼び出せるが,ワークシート関数として使いたくないものがあります。 すなわち,「関数の挿入」ダイアログの「ユーザー定義」のところに不必要な(ワークシート関数として使う意図のないもの)を表示させたくないのですが,そのようなことは可能でしょうか。 今,できるだけsubプロシージャの形にするようにしたりしているのですが,うまい方法があればFunctionも使いたいと思っています。 良い方法があれば教えてください。

  • Excelでセル内の数式は残し値だけを削除したい

    こんばんは。 office XP または office 2010です。 Excelでセルの値を削除したいのですが、すでに入っている計算式とか関数は 削除したくないのですが、どのようにしてやればよいのでしょうか。 単独で使う場合とか、マクロ、VBAでも使いたいのですが。 宜しくお願い致します。

  • Excel VBA で自然対数の関数Lnが使えない

    Windows XP SP2, office excel 2003 VBAで自然対数を使うため,Ln()の関数を使おうとしたのですが実行すると「関数が定義されていません」というエラーメッセージが出ます.ネットで調べると,ワークシートでもVBAでも普通,Ln()の関数は使えるようです. Lnの後ろにカーソルがある状態でF1を押してヘルプを出そうとすると,「キーワードが見つかりません」ではなく,「ページが見つかりません」と表示されます.「キーワードが見つかりません」は,でたらめな文字列のヘルプを出そうとすると表示されるものです. 同様にLog10()も使うことができませんでしたが,EXP()は使えます.なんとかVBAでLn()を使えるようにすることはできないでしょうか?

  • EXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法

     EXCEL2002で、ブック内のワークシートを他のブックに(VBA含む丸ごと)コピーして移す方法  普通のやり方では、セルの数字、値だけで、通常は、中身の重要な"関数式"であったり、VBA等のプログラムまで、コピーされることは、ありませんので、そこまで、出来る方法を教えて下さい。

専門家に質問してみよう