2017-07-31 31 views
1

私は過去12ヶ月の値を平均し、現在の月の値(この場合はRC[-2]-RC[-1]と30%の分散)と比較するExcel式を使用しようとしています。Excel VBA AVERAGE(可変範囲)

問題は、行が変更され、ループ内でネストされていることです。コードの下

Dim i As Long 
Dim o As Double 
Dim p As Double 

'some code here 

For i = 1 To n 
    Selection.Value = "=RC[-2]-RC[-1]" 
    o = ActiveCell.Value 
    p = Application.Formula.Average(Range("RC[-13]", "RC[-2]")) 
    If (o >= (p + p * 3/10)) Or (o < (p + p * 3/10)) Then 
     ActiveCell.Font.Color = vbRed 
    End If 
    ActiveCell.Offset(1, 0).Select 
Next i 

別の平均機能せず、その平均値を定義する方法上の任意のアイデアは?

+3

他のコードを表示することができます。ここでは、ユーザーは 'Selection'、' ActiveCell'と 'Select'を使わずに答えを出すことを好むでしょう。 –

+0

クイック返信ありがとう!実際にコードの残りの部分はありません。私が達成しようとしているのは2つの値を比較することです.1つは前の2つの列の値の差として設定され、もう1つは同じ行の最後の12の列の値です。 – CCM

+0

それでは、最初にCellがActiveCellであることをお知らせください。 –

答えて

0

ActiveCell.Offset(0, 1).Value = "=AVERAGE(RC[-13]:RC[-2])"で回避策を発見しました。

ありがとうございました!

1

Selection.Value = "=RC[-2]-RC[-1]"からSelection.Value = Offset(0, -2).Value - Offset(0, -1).Valueに変更してください。最後の12ヶ月からのデータ範囲に設定し、平均計算、Dim rng As Range

次に、ある範囲の変数を宣言

Set rng = Range(Selection.Offset(0, -13), Selection.Offset(0, -2)) 
p = Application.Average(rng) 
+0

これは論理的に達成しようとしていた選択範囲ですが、動作しません。 – CCM

+0

このコードを実行するときに正しいセルが選択されていることを確認する必要があります。たとえば、セルA1を選択してこれを実行しようとすると、-12番目の列に終わるので、-13の列をオフセットすることができます。これはエラーです。あなたが望むセルを参照するスマートな方法をコードに含めるようにしてください。 'ActiveCell'と' Selection'を使うとエラーになることがよくあります。 –