asked on # In MS EXCEL VBA, I want to dynamically calculate count,sum,avg for a row as its added

In column A I have a list of names. Columns B,C,D have AVG,SUM,COUNT. COUNT and SUM get their values from column E,F,G,H and so on. Column B calculates the AVG from SUM and COUNT. From time to time I add info to the sheet which includes names that already exist in column A and add new names if they don't exist in column A. I would like to dynamically add the sum,avg,count to B,C,D as the sheet is updated. I know this can be done with a cell formula but I don't want cells to show #DIV/0! or zeros if there is no information for them. Can this be done with VBA instead? here is sample vba:

For y = 8 To last_cell

If player_name = Worksheets("Current Year").Cells(y, 1) Then

Worksheets("Current Year").Cells(y, 5).Value = position

' what i would like to calculate

Worksheets("Current Year").Cells(y, 2).Value = AVG

Worksheets("Current Year").Cells(y, 3).Value = SUM

Worksheets("Current Year").Cells(y, 4).Value = COUNT of range ' E "y" ' to so on

player_exists = True

End If

For y = 8 To last_cell

If player_name = Worksheets("Current Year").Cells(y, 1) Then

Worksheets("Current Year").Cells(y, 5).Value = position

' what i would like to calculate

Worksheets("Current Year").Cells(y, 2).Value = AVG

Worksheets("Current Year").Cells(y, 3).Value = SUM

Worksheets("Current Year").Cells(y, 4).Value = COUNT of range ' E "y" ' to so on

player_exists = True

End If

Microsoft Excel

Log in or sign up to see answer

Become an EE member today7-DAY FREE TRIAL

Members can start a 7-Day Free trial then enjoy unlimited access to the platform

or

Learn why we charge membership fees

We get it - no one likes a content blocker. Take one extra minute and find out why we block content.

Not exactly the question you had in mind?

Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.

ask a question
The cell shows #DIV/0 in avg. when the count is 0. I could add an if statement to avoid that error. here is an example.

```
Sub Test()
Dim Player_total_count As Integer
Dim i As Integer
Dim y As Integer
Player_total_count = Application.WorksheetFunction.CountA(Range("A1:A2000"))
i = 2
For i = 2 To Player_total_count
y = Application.WorksheetFunction.CountA(Range("E" & i & ":" & "H" & i))
If y = 0 Then
Worksheets("Current Year").Cells(i, 3).Value = "=sum(E" & i & ":" & "H" & i & ")"
Worksheets("Current Year").Cells(i, 4).Value = "=count(E" & i & ":" & "H" & i & ")"
ElseIf y <> 0 Then
Worksheets("Current Year").Cells(i, 2).Value = "=average(E" & i & ":" & "H" & i & ")"
Worksheets("Current Year").Cells(i, 3).Value = "=sum(E" & i & ":" & "H" & i & ")"
Worksheets("Current Year").Cells(i, 4).Value = "=count(E" & i & ":" & "H" & i & ")"
End If
Next i
End Sub
```

Hi there

I have attached a workbook that contains macro code that should provide what you're looking for.

There are sample columns and values provided.

Each row's avg, sum, count are calculated based on the row contents..that is, in one row you can have 6 cols of values, in another - 8, etc

Run the macro calcall.

Regards

dmang 26871049.xls

I have attached a workbook that contains macro code that should provide what you're looking for.

There are sample columns and values provided.

Each row's avg, sum, count are calculated based on the row contents..that is, in one row you can have 6 cols of values, in another - 8, etc

Run the macro calcall.

Regards

dmang

Experts Exchange has (a) saved my job multiple times, (b) saved me hours, days, and even weeks of work, and often (c) makes me look like a superhero! This place is MAGIC!

Walt Forbes

It worked. Thanks.....

You

In column D, the COUNT column, use

=if(count(e1:z1)>0,count(e

Column D will be blank if all the columns E to Z are empty.

Then columns B and C can use the D column result to avoid the unwanted display.

In Column B, the AVG column, use the formula

=if(and(d1<>"" , d1>0),c1/d1,"")

And in column C, the SUM column

=if(and(d1<>"" , d1>0),sum(e1:z1),"")

Note you must check both

it can be done with formula and without error like #DIV/0

cellAVG = =IF( ISERROR(AVERAGE(E1:H1)),0,

cellSUM= =SUM(E1:H1)

cell Count= =COUNTIF(E1:H1;">0")

instead of error