3

I'm trying to use an Excel formula that averages the last 12 month values and compares it to the current month value (in this case RC[-2]-RC[-1] and a 30% variance).

The issue is that the row changes, it is nested in a loop.

Below the code:

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

Any ideas on how to define that average without a separate average function ?

6
  • 3
    can you show the rest of the code, users here would prefer to give an answer without using Selection, ActiveCell and Select. Commented Jul 31, 2017 at 7:59
  • Thanks for the quick reply! There isn't any rest of the code really. What I am trying to achieve is compare 2 values, one is set as a difference between the previous 2 column values and the other is this last 12 column values for the same row. Commented Jul 31, 2017 at 8:01
  • so can you let us know whuch Cell is the ActiveCell at the begining ? Commented Jul 31, 2017 at 8:03
  • The activecell is the selections or to be more specific RC[-2]-RC[-1] Commented Jul 31, 2017 at 8:05
  • 1
    RC[-2]-RC[-1] is not a cell, unless you know what the origin is. Can you show a sample of your worksheet? Commented Jul 31, 2017 at 8:19

2 Answers 2

2

Change Selection.Value = "=RC[-2]-RC[-1]" to Selection.Value = Offset(0, -2).Value - Offset(0, -1).Value.

Then, declare some range variable: Dim rng As Range, then set it to range with data from last 12 months and calculate average:

Set rng = Range(Selection.Offset(0, -13), Selection.Offset(0, -2))
p = Application.Average(rng)
Sign up to request clarification or add additional context in comments.

2 Comments

That is the selection range I was trying to achieve logically, but it is not working.
You have to make sure that you have selected correct cell when you run this code. When you select for example cells A1 and try to run this, you can offset -13 columns, because you would end up on -12th column... and that's an error. Try to include in your code some smarter ways to refer cell you want. Using ActiveCell and Selection often leads to errors.
0

Found a workaround with ActiveCell.Offset(0, 1).Value = "=AVERAGE(RC[-13]:RC[-2])".

Thanks for your time guys!

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.