У меня есть пользовательская форма, в которой пользователи могут генерировать еженедельные отчеты.VBA Расчет разницы между этой неделей/на прошлой неделе и в этом месяце/в прошлом месяце в сводной таблице
Теперь мне нужно рассчитать и показать в этом отчете (красная выделенная область), а также разница с прошлой неделей и в прошлом месяце.
Мой код похож на следующий;
If lboCharts.Value = "Ranking Changes in A-Bucket" And cboType.Value = "Regions" Then
Sheets("Report").Select
If lblCounter.Caption = "" Then
deleteReportSheet
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"RAW!R1C1:R1048576C20", Version:=xlPivotTableVersion14).CreatePivotTable _
TableDestination:="Report!R1C1", TableName:="regions_ranking_changes_in_a_bucket", DefaultVersion _
:=xlPivotTableVersion14
With ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Month")
.Orientation = xlPageField
.Position = 1
End With
With ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Pagetype")
.Orientation = xlPageField
.Position = 1
End With
ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Pagetype").ClearAllFilters
ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Pagetype").CurrentPage = _
"Region"
With ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Bucket")
.Orientation = xlPageField
.Position = 1
End With
ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Bucket").ClearAllFilters
ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Bucket").CurrentPage = "A"
With ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Date")
.Orientation = xlColumnField
.Position = 1
End With
With ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Theme")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Keyword")
.Orientation = xlRowField
.Position = 2
End With
ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").AddDataField ActiveSheet.PivotTables(_
"regions_ranking_changes_in_a_bucket").PivotFields("Position"), "Count of Position", xlCount
With ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Count of Position")
.Caption = "Average of Position"
.Function = xlAverage
End With
With ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Domain")
.Orientation = xlPageField
.Position = 1
End With
With ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket")
.ColumnGrand = False
.RowGrand = False
End With
ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Domain").ClearAllFilters
ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Domain").CurrentPage = Trim(cboCountry.Value)
ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Date").PivotFilters.Add _
Type:=xlAfterOrEqualTo, Value1:=Trim(tbDate.Value)
lblCounter.Caption = "1"
btnGenerateReport.Caption = "Update Report"
Else
ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Domain").ClearAllFilters
ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Domain").CurrentPage = Trim(cboCountry.Value)
ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Date").ClearAllFilters
ActiveSheet.PivotTables("regions_ranking_changes_in_a_bucket").PivotFields("Date").PivotFilters.Add _
Type:=xlAfterOrEqualTo, Value1:=Trim(tbDate.Value)
End If
End If
Мой отчет должен выглядеть следующим образом:
PS: Порядок столбцов не будет стабильным.
Примите во внимание вашу помощь.
Заранее спасибо.
Заполнение пример с вопросительными знаками не так полезно, как с фактическими данными (в соответствии с входным сигналом). – pnuts