ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何根据原始表关键列班级性别素质项目生成各项目各班统计表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-14 14:30 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原始表:关键列,班级,性别,各项目列

统计表:根据原始表生成各班,各性别,各项目人数 如何根据原始表关键列班级性别素质项目生成各项目各班统计表.rar (9.02 KB, 下载次数: 16)

TA的精华主题

TA的得分主题

发表于 2024-5-14 16:15 | 显示全部楼层
统计的例子:
2024-5-14统计.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-14 17:51 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-15 10:58 | 显示全部楼层

感谢版主热心帮助,运行到 If d1(xx).exists(yy) Then,出现错误,麻烦有时间看一下,是哪抄错了,谢谢 如何根据原始表关键列班级性别素质项目生成各项目各班统计表.rar (17.8 KB, 下载次数: 9)

TA的精华主题

TA的得分主题

发表于 2024-5-15 18:49 | 显示全部楼层
yzyyyyyyy 发表于 2024-5-15 10:58
感谢版主热心帮助,运行到 If d1(xx).exists(yy) Then,出现错误,麻烦有时间看一下,是哪抄错了,谢谢

xx = Brr(i, 1) & "|" & Brr(1, ii)
其中的"|"抄成了" |"  多了一个空格。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-17 09:44 | 显示全部楼层
Sub t()
    Dim arr, brr, i%, j%, dic, crr, spl, r%, m, c%
    arr = Sheets("原始表").UsedRange
    brr = Array("班级", "人数", "男", "女", "立定跳远", "坐位体前屈", "1分钟跳绳", "掷实心球", "1000米", "800米", "立定跳远", "坐位体前屈", "1分钟跳绳", "掷实心球", "1000米", "立定跳远", "坐位体前屈", "1分钟跳绳", "掷实心球", "800米")
    n = Sheets("原始表").Range("a65536").End(xlUp).Row
    r = WorksheetFunction.Max(Sheets("原始表").Range("a2:a" & n)) + 2
    ReDim crr(1 To r, 1 To 20)
    Set dic = CreateObject("scripting.dictionary")
    '初始化crr数组
    For i = 1 To UBound(crr)
        For j = 1 To UBound(crr, 2)
            crr(i, j) = 0
        Next j
    Next i
    '用字典统计各列数据
    For i = 2 To n
        dic(arr(i, 1)) = dic(arr(i, 1)) + 1
        dic(arr(i, 1) & "|" & arr(i, 4)) = dic(arr(i, 1) & "|" & arr(i, 4)) + 1
        For j = 10 To UBound(arr, 2)
            If arr(i, j) <> "" And j <> 12 Then
                dic(arr(i, 1) & "|" & arr(i, j)) = dic(arr(i, 1) & "|" & arr(i, j)) + 1
                dic(arr(i, 1) & "|" & arr(i, 4) & "|" & arr(i, j)) = dic(arr(i, 1) & "|" & arr(i, 4) & "|" & arr(i, j)) + 1
            End If
        Next j
    Next i
    '把各列标题赋值给crr
    c = 1
    For Each m In brr
        crr(1, c) = m
        c = c + 1
    Next m
    '从字典中取出各项统计数据放入crr数组中
    For Each k In dic.keys()
        If InStr(k, "|") Then
            spl = Split(k, "|")
            If UBound(spl) = 1 Then
                For m = 1 To 10
                    If spl(1) = crr(1, m) Then
                        crr(spl(0) + 1, m) = dic(k)
                    End If
                Next m
            ElseIf UBound(spl) = 2 Then
                If spl(1) = "男" Then
                    For m = 11 To 15
                        If spl(2) = crr(1, m) Then
                            crr(spl(0) + 1, m) = dic(k)
                        End If
                    Next m
                ElseIf spl(1) = "女" Then
                    For m = 16 To 20
                        If spl(2) = crr(1, m) Then
                            crr(spl(0) + 1, m) = dic(k)
                        End If
                    Next m
                End If
            End If
        Else
            crr(k + 1, 1) = k
            crr(k + 1, 2) = dic(k)
        End If
    Next k
    '统计合计项
    For i = 2 To UBound(crr, 2)
        If i = 2 Then crr(r, 1) = "合计"
        For j = 2 To UBound(crr) - 1
             crr(r, i) = crr(r, i) + crr(j, i)
        Next j
    Next i
    With Sheets("统计表")
        .[e11:j11].Merge
        .[e11] = "合计"
        .[k11:o11].Merge
        .[k11] = "男"
        .[p11:t11].Merge
        .[p11] = "女"
        '把crr数组放入统计表
        .[a12].Resize(UBound(crr), UBound(crr, 2)) = crr
    End With
    Set dic = Nothing
End Sub

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-17 11:51 , Processed in 0.047851 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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