2009-10-21 78 views
2

我有這種形式的數據:Excel的VBA:輸出重複值和小計

Category  Source  Amount 
Dues   FTW   $100 
Donations  ODP   $20 
Donations  IOI   $33 
Dues   MMK   $124 

沒有排序順序。這些類別在編譯時是未知的。我想要一個VBA宏在這個範圍內循環,輸出一個不同值的列表,以及每個小計的小計。對於上面的數據,它看起來像這樣:

Category  Total Amount 
Dues   $224 
Donations  $55 

我該怎麼做?另外,有沒有一種方法可以在每次更新上面的表格時運行宏,或者是否需要用戶點擊按鈕?

回答

2

您可能想要使用內置的Excel功能來執行此操作。循環可能需要很長時間,並且如果您有很多值需要循環,則會出現問題。

像下面這樣可能讓你開始(從http://www.ozgrid.com/News/pivot-tables.htm

Sub MakeTable() 
Dim Pt As PivotTable 
Dim strField As String 

    'Pass heading to a String variable 
    strField = Selection.Cells(1, 1).Text 

    'Name the list range 
    Range(Selection, Selection.End(xlDown)).Name = "Items" 

    'Create the Pivot Table based off our named list range. 
    'TableDestination:="" will force it onto a new sheet 
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _ 
     SourceData:="=Items").CreatePivotTable TableDestination:="", _ 
      TableName:="ItemList" 

    'Set a Pivot Table variable to our new Pivot Table 
    Set Pt = ActiveSheet.PivotTables("ItemList") 

    'Place the Pivot Table to Start from A3 on the new sheet 
    ActiveSheet.PivotTableWizard TableDestination:=Cells(3, 1) 

    'Move the list heading to the Row Field 
    Pt.AddFields RowFields:=strField 
    'Move the list heading to the Data Field 
    Pt.PivotFields(strField).Orientation = xlDataField 
End Sub 

這是小計創建一個數據透視表(雖然我更喜歡數據透視表) http://msdn.microsoft.com/en-us/library/aa213577(office.11).aspx


編輯: 我重讀並有以下想法。在單獨的工作表上設置數據透視表(不使用任何代碼),然後將下面的代碼放在具有數據透視表的工作表上,這樣每次選擇工作表時都會更新表格。

Private Sub Worksheet_Activate() 

    Dim pt As PivotTable 

     'change "MiPivot" to the name of your pivot table 
     Set pt = ActiveSheet.PivotTables("MyPivot") 

     pt.RefreshTable 

    End Sub 

編輯#2 刷新片上 http://www.ozgrid.com/VBA/pivot-table-refresh.htm

Private Sub Worksheet_Activate()  
    Dim pt As PivotTable 

    For Each pt In ActiveSheet.PivotTables 
     pt.RefreshTable 
    Next pt 
End Sub 

的鏈接對如何刷新在片材/工作簿樞軸表的多個選項所有樞軸表。

+0

我同意,數據透視表是你之後 – 2009-10-21 21:27:24

+0

我如何找到數據透視表/圖表的名稱? – 2009-10-21 21:39:25

+1

右鍵點擊數據透視表並選擇數據透視表選項。這將顯示當前的名稱,並允許您更改名稱,如果你想。 – guitarthrower 2009-10-21 22:07:38