ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 458863601

[求助] 求vba成绩分数段统计

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-11 17:53 | 显示全部楼层
参与一下。

成绩分数段统计.zip

23.52 KB, 下载次数: 30

TA的精华主题

TA的得分主题

发表于 2024-4-11 19:38 | 显示全部楼层
关键字:uunion all+transform
GIF 2024-04-11 19-37-09.gif

成绩分数段统计.zip

145.11 KB, 下载次数: 36

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-11 19:38 | 显示全部楼层
Sub limonet()
    Application.DisplayAlerts = False
    Dim Cn As Object, StrSQL$, Arr As Variant, i%
    Arr = Sheets("得分").Range("C1:F1")
    Set Cn = CreateObject("Adodb.Connection")
    Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
    For i = 1 To UBound(Arr, 2)
        StrSQL = StrSQL & " Union All Select 班级,'" & Arr(1, i) & "' as 学科," & Arr(1, i) & " as 分数,Partition(" & Arr(1, i) & "-0.5,60,89,10) as 分段 From [得分$B:F] Where 班级<>''"
    Next i
    StrSQL = "TransForm Count(*) Select 学科,班级 From (" & Mid(StrSQL, 12) & ") Group By 班级,学科 Order By 学科 Pivot 分段 "
    Range("A3").CopyFromRecordset Cn.Execute(StrSQL)
    For i = 34 To 2 Step -1
        If Cells(i, "A") = Cells(i - 1, "A") Then Range("A" & i - 1).Resize(2, 1).Merge
    Next i
    Application.DisplayAlerts = True
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-12 16:30 | 显示全部楼层
你好,请查看附件,应该可以解决你的问题,包含在“得分”表格中增加新的数据。有问题再沟通。

成绩分数段统计 by WYJ.zip

32.96 KB, 下载次数: 32

TA的精华主题

TA的得分主题

发表于 2024-4-13 04:07 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-28 11:02 | 显示全部楼层

我想改一下表格,有空帮我看看吗?

TA的精华主题

TA的得分主题

发表于 2024-5-28 15:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
458863601 发表于 2024-5-28 11:02
我想改一下表格,有空帮我看看吗?

我看问题都已经解决了!还有什么问题吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-30 12:13 | 显示全部楼层
chxw68 发表于 2024-5-28 15:16
我看问题都已经解决了!还有什么问题吗?

老师,如何把学生的姓名和成绩写进写进分数段统计出来的个数的单元格备注里?

TA的精华主题

TA的得分主题

发表于 2024-5-30 21:53 | 显示全部楼层
这帮老师真是为师不尊,要将白嫖进行到底啊!!!!论坛里最多就是这帮为人师表不足误人子弟的“老师”!

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-31 10:43 | 显示全部楼层
Option Explicit
Sub a()
    Dim cnn, myf$, SqA$, rs, i, j, arr, brr(1 To 9999, 1 To 2), Sql As String, d, S, M, T, S1 As String
    Set d = CreateObject("Scripting.Dictionary")
    Set cnn = CreateObject("adodb.connection")
    Set rs = CreateObject("adodb.Recordset")
    myf = ThisWorkbook.FullName
    Set cnn = CreateObject("adodb.connection")
    Set rs = CreateObject("adodb.Recordset")
    Application.ScreenUpdating = False
    cnn.Open "Provider=Microsoft.ACE.OleDb.12.0;Extended Properties='Excel 12.0;HDR=YES'; Data Source=" & myf
    Sql = "select 年级,班级,'语文' AS 科目,语文 AS 成绩,姓名 FROM [得分$A1:Q] where 姓名 is not null UNION ALL " _
    & " select 年级,班级,""数学"" AS 科目,数学 AS 成绩,姓名 FROM [得分$A1:Q] where 姓名 is not null UNION ALL " _
    & " select 年级,班级,""英语"" AS 科目,英语 AS 成绩,姓名 FROM [得分$A1:Q] where 姓名 is not null UNION ALL " _
    & " select 年级,班级,""道法"" AS 科目,道法 AS 成绩,姓名 FROM [得分$A1:Q]  where 姓名 is not null"
    Sql = "SELECT 年级,班级,科目,姓名,成绩,SWITCH(成绩<=9.9,'J', 成绩<=19.9,'I',成绩<=29.9,'H',成绩<=39.9,'G',成绩<=49.9,'F'," _
    & "成绩<=59.9,'E',成绩<=69.9,'D',成绩<=79.9,'C', 成绩<=89.9,'B', 成绩<=120,'A') AS 等级 FROM (" & Sql & ") "
    SqA = "SELECT 年级,科目,班级,等级,姓名,成绩 FROM (" & Sql & ")"
    Sql = "SELECT 班级,科目,等级,COUNT(*) AS 计次 FROM (" & Sql & ") WHERE 等级 IS NOT NULL GROUP BY 班级,科目,等级"
    Sql = "transform first(计次) select 科目,班级 from (" & Sql & ") group by 科目,班级 pivot 等级"
    Sheets("汇总").Activate
    [A3:L14] = ""
    Range("A3").CopyFromRecordset cnn.Execute(Sql)
    rs.Open SqA, cnn, 1, 1
    arr = rs.GetRows
    Set rs = Nothing
    Set cnn = Nothing
    For j = 0 To UBound(arr, 2)
        S = arr(1, j) & arr(2, j) & arr(3, j)
        If Not d.Exists(S) Then
            M = M + 1
            d(S) = M
            brr(d(S), 1) = S
            brr(d(S), 2) = arr(4, j) & " " & arr(5, j)
        Else
            brr(d(S), 2) = brr(d(S), 2) & "@" & arr(4, j) & " " & arr(5, j)
        End If
    Next
    d.RemoveAll
    For j = 1 To M
        d(brr(j, 1)) = brr(j, 2)
    Next
    arr = [a1].CurrentRegion
    Columns("C:L").ClearNotes
    For i = 3 To UBound(arr)
        If arr(i, 1) <> "" Then
            T = arr(i, 1)
        Else
            T = arr(i - 1, 1)
            arr(i, 1) = T
        End If
        For j = 3 To UBound(arr, 2)
            S = T & arr(i, 2) & Left(arr(2, j), 1)
            S1 = Replace(d(S), "@", vbCrLf)
            If d(S) <> "" Then Cells(i, j).AddComment S1
        Next
    Next
    Set d = Nothing
    Application.ScreenUpdating = True
End Sub

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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 06:56 , Processed in 0.047648 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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