1つだけ過去を変えられるとしたら?

For Next ステートメントで計算式を代入したいのですが・・・

excel(2003) VBAでの質問です。
20行ごとに同じような表が20個つづいてあります(さらにそれが複数のシートにある形です)。
それぞれの特定のセルに、計算式を入れていきたいのですが、
現状こんな感じです。

For i = 18 To 400 Step 20

Cells(i, 6).Formula = "=IF(P6>'sheet2'!g18,g1,'sheet2'!f18)"

Next i

ここで、「=」の右側の計算式の部分のセル「P6」「g18」「g1」「f18」も、変数「i」の値に応じる形で20行ずつさげたいのですが、どうしたらいいのでしょうか?

 ちなみに、イメージではこんな感じなのですが

  Cells(i, 6).Formula = "=IF(P6+i>'sheet2'!g18+i,g1+i,'sheet2'!f18+i)"

当然エラーが出てしまいます。「P6」の部分を「cells(i-12,16)」とかにしてみても無理でした。

初歩的な質問で申し訳ないのですが、ご教示の程、よろしくお願いいたします。

A 回答 (4件)

R1C1形式を上手に使ってみると,ご相談の「セルによって式の文字列を変える」必要が無くなります。



For i = 18 To 400 Step 20
Cells(i, 6).FormulaR1C1 = "=IF(R[-12]C[10]>Sheet2!RC[1],R[-17]C[1],Sheet2!RC)"
Next i

R1C1形式の式の記述は,先にセルに一度
F18:
=IF(P6>Sheet2!G18,G1,Sheet2!F18)
の式を入れておき,ツールメニューのオプションの全般でR1C1にチェックを入れると
=IF(R[-12]C[10]>Sheet2!RC[1],R[-17]C[1],Sheet2!RC)
のように自動で変わるので,そのまま数式バーの中からコピーして使えばOKです。


#別の手
目的のセルをまとめてUnionにしておき,一斉に一つの式を投入する手もあります
ワークシート上の操作では,目的のセルをコントロールキー+クリックで飛び飛びに選択しておき,一つ式を入れてコントロール+Enterで入力する操作に相当します。
でも今回は式の入力先セルが飛び飛びで沢山なので,対象セル範囲を確保するのに結局ループしないといけないため,こちらの方法はあまりメリットはありません。
    • good
    • 0
この回答へのお礼

やっぱりR1C1のほうがいいんですよね・・・
色々詳細に教えていただき、ありがとうございました。

お礼日時:2010/05/05 20:44

こんなパターンもありかも



Cells(18, 6).Formula = "=IF(P6>'sheet2'!g18,g1,'sheet2'!f18)"
Cells(18, 6).Copy

For i = 18 To 400 Step 20

Cells(i, 6).PasteSpecial

Next i

Application.CutCopyMode = False
    • good
    • 0
この回答へのお礼

ちょっとよくわからないのですが、もう少し自力で調べてみますね。
ありがとうございました。

お礼日時:2010/05/05 20:42

Cells(i, 6).Formula = "=IF(P"+6+(i-18)+">'sheet2'!g"+i+",g"+1+(i-18)+",'sheet2'!f"+i+")"



で、どうです?
※数字の意味が理解できていないので、適宜オフセットして使ってください。
※最初と真ん中だけ数字が18からじゃないので、-18させています。
    • good
    • 0
この回答へのお礼

なるほど!っていう感じです。ありがとうございました。

お礼日時:2010/05/05 20:41

単純に&で文字列を組み立てればできます。



Cells(I,6).Formula = "=IF(P" & 6 + I & ">'sheet2'!g" & 18 + I & ",g" & 1 + I & ",'sheet2'!f" & 18 + I & ")"
    • good
    • 0
この回答へのお礼

単純すぎてなんかお恥ずかしい限りです。
ありがとうございました。

お礼日時:2010/05/05 20:40

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


おすすめ情報