首先声明下面的代码为陈希章老师所写!经常使用EXCEL,但是发现数据透视表有一个很不合理的智能化功能!那就是在数值类型中会自动根据当前数据决定数值为计数型还是求和等,一一修改,从中国上找到别人请教陈希章老师的一段代码,居然能解决这个批量求和的问题。 但是新的问题是执行处理后,数据是变成求和了,但标题上的名称没有变为求和,仍然为计数,很是头疼,需要再研究了。 数据透视表,现在是计数,如何一次性设置数值为求和? 一。打开Excel和你的文件,ALT+F一一,插入=〉模块二。将以下代码复制到这个新的模块中三。ALT+F一一四。切换到数据透视表所在的工作表,ALT+F吧5。本例而言,你执行ChangeToSum这个程序 除了一次切换到求和方式,这里还提供了几个其他的程序,可以切换到其他的汇总方式,例如计数,平均等,你可以按照需要执行即可 (代码不包含分割线) Sub ChangeSubTotalType(myFunction As XlConsolidationFunction, s As String)
'该程序为特定目的设计,作用是将当前工作表中所有数据透视表的计算字段一次性全部换成某种求和方式
If TypeName(ActiveSheet) > "Worksheet" Then
MsgBox "该程序只能在工作表中运行!", vbExclamation, "错误"Exit SubEnd IfDim sh As Worksheet: Set sh = ActiveSheet
If sh.PivotTables.Count = 0 Then
MsgBox "该程序要求工作表至少有一个数据透视表!", vbExclamation, "错误"Exit SubEnd IfIf sh.ProtectContents = True Then
MsgBox "当前工作表被保护,无法执行操作!", vbExclamation, "错误"Exit SubEnd If Dim tb As PivotTable
Dim dataField As PivotField
For Each tb In sh.PivotTables
If tb.DataFields.Count > 0 Then
If MsgBox("即将对" & tb.Name & "的" & tb.DataFields.Count & "个字段进行操作,将汇总方式改变为" & s & _
"请确定需要这么做?", vbQuestion + vbYesNo + vbDefaultButton二, "确认") = vbYes Then
For Each dataField In tb.DataFields
dataField.Function = myFunctionNextEnd IfEnd IfNextSet sh = Nothing
Set tb = Nothing
End Sub Sub ChangeToSum()
ChangeSubTotalType xlSum, "求和"End SubSub ChangeToAverage()
ChangeSubTotalType xlAverage, "平均"End SubSub ChangeToCount()
ChangeSubTotalType xlCount, "计数"End SubSub ChangeToCountNum()
ChangeSubTotalType xlCountNums, "数学计数"End SubSub ChangeToMax()
ChangeSubTotalType xlMax, "最大值"End SubSub ChangeToMin()
ChangeSubTotalType xlMin, "最小值"End SubSub ChangeToProduct()
End Sub以上代码非本人所创,再次声明!!!