Excel精英培训网

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

[已解决]如何用VBA进行组合统计及求和

[复制链接]
发表于 2021-9-30 23:56 | 显示全部楼层 |阅读模式
需要在D列填充:优秀,良好、中等
判断条件:
1)如果C列求和>250且B列参与人数>3人,则D列填充一班为优秀
2)如果C列求和>250,但参与人数<=3人,则D填充为良好
3)如果C列求和<250,则D填充为中等
评级表.zip (7.48 KB, 下载次数: 11)
发表于 2021-10-1 00:19 | 显示全部楼层    本楼为最佳答案   
  1. Option Explicit

  2. Sub v_v()
  3. Dim i, k As Integer
  4. Dim rng As Range
  5. Dim s As Long
  6. Range("d2:d10000").ClearContents
  7. Set rng = Range("a2")
  8. For i = 2 To Range("a10000").End(xlUp).Row + 1
  9.     If Range("a" & i).Value = rng.Value Then
  10.         k = k + 1
  11.         s = s + Range("c" & i)
  12.     Else
  13.         If s > 250 Then
  14.             If k > 3 Then
  15.                 Range(Cells(rng.Row, "D"), Cells(i - 1, "d")).Value = "优秀"
  16.             Else
  17.                 Range(Cells(rng.Row, "D"), Cells(i - 1, "d")).Value = "良好"
  18.             End If
  19.         Else
  20.             Range(Cells(rng.Row, "D"), Cells(i - 1, "d")).Value = "中等"
  21.         End If
  22.         Set rng = Range("a" & i)
  23.         k = 1
  24.         s = rng.Offset(0, 2).Value
  25.     End If
  26. Next
  27. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2021-10-1 11:42 | 显示全部楼层
回复

使用道具 举报

发表于 2021-10-5 13:49 | 显示全部楼层
  1. Sub 等级()
  2. Dim ARR, BRR(), I As Integer, J As Integer, K As Integer, L As Integer, C As Integer, S As Integer
  3. ARR = Range("A1").CurrentRegion
  4. I = UBound(ARR)
  5. ReDim BRR(1 To I - 1)
  6. Range("D2:D" & I).Clear
  7. For J = 2 To I
  8. C = 0
  9. S = 0
  10.     For K = 2 To I
  11.         If ARR(J, 1) = ARR(K, 1) Then
  12.             C = C + 1
  13.             S = S + ARR(K, 3)
  14.         End If
  15.     Next
  16.     L = L + 1
  17.     If S > 250 And C >= 3 Then
  18.         BRR(L) = "优秀"
  19.     ElseIf S > 250 And C < 3 Then
  20.         BRR(L) = "良好"
  21.     Else
  22.         BRR(L) = "中等"
  23.     End If
  24. Next
  25. Range("D2").Resize(L, 1) = Application.Transpose(BRR)
  26. End Sub
复制代码

我也是个新手。拿来练习一下。感觉这个运行是比较写法应该是比较 慢的。欢迎各位老师指正。
回复

使用道具 举报

发表于 2021-10-10 21:53 | 显示全部楼层
Sub test()
Dim m As Integer, n As Integer
For i = 2 To 16
    m = Application.WorksheetFunction.SumIf(Range("a2:a16"), Range("a" & i), Range("c2:c16"))
    n = Application.WorksheetFunction.CountIf(Range("a2:a16"), Range("a" & i))
    If m > 250 And n > 3 Then
        Range("e" & i) = "优秀"
    ElseIf m > 250 And n < 3 Then
        Range("e" & i) = "良好"
     ElseIf m < 250 Then
        Range("e" & i) = "中等"
    End If
Next
End Sub
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 01:11 , Processed in 0.476052 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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