Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2521|回复: 6

[已解决]vba实现统计均分

[复制链接]
发表于 2016-3-9 19:43 | 显示全部楼层 |阅读模式
本帖最后由 hjhjxb 于 2016-3-9 20:47 编辑

vba实现统计均分 vba实现统计均分.rar (14.93 KB, 下载次数: 12)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-3-9 20:30 | 显示全部楼层
非数值型数据均未计入统计对象:
Sub ave()
Dim ar()
With Sheets("8.1")
   i1% = .[c65536].End(3).Row
   If i1 < 3 Then Exit Sub
   ar = .[c1].Resize(i1, 8).Value
End With
For i1 = 1 To 8
    ar(1, i1) = 0
    ar(2, i1) = 0
    For i2% = 3 To UBound(ar)
        If VarType(ar(i2, i1)) = 5 Then
          ar(1, i1) = ar(1, i1) + 1
          ar(2, i1) = ar(2, i1) + ar(i2, i1)
        End If
    Next
    If ar(1, i1) Then ar(1, i1) = ar(2, i1) / ar(1, i1)
Next
Sheets("成绩分析").[b3:i3] = ar
End Sub
回复

使用道具 举报

 楼主| 发表于 2016-3-9 20:41 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2016-3-9 20:43 | 显示全部楼层
上清宫主 发表于 2016-3-9 20:30
非数值型数据均未计入统计对象:
Sub ave()
Dim ar()

自己也写了一段代码帮看一下怎样改才能实现实现?你写的代码下在消化中。
回复

使用道具 举报

发表于 2016-3-10 10:49 | 显示全部楼层
Sub 求均分()
    Dim i As Integer, j As Integer
    With Sheets("8.1")
        i = .Range("a65536").End(xlUp).Row
        For j = 3 To 10
            Sheets("成绩分析").Cells(3, j - 1) = Application.WorksheetFunction.Average(.Range(.Cells(3, j), .Cells(i, j)))
        Next j
    End With
End Sub
回复

使用道具 举报

发表于 2016-3-10 10:54 | 显示全部楼层    本楼为最佳答案   
你原来代码几个错误的地方:
1、Sheets("成绩分析").Range(Cells(3, j - 1)) 是错的。单个单元格区域表示用cells(a,b)就行了。
2、Application.Average(Sheets("8.1").Range(Cells(3, j), Cells(i, j))) 里面的区域表示错了。里面的cells(3,j)和cells(i,j)均应指定工作表,否则会认为是当前工作表的cells(3,j),除非代码放在Sheets("8.1")里,或者Sheets("8.1")为当前工作表。
3、Exit For那句多余。
回复

使用道具 举报

 楼主| 发表于 2016-3-10 17:23 | 显示全部楼层
grf1973 发表于 2016-3-10 10:54
你原来代码几个错误的地方:
1、Sheets("成绩分析").Range(Cells(3, j - 1)) 是错的。单个单元格区域表示用 ...

学到不少东西,谢谢!初学者就希望有人指点一下。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-24 18:42 , Processed in 0.180633 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表