Try the attachment
Option Explicit
Const LIGHT_GREY = 15921906 ' The result of RGB(242, 242, 242)
Const LIME = 52377 'The result of RGB(146, 212, 0)
Const addrAverage As String = "P1"
Sub FormatSheet()
Dim i As Long
With ActiveSheet
'rows
For i = 2 To 10
.Rows(10 + i).RowHeight = .Rows(11).RowHeight
Next i
'cols
For i = 2 To 4
.Columns(5 + i).ColumnWidth = .Columns(6).ColumnWidth
Next i
For i = 1 To .Shapes.Count
With .Shapes(i)
If .Type = msoAutoShape Then
If .AutoShapeType = msoShapeOval Then
.Select
Selection.OnAction = "Clicked"
.Fill.ForeColor.RGB = LIGHT_GREY
.Name = "OVAL-" & .TopLeftCell.Row & "-" & .TopLeftCell.Column
End If
End If
End With
Next i
End With
End Sub
Sub Clicked()
Dim vCaller As Variant, vShape As Variant
Dim i As Long, j As Long
'(1) = caller row, (2) = caller col
vCaller = Split(Application.Caller, "-")
With ActiveSheet
For i = 1 To .Shapes.Count
With .Shapes(i)
If .Type = msoAutoShape Then
If .AutoShapeType = msoShapeOval Then
vShape = Split(.Name, "-")
If vCaller(1) = vShape(1) Then ' in same row
If vCaller(2) = vShape(2) Then ' in same col
If .Fill.ForeColor.RGB = LIME Then
.Fill.ForeColor.RGB = LIGHT_GREY
Else
.Fill.ForeColor.RGB = LIME
End If
Else
.Fill.ForeColor.RGB = LIGHT_GREY
End If
End If
End If
End If
End With
Next I
End With
AverageButtons
End Sub
Sub AverageButtons()
Dim i As Long, cntResponses As Long, r As Long, c As Long, totResponses As Long
Dim vShape As Variant
Dim aryGreen(11 To 20) As Long ' match .TopLeftCell row values
'zero out stat array with -1 for no response
For r = LBound(aryGreen, 1) To UBound(aryGreen, 1)
aryGreen(r) = -1
Next r
With ActiveSheet
For i = 1 To .Shapes.Count
With .Shapes(i)
If .Type = msoAutoShape Then
If .AutoShapeType = msoShapeOval Then
If .Fill.ForeColor.RGB = LIME Then
vShape = Split(.Name, "-")
aryGreen(vShape(1)) = (vShape(2) - 5)
End If
End If
End If
End With
Next i
End With
cntResponses = 0
totResponses = 0
For r = LBound(aryGreen, 1) To UBound(aryGreen, 1)
If aryGreen(r) <> -1 Then
cntResponses = cntResponses + 1
totResponses = totResponses + aryGreen(r)
End If
Next r
If cntResponses > 0 Then
ActiveSheet.Range(addrAverage).Value = totResponses / cntResponses
Else
ActiveSheet.Range(addrAverage).Value = CVErr(xlErrNum)
End If
End Sub