gpt4 book ai didi

vba - Excel VBA : Output Distinct Values and Subtotals

转载 作者:行者123 更新时间:2023-12-04 20:20:45 27 4
gpt4 key购买 nike

我有这种形式的数据:

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

没有排序顺序。这些类别在编译时是未知的。我希望 VBA 宏在范围内循环,输出不同值的列表,以及每个值的小计。对于上述数据,它看起来像这样:
Category      Total Amount
Dues $224
Donations $55

我怎样才能做到这一点?另外,有没有办法让宏在每次更新上表时运行,或者用户是否需要单击按钮?

最佳答案

您可能希望使用内置的 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

该链接有多个关于如何刷新工作表/工作簿中的数据透视表的选项。

关于vba - Excel VBA : Output Distinct Values and Subtotals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1603414/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com