Excel计算含有不同项目个数的加权平均值
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Excel计算含有不同项目个数的加权平均值
在计算学生成绩时会遇到下面的问题:
每一位学生所选的课程不同,导致每个学生的学分数不同,这样计算加权平均分时会出现问题。如图
采用的解决方法是,使用VBA功能,自定义函数。
如上图,点击开发工具>Visual Basic,进入VBA编辑窗口。如果没有“开发工具”选项,请点击文件>选项,进入Excel选项窗口,如下图。点击“自定义功能区”,右侧勾选“开发工具”。
VBA窗口如下图所示
2
1
在图中“1”处空白区域点击右键,选择“插入”>模块,双击新建的模块1,打开程序编辑窗口。注意:图中“2”区域显示为“模块1”.程序代码如下
Function zyRowAverage(a, b)
If a.Columns.Count <> b.Columns.Count Or a.Rows.Count <> 1 Or b.Rows.Count <> 1 Then
MsgBox ("所选单元格必须具有相同的列数(行数),且行数(列数)为1")
Exit Function
End If
s = 0
For i = 1 To a.Columns.Count
s = s + a.Cells(1, i) * b.Cells(1, i)
Next i
m = 0
For i = 1 To a.Columns.Count
If a.Cells(1, i) <> 0 Then
m = m + b.Cells(1, i)
End If
Next i
zyRowAverage = s / m
End Function
Function zyColumnAverage(a, b)
If a.Rows.Count <> b.Rows.Count Or a.Columns.Count <> 1 Or b.Columns.Count <> 1 Then
MsgBox ("所选单元格必须具有相同的行数,且列数为1")
Exit Function
End If
s = 0
For i = 1 To a.Rows.Count
s = s + a.Cells(i, 1) * b.Cells(i, 1)
Next i
m = 0
For i = 1 To a.Rows.Count
If a.Cells(i, 1) <> 0 Then
m = m + b.Cells(i, 1)
End If
Next i
zyColumnAverage = s / m
End Function
含有两个函数,分别计算行平均值(zyRowAverage)和列平均值(zyColumnAverage)。
下面使用该函数计算加权平均值。如下图,在G3单元格内输入公式如红圈内所示。该处使用了符号“$”,是为了后续拖动公式时,权值项保持不变。
关于函数使用的说明:
本函数由燕山大学“zhiying”提供,允许任何单位和个人使用。帮助他人就是帮助自己。