跳至主要内容

Kutools for Office — 一套工具,五种功能。事半功倍。

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

Author Kelly Last modified

加权平均数通常用于不同项目对总体结果贡献不均等的场景。例如,当分析一个包含产品价格、重量和数量的购物清单时,使用Excel中的常规AVERAGE函数只会计算简单的算术平均值,而忽略了物品出现的频率或权重。然而,在许多商业或预算案例中,您可能需要计算加权平均值——比如考虑数量或重量的每单位平均价格——以便每个项目的影响与其重要性成比例。本文将介绍如何在Excel中计算加权平均值,包括带有特定条件的情况,以及进一步使用VBA和数据透视表来满足更动态或复杂需求的技术。

在Excel中计算加权平均值

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

VBA代码 – 自动化加权平均值计算以应对动态范围或多条件


在Excel中计算加权平均值

假设您有一个如下面截图所示的购物清单。虽然Excel的AVERAGE函数会为您提供不考虑重量或数量的平均价格,但在这些情况下,更准确的方法是计算加权平均值。通过为具有更高权重或频率的项目赋予更强的影响力,这种方法更好地反映了每单位的真实成本。

a screenshot showing the original data

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

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

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

然后按Enter键获取结果。

a screenshot showing how to use the formula to calculate weighted average

注意:在此公式中,C2:C18指代“重量”列,D2:D18指代“价格”列。根据您自己的数据布局调整这些范围。SUMPRODUCT函数将每个重量与相应的价格相乘并求和,而SUM函数则总计权重——从而得出正确的加权平均值。请确保使用长度相等的范围,并确保数据中没有不匹配或空单元格,因为这可能导致计算错误。

如果计算出的加权平均值显示的小数位过多或过少,您可以选择该单元格,然后点击 增加小数位 按钮 a screenshot of the Increase Decimal button减少小数位 按钮 a screenshot of the Decrease Decimal button开始 选项卡中调整显示的小数位数。

a screenshot of selecting one of the decimal type

如果您遇到#VALUE!之类的错误,请仔细检查每个引用的单元格是否包含数值,并确保范围一致。此外,避免在计算范围内包含任何标题行以确保结果准确。处理较大的数据集时,考虑使用命名范围以提高清晰度和便于维护。


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

前面的公式计算了所有项目的加权平均价格。在实际分析中,您可能只想计算特定类别的加权平均值,例如仅计算苹果的加权平均价格。在这种情况下,您可以增强公式以包含基于您的条件的筛选条件。

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

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

然后按Enter键计算符合特定条件的加权平均值。此公式仅在项目符合条件(在本例中为“苹果”)时才将每个重量和价格对相乘,求和,并除以该项目的总重量。

a screenshot showing how to use formula to calculate weighted average if meeting given criteria

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

应用公式后,您可能希望调整小数点以提高清晰度。选择结果单元格并使用 增加小数位 a screenshot of the Increase Decimal button减少小数位 a screenshot of the Decrease Decimal button2 按钮在 开始 选项卡中更改显示的小数位数。

a screenshot of selecting one of the decimal type2

如果公式返回意外的结果,请确认目标范围内的条件匹配,并注意预期为数字的列中是否存在空单元格或文本条目。


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 (或单击 Run button 运行按钮)执行。
系统将提示您逐步选择范围(条件范围——如果不需要可以跳过,权重范围和数值范围)。您还可以输入特定条件以筛选计算,或留空以考虑所有数据。该宏支持动态数据范围,因此在表格经常增长或变化时非常实用。

最后,您将看到一个消息框列出加权平均值结果。

提示:

  • 此方法可自动完成重复的加权平均值分析,并可进一步扩展以处理更多筛选或输出选项。
  • 确保所选范围长度相等,且数据类型一致。
  • 如示例所示,添加基本的错误处理(例如,未找到有效权重或权重总和为零的情况)。
  • 如果您希望仅应用于筛选/可见行,则可以通过特殊单元格枚举进一步增强代码。

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


相关文章:


最佳Office办公效率工具

🤖 Kutools AI 助手:以智能执行为基础,彻底革新数据分析 |代码生成 |自定义公式创建|数据分析与图表生成 |调用Kutools函数……
热门功能:查找、选中项的背景色或标记重复项 | 删除空行 | 合并列或单元格且不丢失数据 | 四舍五入……
高级LOOKUP多条件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中进行多标签编辑与阅读
  • 在同一个窗口的新标签页中打开和创建多个文档,而不是分多个窗口。
  • 可提升50%的工作效率,每天为您减少数百次鼠标点击!

所有Kutools加载项,一键安装

Kutools for Office套件包含Excel、Word、Outlook和PowerPoint的插件,以及Office Tab Pro,非常适合跨Office应用团队使用。

Excel Word Outlook Tabs PowerPoint
  • 全能套装——Excel、Word、Outlook和PowerPoint插件+Office Tab Pro
  • 单一安装包、单一授权——数分钟即可完成设置(支持MSI)
  • 协同更高效——提升Office应用间的整体工作效率
  • 30天全功能试用——无需注册,无需信用卡
  • 超高性价比——比单独购买更实惠