1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
| Sub avg()
'
' avg Macro
'
Dim i As Variant
Dim ColMax As Long
Dim ColCrnt As Long
Dim RowCrntMax As Long
Dim RowCrnt As Long
Dim TotalPerc As Double
Dim Myoutput As String
Dim LL As Long
Dim count As Double
Dim avg As Double
Dim RowSum As Long
Dim Row As Long
Dim Col As Long
Dim Status(8) As String
Dim Status_code(7) As String
Dim Dat(10) As String
Status(1) = "00_"
Status(2) = "01_"
Status(3) = "02_"
Status(4) = "02B"
Status(5) = "03"
Status(6) = "04"
Status(7) = "05"
Status(8) = "06"
' RENAME the new sheet
Sheets.Add
ActiveSheet.Name = "Average"
Myoutput = ActiveSheet.Name
'Fill array Status
For lLoop = 0 To 7
If lLoop = 0 Then
Status_code(lLoop) = "Var2"
Else
Status_code(lLoop) = Choose(lLoop, "01_", "02_", "02B", "03_", "04_", "05_", "06_")
End If
Next lLoop
'Output unsorted array
Range("A1:A" & UBound(Status_code) + 1) = _
WorksheetFunction.Transpose(Status_code)
'Fill array Date
For lLoop2 = 0 To 10
If lLoop2 = 0 Then
Dat(lLoop2) = "Year"
Else
Dat(lLoop2) = Choose(lLoop2, "1999", "2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008")
End If
Next lLoop2
Range(Cells(1, 2), Cells(1, UBound(Dat))) = Dat
With Sheets("Output")
For Each i In Status
' Find last used column
ColMax = .Cells.SpecialCells(xlCellTypeLastCell).Column
' Examine every used column
For ColCrnt = 4 To ColMax
' Find last used row in this column
RowCrntMax = .Cells(Rows.count, ColCrnt).End(xlUp).Row
count = 0
TotalPerc = 0
' Examine each row for this column
For RowCrnt = 3 To RowCrntMax
If .Cells(RowCrnt, 3).Value = i Then
'Calculate average %
TotalPerc = TotalPerc + Val(.Cells(RowCrnt, ColCrnt).Value)
count = count + 1
avg = TotalPerc / count
For Row = 2 To 8
For Col = 3 To 12
With Sheets("Average")
RowSum = .Cells(Row, Col)
With .Cells(Row, Col)
.Value = avg
End With
End With
Next
Next
Next
Next
Next
End With
End Sub |
Partager