Excel精英培训网

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

[已解决]用VBA代码按条件处理数据,请高手帮忙!

[复制链接]
发表于 2014-10-30 17:02 | 显示全部楼层 |阅读模式
用VBA代码求每班级平均分,并输出到sheet2表中
原始成绩表在附件中。
最佳答案
2014-10-30 18:03
  1. Sub Macro1()
  2. Dim arr, brr(1 To 2000, 1 To 4), d, i&, s&, n&
  3. Set d = CreateObject("scripting.dictionary")
  4. arr = Range("a1").CurrentRegion
  5. For i = 2 To UBound(arr)
  6.     If Not d.exists(arr(i, 1)) Then
  7.         s = s + 1
  8.         d(arr(i, 1)) = s
  9.         brr(s, 1) = arr(i, 1)
  10.         brr(s, 2) = 1
  11.         brr(s, 3) = arr(i, 4)
  12.         brr(s, 4) = brr(s, 3) / brr(s, 2)
  13.     Else
  14.         n = d(arr(i, 1))
  15.         brr(n, 2) = brr(n, 2) + 1
  16.         brr(n, 3) = brr(n, 3) + arr(i, 4)
  17.         brr(n, 4) = brr(n, 3) / brr(n, 2)
  18.     End If
  19. Next
  20. Sheet2.Activate
  21. [a1:d1] = Array("班级", "人数", "总分", "平均分")
  22. Range("a2").Resize(s, 4) = brr
  23. End Sub
复制代码

成绩表.zip

8.18 KB, 下载次数: 9

发表于 2014-10-30 17:33 | 显示全部楼层
  1. Sub 宏1()
  2. '
  3. ' 宏1 宏
  4. '

  5.     Sheets("Sheet2").Activate
  6.     Sheets("Sheet1").Columns("A:A").AdvancedFilter Action:=xlFilterCopy, _
  7.                                                    CopyToRange:=Range("A1"), Unique:=True
  8.     Dim i As Integer
  9.     With Sheets(2)
  10.         i = .Cells(.Rows.Count, 1).End(xlUp).Row
  11.         .Cells(1, "b") = "平均分"
  12.         .Cells(2, "b").Resize(i - 1, 1).Formula = "=AVERAGEIF(Sheet1!A:A,A2,Sheet1!D:D)"
  13.         .Cells(2, "b").Resize(i - 1, 1) = .Cells(2, "b").Resize(i - 1, 1).Value
  14.     End With
  15. End Sub
复制代码
回复

使用道具 举报

发表于 2014-10-30 18:03 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. Dim arr, brr(1 To 2000, 1 To 4), d, i&, s&, n&
  3. Set d = CreateObject("scripting.dictionary")
  4. arr = Range("a1").CurrentRegion
  5. For i = 2 To UBound(arr)
  6.     If Not d.exists(arr(i, 1)) Then
  7.         s = s + 1
  8.         d(arr(i, 1)) = s
  9.         brr(s, 1) = arr(i, 1)
  10.         brr(s, 2) = 1
  11.         brr(s, 3) = arr(i, 4)
  12.         brr(s, 4) = brr(s, 3) / brr(s, 2)
  13.     Else
  14.         n = d(arr(i, 1))
  15.         brr(n, 2) = brr(n, 2) + 1
  16.         brr(n, 3) = brr(n, 3) + arr(i, 4)
  17.         brr(n, 4) = brr(n, 3) / brr(n, 2)
  18.     End If
  19. Next
  20. Sheet2.Activate
  21. [a1:d1] = Array("班级", "人数", "总分", "平均分")
  22. Range("a2").Resize(s, 4) = brr
  23. End Sub
复制代码
回复

使用道具 举报

发表于 2014-10-30 18:04 | 显示全部楼层
………………

成绩表.zip

14.19 KB, 下载次数: 12

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 15:39 , Processed in 0.198828 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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