数据透视表百分比列正确小计设置求助(VBA代码实现)
解决透视表百分比列小计错误的问题
方案1:计算正确的合计百分比(推荐)
不要直接使用已计算好的papercostp字段,而是在透视表中创建计算字段,用Paper Cost / Total Sales * 100动态计算,这样小计行会自动用合计的Paper Cost和Total Sales算出正确百分比,而非对行百分比求和。
修改后的代码:
Set pvf = gWO.AddRowField(pvt, bdnaam) pvf.Subtotals(2) = True Set pvf = gWO.AddRowField(pvt, aorder) Set pvf = gWO.AddDataField(pvt, salesamount) Set pvf = gWO.AddDataField(pvt, papercost) ' 添加计算字段替代原有papercostp pvt.CalculatedFields.Add Name:="Paper cost %", Formula:="='Paper Cost'/'Total Sales'*100" Set pvf = gWO.AddDataField(pvt, "Paper cost %") ' 设置字段格式为百分比 pvf.NumberFormat = "0%"
方案2:将小计设置为平均值
如果业务场景确实需要行百分比的平均值,需明确指定汇总方式为xlAverage,同时调整字段格式。之前失败大概率是未覆盖默认求和设置或格式未适配。
修改后的代码:
Set pvf = gWO.AddRowField(pvt, bdnaam) pvf.Subtotals(2) = True Set pvf = gWO.AddRowField(pvt, aorder) Set pvf = gWO.AddDataField(pvt, salesamount) Set pvf = gWO.AddDataField(pvt, papercost) ' 指定汇总方式为平均值,自定义字段显示名称 Set pvf = gWO.AddDataField(pvt, papercostp, "Paper cost %", xlAverage) ' 设置字段格式为百分比 pvf.NumberFormat = "0%"
注意事项
- 方案1的计算字段会自动适配行与小计的计算逻辑,完全符合业务统计逻辑;
- 方案2的平均值仅适用于特定业务需求,需确认是否匹配实际场景;
- 确保数据源中
Paper Cost和Total Sales为数值型字段,避免计算异常。
内容的提问来源于stack exchange,提问作者Ahmed
相关产品推荐
相关产品推荐

