ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-6-19 06:46 | 显示全部楼层 |阅读模式
本帖最后由 cqcbc 于 2024-6-19 08:51 编辑


image.png
image.png


     明细表中的小板块记录、汇总表如图,明细表中的“第一副”对应在汇总表的牌副得分下面的“1”,即B3单元格,第二副对应C3,类推;我们每次过录时的操作,将明细表中的小板块右边的3列内容,剪切到左边三列的下面,进行排序后,再填写到汇总表的的对应单元格。因为比赛位置不固定,还有轮空,比如队号11因故参加不了,所以明细记录表的位置不固定。
比如:
         明细表中的第二副 队号2 的得分是J5单元格,需要写入汇总表的C5单元格;
         明细表中的第三副 队号2 的得分是T9单元格,需要写入汇总表的D5单元格;
         另外,因为比赛的不同,牌的副数不固定,需要判断为空时就停止,如有其它表述不清,请指出。
         请求老师们,帮忙解决,自动生成汇总表。



image.png

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

27.04 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2024-6-19 09:07 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-6-19 09:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-6-19 09:17 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-19 09:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

水平高,看着应该是正确的,请将代码贴出分享一下,对着抄写还没完成。

TA的精华主题

TA的得分主题

发表于 2024-6-19 09:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 魂断蓝桥 于 2024-6-19 10:18 编辑

Option Explicit
Dim m, D
Sub a()
Sheet1.Range("A1:AA1").UnMerge
    Dim c As Range, firstAddress, r As Range, arr, i&, j&, s$
    Set D = CreateObject("Scripting.Dictionary")
    m = 0
    With Sheet1.UsedRange
        Set c = .Find("副", lookat:=xlPart)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Call b(c.Address)
            Do
                Set c = .FindNext(c)
                Call b(c.Address)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With

    Sheet2.Activate
    [b4:aa17] = ""
    arr = [b4:aa17]
    For i = 1 To UBound(arr)
        For j = 1 To UBound(arr, 2)
            s = i & "|" & j
            arr(i, j) = D(s)
        Next
    Next
    [b4].Resize(UBound(arr), UBound(arr, 2)) = arr
    Set D = Nothing

With Sheet1.Range("A1:AA1")
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .MergeCells = True
    End With
End Sub
Sub b(r)
    Dim i&, j&, s$, arr
    arr = Sheet1.Range(r).CurrentRegion
    m = m + 1
    For i = IIf(m = 1, 4, 3) To UBound(arr)
        For j = 1 To UBound(arr, 2) Step 3
            s = arr(i, j) & "|" & m
            D(s) = arr(i, j + 2)
        Next
    Next
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-19 10:07 | 显示全部楼层

高手,请将代码贴一下,我抄写了,出来还是有误。
Sub X2()
    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, xIPrevious).Column
        p = 0
        For i = 1 To erow
            For j = 1 To ecol
                If .Cells(i, j).Value Like "*第*副*" Then
                    p = p + 1
                    For m = i + 2 To i + 11
                        For Each n In Array(0, 3)
                            Key = .Cells(m, j + n).Value
                            If Key <> "" Then
                                dic(Key & "-" & p) = .Cells(m, j + n + 2).Value
                            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
            j = 1
            For Each k In dic
                r = Split(k, "-")(0)
                .Cells(i + r, 1).Value = r
                c = Split(k, "-")(1)
                .Cells(3, j + c).Value = c
                .Cells(i + r, j + c).Value = dic(k)
            Next k
        End With
    End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-19 10:15 | 显示全部楼层
魂断蓝桥 发表于 2024-6-19 09:33
Option Explicit
Dim m, D
Sub a()

运行后,数据好象不对。

TA的精华主题

TA的得分主题

发表于 2024-6-19 10:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 ykcbf1100 于 2024-6-19 10:20 编辑


数据转置、合计、得分合计、排名一键完成
附件供参考。。。

fab98999-0d8e-4be2-9a5d-b35d081783e8.png

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

37.3 KB, 下载次数: 11

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-19 10:19 | 显示全部楼层
数据转置、合计、得分合计、排名一键完成
  1. Sub ykcbf()   '//2024.6.19
  2.     Application.ScreenUpdating = False
  3.     Set d = CreateObject("Scripting.Dictionary")
  4.     With Sheets("B组牌副结分")
  5.         arr = .UsedRange
  6.         For i = 1 To UBound(arr)
  7.             If arr(i, 1) Like "*第*副" Then k = k + 1: d(k) = i
  8.         Next
  9.     End With
  10.     t = d.items
  11.     ReDim brr(1 To 100, 1 To 28)
  12.     For k = 1 To d.Count
  13.         r1 = d(k)
  14.         If k = d.Count Then r2 = UBound(arr) Else r2 = d(k + 1) - 1
  15.         For j = 1 To UBound(arr, 2) Step 7
  16.             If arr(r1, j) <> Empty Then
  17.                 m = m + 1
  18.                 For i = r1 + 2 To r2 - 2
  19.                     If Val(arr(i, j)) Then
  20.                         For x = 1 To 6 Step 3
  21.                             For y = 1 To 14
  22.                                 If Val(arr(i, j + x - 1)) = y Then
  23.                                     brr(y, m) = arr(i, j + x + 1)
  24.                                 End If
  25.                             Next
  26.                         Next
  27.                     End If
  28.                 Next
  29.             End If
  30.         Next
  31.     Next
  32.     With Sheets("汇总表B组")
  33.         .UsedRange.Offset(3, 1).Clear
  34.         .[b4].Resize(14, 26) = brr
  35.         For i = 4 To 17
  36.             .Cells(i, 28) = Application.Sum(.Cells(i, 2).Resize(, 26))
  37.         Next
  38.         For j = 2 To 28
  39.             .Cells(18, j) = Application.Sum(.Cells(4, j).Resize(m))
  40.         Next
  41.         arr = .[ab4].Resize(14)
  42.         For i = 1 To UBound(arr)
  43.             j = Application.Match(Application.Large(arr, i), arr, 0)
  44.             .Cells(j + 3, 29) = i
  45.         Next
  46.         With .[a4].Resize(15, 29)
  47.             .Borders.LineStyle = 1
  48.             .HorizontalAlignment = xlCenter
  49.             .VerticalAlignment = xlCenter
  50.         End With
  51.     End With
  52.     Application.ScreenUpdating = True
  53.     MsgBox "OK!"
  54. End Sub
复制代码


评分

1

查看全部评分

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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