KutoolsforOffice — 一套方案,五大工具。事半功倍。

如何在 Excel 中计算加权平均值?

作者Kelly修改日期

加权平均值适用于不同项目对整体结果贡献不均等的场景。例如,在分析包含产品价格、重量和数量的购物清单时,若使用 Excel 的普通 AVERAGE 函数,仅会计算简单算术平均值,而忽略各项目出现的频率或重要性。然而,在许多商业或预算场景中,您可能需要计算加权平均值——例如根据数量或重量调整后的每单位平均价格——以确保每个项目的影响与其实际重要性成比例。本文将介绍如何在 Excel 中计算加权平均值,包括满足特定条件的情形,以及利用 VBA 和数据透视表应对更动态或复杂需求的进阶技巧。

在 Excel 中计算加权平均值

在 Excel 中按给定条件计算加权平均值

VBA 代码 – 为动态区域或多条件自动计算加权平均值


在 Excel 中计算加权平均值

假设您有一个如下图所示的购物清单。虽然 Excel 的 AVERAGE 函数会计算不考虑重量或数量的平均价格,但在这种情况下,更准确的做法是计算加权平均值——通过赋予重量或购买频率更高的商品更大的权重,从而更真实地反映每单位的实际成本。

显示原始数据的截图

要计算加权平均价格,请结合使用 SUMPRODUCTSUM 函数,如下所示:

选择一个空白单元格(例如 F2),输入以下公式:

=SUMPRODUCT(C2:C18,D2:D18)/SUM(C2:C18)

然后按下 Enter 键即可获取结果。

展示如何使用公式计算加权平均值的截图

注意:在此公式中,C2:C18 表示“重量”列,D2:D18 表示“价格”列。请根据您的实际数据布局调整这些区域。SUMPRODUCT 函数会将每个重量与其对应的价格相乘后求和,而 SUM 则对重量求和——从而准确计算出加权平均值。务必确保所选区域长度相等,且数据中无空单元格或不匹配项,以免导致计算错误。

如果计算出的加权平均值显示的小数位数过多或过少,可选择该单元格,然后点击开始选项卡中的增加小数位数按钮“减少小数位数”按钮的截图减少小数位数按钮“减少小数位数”按钮的截图,即可按需调整显示的小数位数。

选择其中一种小数格式的截图

若出现 #VALUE! 等错误,请仔细检查每个引用单元格是否包含数值,并确保所选区域一致。同时,计算区域中请勿包含标题行,以保障结果的准确性。处理大型数据集时,建议使用命名区域,以提升清晰度并便于后续维护。


在 Excel 中按给定条件计算加权平均值

前面的公式计算了所有项目的加权平均价格。在实际分析中,您可能希望针对特定类别(例如仅计算苹果的加权平均价格)进行计算。此时,可对公式加以优化,加入条件筛选功能。

为此,请选择一个空白单元格(例如 F8),并输入以下公式:

=SUMPRODUCT((B2:B18="Apple")*C2:C18*D2:D18)/SUMIF(B2:B18,"Apple",C2:C18)

然后按 Enter 键,即可计算满足特定条件的加权平均值。该公式仅在项目匹配条件(本例中为“Apple”)时,才会将对应重量与价格相乘并求和,再除以该项目的重量总和。

展示如何在满足给定条件时使用公式计算加权平均值的截图

注意:此处,B2:B18 为“水果”列,C2:C18 为“重量”,D2:D18 为“价格”。您可根据需要将“Apple”替换为其他项目。此方法适用于单一条件筛选;如需按多个条件(例如水果类型和供应商)筛选,建议使用辅助列或更高级的公式。

应用公式后,您可能希望调整小数位数以提升可读性。请选中结果单元格,然后点击开始选项卡中的增加小数位数“减少小数位数”按钮2的截图减少小数位数“减少小数位数”按钮2的截图按钮,即可更改显示的小数位数。

选择其中一种小数格式2的截图

如果公式返回了意外结果,请确认目标区域内存在符合条件的匹配项,并仔细检查本应为数值的列中是否包含空单元格或文本内容。


VBA 代码 – 为动态区域或多条件自动计算加权平均值

在某些情况下,您可能需要频繁计算加权平均值,而数据范围的大小可能变化、包含缺失值,或需灵活筛选(例如同时应用多个条件)。与其手动更新公式或区域,不如使用 VBA 宏自动执行计算——不仅节省时间,更能显著降低出错几率,尤其适用于大型或定期更新的数据集。

以下是创建和使用加权平均 VBA 宏的方法:

1. 单击开发工具>Visual Basic(或按 )Alt + F11),即可打开 Microsoft Visual Basic for Applications 编辑器窗口。接着,单击插入> 模块,并将以下代码粘贴到新模块窗口中:

Sub WeightedAverageVBA()
    Dim rngCriteria As Range
    Dim rngWeight As Range
    Dim rngValue As Range
    Dim criteriaStr As String
    Dim totalWeighted As Double
    Dim totalWeight As Double
    Dim i As Long
    
    On Error Resume Next
    xTitleId = "KutoolsforExcel"
    
    Set rngCriteria = Application.InputBox("Select the range for criteria (optional, press Cancel to skip):", xTitleId, Type:=8)
    criteriaStr = Application.InputBox("Enter criteria for filtering (leave blank for all):", xTitleId, Type:=2)
    Set rngWeight = Application.InputBox("Select the Weight (numeric) range:", xTitleId, Type:=8)
    Set rngValue = Application.InputBox("Select the Value (e.g. Price) range:", xTitleId, Type:=8)
    
    totalWeighted = 0
    totalWeight = 0
    
    If rngCriteria Is Nothing Or criteriaStr = "" Then
        For i = 1 To rngWeight.Cells.Count
            If IsNumeric(rngWeight.Cells(i).Value) And IsNumeric(rngValue.Cells(i).Value) Then
                totalWeighted = totalWeighted + rngWeight.Cells(i).Value * rngValue.Cells(i).Value
                totalWeight = totalWeight + rngWeight.Cells(i).Value
            End If
        Next i
    Else
        For i = 1 To rngWeight.Cells.Count
            If rngCriteria.Cells(i).Value = criteriaStr Then
                If IsNumeric(rngWeight.Cells(i).Value) And IsNumeric(rngValue.Cells(i).Value) Then
                    totalWeighted = totalWeighted + rngWeight.Cells(i).Value * rngValue.Cells(i).Value
                    totalWeight = totalWeight + rngWeight.Cells(i).Value
                End If
            End If
        Next i
    End If
    
    If totalWeight = 0 Then
        MsgBox "Weighted average cannot be calculated: total weight is zero.", vbExclamation, xTitleId
    Else
        MsgBox "Weighted average: " & totalWeighted / totalWeight, vbInformation, xTitleId
    End If
End Sub

2. 按 F5(或单击)运行按钮运行按钮)执行宏。
系统将引导您依次选择区域(条件区域——如不需要可跳过、权重区域和值区域)。您可输入特定条件以筛选计算,也可留空以包含所有数据。该宏支持动态区域,特别适合表格频繁增减或变动的场景,助您轻松应对数据变化!

最后,您将收到一个消息框,其中清晰列出加权平均结果。

提示:

  • 该方法可自动执行重复的加权平均分析,并能进一步扩展,以支持更多筛选条件或输出选项。
  • 请确保所选区域长度相等,且数据类型一致。
  • 如示例所示,包含基本的错误处理(例如,当未找到有效权重或权重总和为零时)。
  • 若仅希望应用于筛选或可见行,可通过特殊单元格枚举进一步增强代码。

如遇权限或宏安全问题,请在运行代码前确保已在 Excel 设置中启用宏。


相关文章:


最佳办公效率工具

🤖KUTOOLS AI 助手:基于以下内容革新数据分析:智能执行   |  生成代码|  创建自定义公式  |  数据分析及生成图表|  调用 Kutools Functions……
热门功能查找、高亮或标记重复项   |  删除空白行   |  合并列或单元格且不丢失数据   |  不使用公式的四舍五入……
高级 LOOKUP多条件 VLookup  |  多值 VLookup  |   跨多工作表 VLookup   |   模糊查找……
高级下拉列表快速创建下拉列表   |  级联下拉列表   |  多选下拉列表……
列管理器添加指定数量的列|移动列|切换隐藏列的可见性状态|比较区域与列……
特色功能网格聚焦   |  设计视图   |增强编辑栏   | 工作簿和表管理器   |  资源库(自动文本)|  日期提取   |  汇总工作表  |  加密/解密单元格   | 按列表发送邮件   |  超级筛选   |   特殊筛选(筛选粗体单元格/斜体/删除线……) ......
精选 15 工具集12 文本工具添加文本删除特定字符,……)|   50+ 图表 类型甘特图,……)|   40+ 实用公式基于生日计算年龄,……)|   19 插入工具插入二维码从路径插入图片,……)|   12 转换工具小写金额转大写汇率转换,……)|   7 合并和拆分工具高级合并行分割单元格,……)|……更多
在您的首选语言中使用 Kutools – 支持英语、西班牙语、德语、法语、中文及 40+ 种其他语言!

使用 Kutools for Excel 大幅提升您的 Excel 技能,体验前所未有的高效。Kutools for Excel 提供 300 多项高级功能,助您提升生产力、节省时间。立即点击此处,获取您最需要的功能……


Office Tab 为 Office 带来标签式界面,让您的工作更轻松

  • 在 Word、Excel、PowerPoint、Publisher、Access、Visio 和 Project 中启用标签式编辑和阅读
  • 在同一个窗口的新标签页中打开并创建多个文档,而非在新窗口中。
  • 将您的工作效率提升 50%,每天减少数百次鼠标点击!

所有 Kutools 插件,一个安装程序

Kutools for Office 套件捆绑了适用于 Excel、Word、Outlook 和 PowerPoint 的插件以及 Office Tab Pro,非常适合需要跨多个 Office 应用高效协作的团队。

ExcelWordOutlookTabsPowerPoint
  • 一体化套件— Excel、Word、Outlook 和 PowerPoint 插件 + Office Tab Pro
  • 一个安装程序,一个许可证— 几分钟内完成设置(支持 MSI)
  • 协同效果更佳— 在多个 Office 应用中实现高效协同
  • 30 天全功能试用— 无需注册,无需信用卡
  • 超值之选— 比单独购买插件更省钱