- ベストアンサー
マクロで式を記入するとき、相対参照がおかしくなってしまうのを直すには?
office2000のExcelのVBAについてです。 たびたびすみません。相対参照のエラーについて教えてください。 下記のVBAの記述のように、相対参照の式をある範囲のセルに変数%の幅に応じて入力するプログラムを作成したいと考えております。 変数% = 8 With Worksheets(sheetname$) .Range("T126:AI155").ClearContents .Range(.Cells(126, 20), .Cells(155, 19 + 2 * ッ変数%)).FormulaR1C1 = _ "=(RC[-18]-R[-1]C[-18])/0.04*100" End With このマクロを単体で動作させると、式が正しく参照されてセルに式が入ります (例):=(B126-B125)/0.04*100 ところが、上位マクロから、上記を呼び出して実施すると、参照位置がおかしくなってしまう現象が発生します。 (例):=(IE1-IE65536)/0.04*100 原因がわからなく、困っております。なにか、確認したほうがよいアドバイスなどございましたら、少しでも教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
どうも。 相対式ですから、セルの座標に影響されます。 これが呼ばれる時に、ActiveCellが「A1」なのでしょう。 Sub Test() Range("A1") = "=(RC[-18]-R[-1]C[-18])/0.04*100" End Sub これを実行してみてください。 A1の-1行は65536行、A列の-18列はIE列である事が解かります。
その他の回答 (1)
- 0shiete
- ベストアンサー率30% (148/492)
IE1->IE65536ということはIE列の1行目と最終行を 参照してしまっているわけですね。 "=(RC[-18]-R[-1]C[-18])/0.04*100" と変数を使わずに書かれているので、どうして そういう事象が起こるのかわかりませんが、 一応、以下を試されてはどうでしょうか? 1) 当該コードの直前に、セルをアクティブにするコードを入れてみる。 2) msgbox関数を入れて、関係しそうな変数を 表示させてみる。
お礼
ありがとうございます。 1)を実行しましたら、解決いたしました!
お礼
セルがアクティブにならずに、グラフが選択されていました。それで、相対位置がおかしくなってしまっていたんですね。 よく知らないでVBAを使うと、おかしいことがたくさんおこってしまうんですね。 #1の方が言われているように、セルをアクティブにするようにしたら、値が正常になりました。 これも、かなり悩んでいたのですが、解決いたしました。 たびたび、アドバイス本当にありがとうございました。