ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何由明细表内的多个小单元数据转换为汇总表的格式

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-19 11:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
ykcbf1100 发表于 2024-6-19 10:19
数据转置、合计、得分合计、排名一键完成

厉害,排名也搞定了,如果牌的副数变化,只是调整几处,就应该可以使用。谢谢老师。

TA的精华主题

TA的得分主题

发表于 2024-6-19 12:51 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-19 12:54 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
wang-way 发表于 2024-6-19 12:51

谢谢帮助,下午去调试。

TA的精华主题

TA的得分主题

发表于 2024-6-19 12:55 | 显示全部楼层
cqcbc 发表于 2024-6-19 12:54
谢谢帮助,下午去调试。

奇怪的是 为什么你写错了 它居然不报错

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-19 14:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

请老师核对一下,到底哪里抄错了,能运行,但结果都是0
Sub X1()
    Dim wb As Workbook, sht As Worksheet
    Set wb = Application.ThisWorkbook
    Set sht = wb.Worksheets("B组牌副结分")
    Set dic = CreateObject("Scripting.Dictionary")
    With sht
        erow = .Cells(.Rows.Count, 1).End(xlUp).Row
        ecol = .Cells.Find("*", .Cells(1, 1), xlValues, xlWhole, xlByColumns, xlPrevious).Column
        For t = 1 To 14
            Set D = CreateObject("Scripting.Dictionary")
            Set dic(t) = D
        Next t
        p = 0
        For i = 1 To erow
            For j = 1 To ecol
                If .Cells(i, j).Value Like "*第*副*" Then
                    p = p + 1
                    For t = 1 To 14
                        Set D = dic(t)
                        D(0) = t
                        D(p) = ""
                        Set dic(t) = D
                    Next t
                    For m = i + 2 To i + 11
                        For Each n In Array(0, 3)
                            Key = .Cells(m, j + n).Value
                            If Key <> "" Then
                                Set D = dic(Key)
                                ar = D.items
                                D(p) = .Cells(m, j + n + 2).Value
                                br = D.items
                                Set dic(Key) = D
                            End If
                        Next n
                    Next m
                End If
            Next j
        Next i
        Set psht = wb.Worksheets("汇总表B组")
        With psht
            .UsedRange.Offset(3, 1).ClearContents
            i = 3
            For Each k In dic
                i = i + 1
                Set D = dic(k)
                ar = D.items
                If D.Count > 0 Then .Cells(i, 1).Resize(1, D.Count).Value = WorksheetFunction.Transpose(WorksheetFunction.Transpose(ditems))
            Next k
        End With
    End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-19 14:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 cqcbc 于 2024-6-19 15:01 编辑
魂断蓝桥 发表于 2024-6-19 09:33
Option Explicit
Dim m, D
Sub a()

已测试,正确的,谢谢。评分时点错了,我的权限上限是2分,下次补上。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-19 15:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

已修改了,完全正确。谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-19 16:44 | 显示全部楼层
ykcbf1100 发表于 2024-6-19 10:19
数据转置、合计、得分合计、排名一键完成

老师,排名的时候,遇上合计得分相同的,会出现空白,请修改一下。

TA的精华主题

TA的得分主题

发表于 2024-6-19 18:34 | 显示全部楼层
本帖最后由 ykcbf1100 于 2024-6-19 18:54 编辑
cqcbc 发表于 2024-6-19 16:44
老师,排名的时候,遇上合计得分相同的,会出现空白,请修改一下。

改好了,中国式排名,修正同分排名错乱问题。
代码更新了一下。


如何由明细表内的多个小单元数据转换为汇总表的格式2.zip

37.81 KB, 下载次数: 3

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-19 18:35 | 显示全部楼层
本帖最后由 ykcbf1100 于 2024-6-19 18:53 编辑

中国式排名
  1. Sub ykcbf()   '//2024.6.19  中国式排名
  2.     Application.ScreenUpdating = False
  3.     Set d = CreateObject("Scripting.Dictionary")
  4.     Set List = CreateObject("System.Collections.ArrayList")
  5.     With Sheets("B组牌副结分")
  6.         arr = .UsedRange
  7.         For i = 1 To UBound(arr)
  8.             If arr(i, 1) Like "*第*副" Then k = k + 1: d(k) = i
  9.         Next
  10.     End With
  11.     t = d.items
  12.     ReDim brr(1 To 100, 1 To 28)
  13.     For k = 1 To d.Count
  14.         r1 = d(k)
  15.         If k = d.Count Then r2 = UBound(arr) Else r2 = d(k + 1) - 1
  16.         For j = 1 To UBound(arr, 2) Step 7
  17.             If arr(r1, j) <> Empty Then
  18.                 m = m + 1
  19.                 For i = r1 + 2 To r2 - 2
  20.                     If Val(arr(i, j)) Then
  21.                         For x = 1 To 6 Step 3
  22.                             For y = 1 To 14
  23.                                 If Val(arr(i, j + x - 1)) = y Then
  24.                                     brr(y, m) = arr(i, j + x + 1)
  25.                                 End If
  26.                             Next
  27.                         Next
  28.                     End If
  29.                 Next
  30.             End If
  31.         Next
  32.     Next
  33.     With Sheets("汇总表B组")
  34.         .UsedRange.Offset(3, 1).Clear
  35.         .[b4].Resize(14, 26) = brr
  36.         For i = 4 To 17
  37.             .Cells(i, 28) = Application.Sum(.Cells(i, 2).Resize(, 26))
  38.         Next
  39.         For j = 2 To 28
  40.             .Cells(18, j) = Application.Sum(.Cells(4, j).Resize(m))
  41.         Next
  42.         arr = .[ab4].Resize(14)
  43.         For i = 1 To UBound(arr)
  44.             List.Add arr(i, 1)
  45.         Next
  46.         List.Sort
  47.         List.Reverse
  48.         m = 0
  49.         For Each k In List
  50.             m = m + 1
  51.             If Not d.exists(k) Then
  52.                 d(k) = m
  53.             End If
  54.         Next
  55.         For i = 1 To UBound(arr)
  56.             s = arr(i, 1)
  57.             .Cells(i + 3, 29) = d(s)
  58.         Next
  59.         With .[a4].Resize(15, 29)
  60.             .Borders.LineStyle = 1
  61.             .HorizontalAlignment = xlCenter
  62.             .VerticalAlignment = xlCenter
  63.         End With
  64.     End With
  65.     Application.ScreenUpdating = True
  66.     MsgBox "OK!"
  67. End Sub

复制代码

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

本版积分规则

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

GMT+8, 2024-11-17 16:42 , Processed in 0.041087 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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