• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAによる行追加時の)

VBAで行を挿入する際に数式の参照が変わる問題

このQ&Aのポイント
  • VBAで行を追加する際に、数式の参照が変わってしまう問題が発生しています。
  • 行追加時に数式の参照を絶対参照や複合参照のまま保つ方法を探しています。
  • Excel2003、Excel2007を使用しており、Win XP(SP3)を使用しています。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

>上記のG10はG11(以降も全て)にずれますます まさにあなたがご自分で言ってるとおりなので,10行目に行挿入したらG10を参照している数式はG11を参照する数式に書き換わります。 簡易な回避策としては,いま9行目(E9およびF9)は通常「タイトル行」として何か「言葉」が書かれているのが常なので,通常はG10の数式を G10セル =IF(OR(E10<>"",F10<>""),$G$9+SUM($E$9:$E10)-SUM($F$9:$F10),"") 以下コピー としておくことで対策できます。 そういう細工をどうしてもしたくない場合 >最初の行、途中、最終行に関係なく正しく行追加する方法がありましたらお教え下さい G10: =IF(COUNT(INDIRECT("RC5:RC6",FALSE)),SUM(INDIRECT("G9"),INDIRECT("E10:E"&ROW()))-SUM(INDIRECT("F10:F"&ROW())),"") とか =IF(COUNT(INDIRECT("RC5:RC6",FALSE)),SUM(INDIRECT("G9"),INDIRECT("R10C5:RC5",FALSE))-SUM(INDIRECT("R10C6:RC6",FALSE)),"") などのように,INDEX関数,OFFSET関数,INDIRECT関数などを駆使して行(セル)に全く依存しない数式を用意する事もできます。

kiki_s
質問者

お礼

>以下コピー >としておくことで対策できます。 これは試したのですが、絶対参照、複合参照の部分も変わってしまいます。 コピー方法を変えてみたりと、色々試してみたのですが駄目でした。 で、結局は数式自体を変える事にしました。 元々は、行毎に範囲が変わって行くのですが、 範囲を無くし、全て同じ行で処理出来るように変更しました。 =IF(AND(E10="",F10=""),"",OFFSET(G10,-1,0)+E10-F10) この数式の欠点は途中に入力値が無い場合、 次行以降が全てエラーになる事です。 まぁ、歯抜けになる使い方をしないので問題はなさそうです。 数式については、もっと勉強しなければいけないようです。 ありがとうございました。

その他の回答 (1)

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.2

恐らくの話ですが、 関数式でない実データがあって、 その並びは行挿入でコントロールしてやる必要があるが、 行挿入をすると、 関数式の参照関係が挿入行を無視してしまう。 と、言うことのように思います。 これはVBA側の問題でないように思います。 シートで「コピーしたものを挿入」した時も 似たようになりますから… ところで シートで空行を作り、関数式をコピペする場合は 必要範囲を見極め フィルして参照関係を整えるのですが、 VBAでこの「必要範囲を見極める」というのは、 人が介在しない以上、難しいと思います。 (※注:今の私の力量の範囲での話しですが) しかしVBA、 多少量があってもへっちゃらですから、 データ挿入のたびに 式の部分全てに対して、 一番上のデータ行をコピーして全行に貼り付ければ 式が不必要に絶対参照で書かれていない限り 参照関係は整うはずです。 如何でしょうか? 参考程度にもなってないかも知れませんが、 これでも尚、お役に立てていたなら幸いです。

kiki_s
質問者

お礼

VBAで必要とする範囲を調べるのは、 セルに名前定義をしてる部分がありますので、 そのセルのアドレスから範囲を調べる事は出来ます。 実際、行数は増減するので、 開始、終了位置が分からないと全体の処理が出来ません。 VB6を色々と使っていましたので、 VBAもそんなに違和感はありません。 (それでも独特なもので苦労はしますけど) ただ、エクセルの数式は、ほとんど使った事が無くて、 見よう見まねで四苦八苦している状態です。 >不必要に絶対参照で書かれていない限り エクセル自体のコピーでも変わってしまうので、 VBAの問題ではないようですね。 全行コピーも考えたのですが、 結局絶対参照の計算を除く事にしました。 試してみて問題が無いのを何度も何度も確認しました。 まだまだ努力が足りないようです。 ありがとうございました。