[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
Solved

# Monthly average - VBA

Posted on 2011-10-25
Medium Priority
666 Views
Hi,
I have came up with my own solution for this but I am not if its the neatest approach to do it.

all I am trying to do is to get the monthly average of the price for the dates and populate against the cells. (in VBA)
It would be great if some one provide me with code that would populate the 'Monthly Avg' - Column C with the price average for that month.

Many thanks
monthlyavg.xls
0
Question by:SameerMirza
• 3
• 3

LVL 50

Expert Comment

ID: 37023410
Hello,

any particular reason for VBA? A formula would be much faster. Start in C2

=AVERAGE(IF(MONTH(\$A\$2:\$A\$24)=MONTH(A2),\$B\$2:\$B\$24,""))

Confirm with Ctrl-Shift-Enter and copy down.

cheers, teylyn
0

LVL 50

Accepted Solution

Ingeborg Hawighorst (Microsoft MVP / EE MVE) earned 2000 total points
ID: 37023431
Here's one possibility to do it in code

``````Sub Macro2()
Dim lRow As Long
lRow = Cells(Rows.Count, "A").End(xlUp).Row
Range("C2").FormulaArray = _
"=AVERAGE(IF(MONTH(\$A\$2:\$A\$" & lRow & ")=MONTH(A2),\$B\$2:\$B\$" & lRow & ",""""))"
Range("C2").AutoFill Destination:=Range("C2:C" & lRow)
With Range("C2:C" & lRow)
.Copy
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End With
Application.CutCopyMode = False
Range("C2").Select
End Sub
``````
0

Author Comment

ID: 37023625
Thanks but in this case the records would go beyond one year
That is multiple years.
so we would have to add check for multiple years too.
I tried,

=AVERAGE(IF(AND(YEAR(\$A\$2:\$A\$24)=YEAR(A2), MONTH(\$A\$2:\$A\$24)=MONTH(A2)),\$B\$2:\$B\$24,""))

But it fails. Because its trying to locate the same value in the whole range.
0

LVL 50

Expert Comment

ID: 37023664
AND() does not work in this context. You can use this instead:

=AVERAGE(IF((YEAR(\$A\$2:\$A\$24)=YEAR(A2))*(MONTH(\$A\$2:\$A\$24)=MONTH(A2)),\$B\$2:\$B\$24,""))

Remember to confirm with Ctrl-Shift-Enter

cheers, teylyn
0

Author Comment

ID: 37024013
Thanks. That seems to work fine
Although I have written a module too (which works :)) using loops but I think your would be much quicker.

I have another very quick one.
I am trying to freeze pans.
Go select row -> window -> freeze pane -
for some reason it is freezing on 16 rows

tried doing it from VBA too. Get the same result
'ActiveWindow.FreezePanes = True'

How can I do it from VBA such that it would freeze on header/first row?

Thanks
0

Author Closing Comment

ID: 37024043
you are suppose to select the data and I was selecting the first row :/
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

How to get Spreadsheet Compare 2016 working with the 64 bit version of Office 2016
Windows Explorer lets you open cabinet (cab) files like any other folder. In VBA you can easily handle normal files and folders, but opening and indeed creating cabinet files takes a lot more - and that's you'll find here.
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…
###### Suggested Courses
Course of the Month19 days, 13 hours left to enroll