Attribute VB_Name = "APAnalysis" Global AgentPerformanceAnalysisHelloworld As String Global AgentPerformanceAnalysisRankOfEachMonth(12, 5) As String Global TempMonthlyComission(12) As String Global SortedMonthlyComission(12) As Double Global sortedArray As Variant Global sort_result As Variant ' Global monthly_top_5_comission_value(12, 5) As Double ' Global monthly_top_5_comission_name(12, 5) As String Function APAnalysis_Calc(ByVal TablesMeta As Variant) As Variant Dim agent_sales_table As Variant Dim product_sales_meta As Variant Dim product_sales_table As Variant Dim monthly_top_5_comission_value(12, 5) As Double Dim monthly_top_5_comission_name(12, 5) As String agent_sales_table = TablesMeta(0) Dim agent_sales_table_rows As Variant agent_sales_table_rows = agent_sales_table(0) product_sales_table = TablesMeta(1) Dim product_sales_table_row As Variant product_sales_table_row = product_sales_table(0) agent_working_performance = TablesMeta(2) Dim val_product_sales_comission As String Dim val_product_sales_selling_price As String Dim val_product_sales_selling_unit As String Dim val_agent_sale_commision_pct As String Dim val_agent_sale_agent_name As String Dim val_agent_sale_agent_team As String Dim monthly_commission(12) As Double Dim montyly_commission_TA(12) As Double Dim montyly_commission_TB(12) As Double Dim quartely_commission_TA(12) As Double Dim quartely_commission_TB(12) As Double For ps = 1 To product_sales_table(1) val_product_sales_date = product_sales_table_row(ps, 2) dt = DateValue(val_product_sales_date) intMonth = month(dt) intQuarter = Int((intMonth - 1) / 3) + 1 val_product_sales_selling_unit = product_sales_table_row(ps, 4) val_product_sales_selling_price = product_sales_table_row(ps, 5) val_agent_sale_agent_name = agent_sales_table_rows(ps, 3) val_agent_sale_agent_team = agent_sales_table_rows(ps, 4) val_agent_sale_commision_pct = agent_sales_table_rows(ps, 6) val_product_sales_comission = val_product_sales_selling_unit * val_product_sales_selling_price * val_agent_sale_commision_pct product_sales_table_row(ps, 6) = val_product_sales_comission Dim temp_key As String temp_key = val_agent_sale_agent_name + "," + CStr(intMonth) If (Not (IsEmpty(temp_key)) And Not (monthly_commission_per_agent.exists(temp_key))) Then For j = 1 To 12 monthly_commission_per_agent(val_agent_sale_agent_name + "," + CStr(j)) = 0 Next j End If monthly_commission_per_agent(temp_key) = monthly_commission_per_agent(temp_key) + val_product_sales_comission monthly_commission(intMonth) = monthly_commission(intMonth) + val_product_sales_comission If (val_agent_sale_agent_team = "A") Then montyly_commission_TA(intMonth) = montyly_commission_TA(intMonth) + val_product_sales_comission End If If (val_agent_sale_agent_team = "B") Then montyly_commission_TB(intMonth) = montyly_commission_TB(intMonth) + val_product_sales_comission End If If (val_agent_sale_agent_team = "A") Then quartely_commission_TA(intQuarter) = quartely_commission_TA(intQuarter) + val_product_sales_comission End If If (val_agent_sale_agent_team = "B") Then quartely_commission_TB(intQuarter) = quartely_commission_TB(intQuarter) + val_product_sales_comission End If Next ps For m = 1 To 12 Dim temp_sort(20) As Double i = 0 For Each sales_name In SALES_ARRAY temp_key = sales_name + "," + CStr(m) temp_sort(i) = monthly_commission_per_agent(temp_key) i = i + 1 Next sales_name sort_result = SortArray(temp_sort) monthly_top_5_comission_value(m, 0) = sort_result(0) monthly_top_5_comission_value(m, 1) = sort_result(1) monthly_top_5_comission_value(m, 2) = sort_result(2) monthly_top_5_comission_value(m, 3) = sort_result(3) monthly_top_5_comission_value(m, 4) = sort_result(4) For Each sales_name In SALES_ARRAY temp_key = sales_name + "," + CStr(m) If (monthly_top_5_comission_value(m, 0) = monthly_commission_per_agent(temp_key)) Then monthly_top_5_comission_name(m, 0) = sales_name End If If (monthly_top_5_comission_value(m, 1) = monthly_commission_per_agent(temp_key)) Then monthly_top_5_comission_name(m, 1) = sales_name End If If (monthly_top_5_comission_value(m, 2) = monthly_commission_per_agent(temp_key)) Then monthly_top_5_comission_name(m, 2) = sales_name End If If (monthly_top_5_comission_value(m, 3) = monthly_commission_per_agent(temp_key)) Then monthly_top_5_comission_name(m, 3) = sales_name End If If (monthly_top_5_comission_value(m, 4) = monthly_commission_per_agent(temp_key)) Then monthly_top_5_comission_name(m, 4) = sales_name End If Next sales_name Next m Debug.Print "helloworld" APAnalysis_Calc = Array(monthly_commission_per_agent, monthly_commission, montyly_commission_TA, montyly_commission_TB, quartely_commission_TA, quartely_commission_TB, monthly_top_5_comission_name, monthly_top_5_comission_value) End Function Function APAnalysis_WriteTable(ByVal calc_result As Variant, ByVal FILE_PATH As String) Dim monthly_commission As Variant Dim montyly_commission_TA As Variant Dim montyly_commission_TB As Variant Dim monthly_top_5_comission_name As Variant Dim monthly_top_5_comission_value As Variant monthly_commission = calc_result(1) montyly_commission_TA = calc_result(2) montyly_commission_TB = calc_result(3) quartely_commission_TA = calc_result(4) quartely_commission_TB = calc_result(5) monthly_top_5_comission_name = calc_result(6) monthly_top_5_comission_value = calc_result(7) Const TOP_ROW As Long = 1 Const START_CELL As String = "A2" Dim wb As Workbook Dim ws As Worksheet Dim startCell As Range Dim i As Long Dim tempArray() As Variant ' Open the workbook Set wb = Workbooks.Open(FILE_PATH) ' Check if the sheet exists On Error Resume Next Set ws = wb.Sheets("Agent performance analysis") On Error GoTo 0 ' If not found, create a new sheet If ws Is Nothing Then Set ws = wb.Sheets.Add(After:=wb.Sheets(wb.Sheets.Count)) ws.Name = "Agent performance analysis" Else ' Empty the entire sheet ws.UsedRange.ClearContents End If ' Write month names Set startCell = ws.Range("B1") tempArray = Array("January", "Feburary", "March", "April", "May", "June", "July", "Augest", "September", "October", "November", "December") For i = LBound(tempArray) To UBound(tempArray) startCell.Offset(0, i).Value = tempArray(i) Next i ' Write month names Set startCell = ws.Range("A2") For i = LBound(SALES_ARRAY) To UBound(SALES_ARRAY) startCell.Offset(i, 0).Value = SALES_ARRAY(i) Next i ' Write month names Set startCell = ws.Range("A14") tempArray = Array("Total", "", "Team A total", "Team B Total", "Team A Quartely", "Team B Quartely") For i = LBound(tempArray) To UBound(tempArray) startCell.Offset(i, 0).Value = tempArray(i) Next i Set startCell = ws.Range("B2") For m = 1 To 12 For i = LBound(SALES_ARRAY) To UBound(SALES_ARRAY) Dim sales_name As String sale_name_comma_month = SALES_ARRAY(i) + "," + CStr(m) startCell.Offset(i, m - 1).Value = monthly_commission_per_agent(sale_name_comma_month) Next i Next m ' Write month names Set startCell = ws.Range("B14") tempArray = Array("Total", "", "Team A total", "Team B Total", "Team A Quartely", "Team B Quartely") ' For i = LBound(tempArray) To UBound(tempArray) ' startCell.Offset(i, 0).Value = tempArray(i) ' Next i For m = 1 To 12 Dim intQuarter As Integer intQuarter = Int((m - 1) / 3) + 1 startCell.Offset(0, m - 1).Value = monthly_commission(m) startCell.Offset(2, m - 1).Value = montyly_commission_TA(m) startCell.Offset(3, m - 1).Value = montyly_commission_TB(m) startCell.Offset(4, m - 1).Value = quartely_commission_TA(intQuarter) startCell.Offset(5, m - 1).Value = quartely_commission_TB(intQuarter) Next m ' styling For i = 0 To 100 ws.Range("A1").Offset(0, i).EntireColumn.AutoFit Next i For i = 1 To 14 Range("A1").Offset(0, i).EntireColumn.ColumnWidth = 15 Next i Dim ranges_need_merge As Variant ranges_need_merge = Array("B18:D18", "E18:G18", "H18:J18", "K18:M18", "B19:D19", "E19:G19", "H19:J19", "K19:M19") For r = LBound(ranges_need_merge) To UBound(ranges_need_merge) range_need_merge = ranges_need_merge(r) With Range(range_need_merge) .Merge .VerticalAlignment = xlVAlignCenter .HorizontalAlignment = xlHAlignCenter End With Next r Dim ranges_need_paint As Variant ranges_need_paint = Array("B1:M1") For r = LBound(ranges_need_paint) To UBound(ranges_need_paint) range_need_merge = ranges_need_paint(r) With Range(range_need_merge) .Interior.Color = RGB(217, 210, 233) End With Next r ranges_need_paint = Array("A2:A11", "A14") For r = LBound(ranges_need_paint) To UBound(ranges_need_paint) range_need_merge = ranges_need_paint(r) With Range(range_need_merge) .Interior.Color = RGB(180, 167, 214) End With Next r ranges_need_paint = Array("A16:A19") For r = LBound(ranges_need_paint) To UBound(ranges_need_paint) range_need_merge = ranges_need_paint(r) With Range(range_need_merge) .Interior.Color = RGB(142, 124, 195) End With Next r ' Rank for each month Set startCell = ws.Range("A21") startCell.Value = "Rank for each month" tempArray = Array("January", "Feburary", "March", "April", "May", "June") For i = 0 To 5 startCell.Offset(1, (i * 2) + 1).Value = tempArray(i) Next i For i = 1 To 5 startCell.Offset(i + 1, 0).Value = i Next i tempArray = Array("July", "Augest", "September", "October", "November", "December") For i = 0 To 5 startCell.Offset(8, (i * 2) + 1).Value = tempArray(i) Next i For i = 1 To 5 startCell.Offset(i + 8, 0).Value = i Next i For m = 1 To 6 i = m - 1 startCell.Offset(2, (i * 2) + 1).Value = monthly_top_5_comission_name(m, 0) startCell.Offset(3, (i * 2) + 1).Value = monthly_top_5_comission_name(m, 1) startCell.Offset(4, (i * 2) + 1).Value = monthly_top_5_comission_name(m, 2) startCell.Offset(5, (i * 2) + 1).Value = monthly_top_5_comission_name(m, 3) startCell.Offset(6, (i * 2) + 1).Value = monthly_top_5_comission_name(m, 4) startCell.Offset(2, (i * 2) + 2).Value = monthly_top_5_comission_value(m, 0) startCell.Offset(3, (i * 2) + 2).Value = monthly_top_5_comission_value(m, 1) startCell.Offset(4, (i * 2) + 2).Value = monthly_top_5_comission_value(m, 2) startCell.Offset(5, (i * 2) + 2).Value = monthly_top_5_comission_value(m, 3) startCell.Offset(6, (i * 2) + 2).Value = monthly_top_5_comission_value(m, 4) Next m For m = 7 To 12 i = m - 7 startCell.Offset(9, (i * 2) + 1).Value = monthly_top_5_comission_name(m, 0) startCell.Offset(10, (i * 2) + 1).Value = monthly_top_5_comission_name(m, 1) startCell.Offset(11, (i * 2) + 1).Value = monthly_top_5_comission_name(m, 2) startCell.Offset(12, (i * 2) + 1).Value = monthly_top_5_comission_name(m, 3) startCell.Offset(13, (i * 2) + 1).Value = monthly_top_5_comission_name(m, 4) startCell.Offset(9, (i * 2) + 2).Value = monthly_top_5_comission_value(m, 0) startCell.Offset(10, (i * 2) + 2).Value = monthly_top_5_comission_value(m, 1) startCell.Offset(11, (i * 2) + 2).Value = monthly_top_5_comission_value(m, 2) startCell.Offset(12, (i * 2) + 2).Value = monthly_top_5_comission_value(m, 3) startCell.Offset(13, (i * 2) + 2).Value = monthly_top_5_comission_value(m, 4) Next m ' styling For i = 0 To 100 ws.Range("A1").Offset(0, i).EntireColumn.AutoFit Next i For i = 1 To 14 Range("A1").Offset(0, i).EntireColumn.ColumnWidth = 15 Next i ranges_need_merge = Array("B22:C22", "D22:E22", "F22:G22", "H22:I22", "J22:k22", "L22:M22", "B29:C29", "D29:E29", "F29:G29", "H29:I29", "J29:k29", "L29:M29") For r = LBound(ranges_need_merge) To UBound(ranges_need_merge) range_need_merge = ranges_need_merge(r) With Range(range_need_merge) .Merge .VerticalAlignment = xlVAlignCenter .HorizontalAlignment = xlHAlignCenter End With Next r ranges_need_paint = Array("B22:C22", "D22:E22", "F22:G22", "H22:I22", "J22:k22", "L22:M22", "B29:C29", "D29:E29", "F29:G29", "H29:I29", "J29:k29", "L29:M29") For r = LBound(ranges_need_paint) To UBound(ranges_need_paint) range_need_merge = ranges_need_paint(r) With Range(range_need_merge) .Interior.Color = RGB(234, 209, 220) End With Next r ranges_need_paint = Array("A21", "A23", "A25", "A27", "A30", "A32", "A34") For r = LBound(ranges_need_paint) To UBound(ranges_need_paint) range_need_merge = ranges_need_paint(r) With Range(range_need_merge) .Interior.Color = RGB(234, 209, 220) End With Next r ' Save and close the workbook ' wb.Close SaveChanges:=True End Function