ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助:按类别分页小计

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-12-6 12:21 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
求助:按“类目”分页小计,谢谢! 按类目分页小计.zip (2.27 KB, 下载次数: 20)


TA的精华主题

TA的得分主题

发表于 2022-12-6 13:32 | 显示全部楼层
本帖最后由 ykcbf1100 于 2022-12-6 14:03 编辑

没看懂你的需求。
代码仅指增加小计和总计
QQ图片20221206140134.png

按类目分页小计2.zip

18.99 KB, 下载次数: 16

TA的精华主题

TA的得分主题

发表于 2022-12-6 13:45 | 显示全部楼层
Sub 按钮2_Click()
    Set d = CreateObject("scripting.dictionary")
    arr = [a1].CurrentRegion
    For j = 3 To UBound(arr)
        d(arr(j, 1)) = d(arr(j, 1)) & "," & j
    Next j
    r = 3
    x = 0
    For Each kk In d.keys
        brr = Split(d(kk), ",")
        For i = 1 To UBound(brr) Step 3
            For j = 0 To 2
                If i + j <= UBound(brr) Then
                    r1 = r + j
                    For k = 1 To 5
                        Cells(r1, k + 7) = arr(Val(brr(i + j)), k)
                        Cells(r + 4, k + 7) = Val(Cells(r + 4, k + 7)) + Val(Cells(r1, k + 7))
                    Next k
                End If
            Next j
            r = r + 5
            Cells(r - 1, 8) = "小计"
        Next i
    Next
End Sub

TA的精华主题

TA的得分主题

发表于 2022-12-6 13:46 | 显示全部楼层
最后的合计,自己添加吧

按类目分页小计.zip

10.92 KB, 下载次数: 23

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-12-6 14:14 | 显示全部楼层
Sub xiaoji()
Application.ScreenUpdating = False
Dim ar As Variant
Dim d As Object
Dim rng As Range
Set d = CreateObject("scripting.dictionary")
With ActiveSheet
     r = .Cells(Rows.Count, 1).End(xlUp).Row
     ar = .[a1].CurrentRegion
     Set rng = .Rows(2)
    For i = 3 To UBound(ar)
        If Trim(ar(i, 1)) <> "" Then
            d(Trim(ar(i, 1))) = ""
        End If
    Next i
End With
With Sheets("结果")
    .UsedRange.Clear
    rng.Copy .[a1]
    rs = 2
    For Each k In d.keys
        n = 0
        ReDim br(1 To UBound(ar), 1 To UBound(ar, 2))
        For i = 3 To UBound(ar)
            If Trim(ar(i, 1)) = k Then
                n = n + 1
                For j = 1 To UBound(ar, 2)
                    br(n, j) = ar(i, j)
                Next j
            End If
        Next i
        If n <= 3 Then
            .Cells(rs, 1).Resize(n, UBound(br, 2)) = br
            .Cells(rs + 4, 1) = "小计"
            For j = 2 To UBound(br, 2)
                .Cells(rs + 4, j) = Application.Sum(Application.Index(br, 0, j))
            Next j
            rs = rs + 5
        Else
            For i = 1 To n Step 3
                m = rs - 1
                For s = i To i + 2
                    If s <= n Then
                        m = m + 1
                        For j = 1 To UBound(br, 2)
                            .Cells(m, j) = br(i, j)
                        Next j
                    End If
                Next s
                 .Cells(rs + 4, 1) = "小计"
                For j = 2 To UBound(br, 2)
                    .Cells(rs + 4, j) = Application.Sum(.Range(.Cells(rs, j), .Cells(rs + 3, j)))
                Next j
                rs = rs + 5
            Next i
        End If
    Next k
    .Select
End With
MsgBox "ok!"
End Sub

TA的精华主题

TA的得分主题

发表于 2022-12-6 14:15 | 显示全部楼层
按类目分页小计11.rar (17.17 KB, 下载次数: 8)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-12-6 14:20 | 显示全部楼层
增加了  总计,以此附件为准
按类目分页小计11.rar (16.79 KB, 下载次数: 23)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-12-6 14:28 | 显示全部楼层
  1. Sub test1()
  2.   Dim vData, vResult(), vTotal() As Double, i As Long, j As Integer
  3.   Dim rowSize As Long, posRow As Long, iCount As Integer
  4.   vData = Range("E3", Cells(Rows.Count, "A").End(xlUp).Offset(1))
  5.   ReDim vResult(1 To 10000, 1 To UBound(vData, 2)), vTotal(2 To UBound(vData, 2))
  6.   QuickSort vData, 1, UBound(vData) - 1, 1, UBound(vData, 2), 1
  7.   posRow = 5
  8.   vResult(posRow, 1) = "小计"
  9.   For i = 1 To UBound(vData) - 1
  10.     rowSize = rowSize + 1
  11.     iCount = iCount + 1
  12.     For j = 1 To UBound(vData, 2)
  13.       vResult(rowSize, j) = vData(i, j)
  14.       If j > 1 Then
  15.         vResult(posRow, j) = vResult(posRow, j) + vData(i, j)
  16.         vTotal(j) = vTotal(j) + vData(i, j)
  17.       End If
  18.     Next
  19.     If iCount = 3 Then
  20.       rowSize = posRow
  21.       posRow = posRow + 5
  22.       vResult(posRow, 1) = "小计"
  23.       iCount = 0
  24.     Else
  25.       If vData(i, 1) <> vData(i + 1, 1) Then
  26.         rowSize = posRow
  27.         posRow = posRow + 5
  28.         vResult(posRow, 1) = "小计"
  29.         iCount = 0
  30.       End If
  31.     End If
  32.   Next
  33.   vResult(posRow - 4, 1) = "总合计"
  34.   For j = LBound(vTotal) To UBound(vTotal)
  35.     vResult(posRow - 4, j) = vTotal(j)
  36.   Next
  37.   With Range("I3")
  38.     .Resize(Rows.Count - .Row, UBound(vResult, 2)).ClearContents
  39.     .Resize(posRow - 4, UBound(vResult, 2)) = vResult
  40.   End With
  41.   Beep
  42. End Sub

  43. Function QuickSort(ar, u As Long, d As Long, l As Long, r As Long, pos As Long)
  44.   Dim up As Long, dn As Long, x As Long, sPivot As String, vSwap
  45.   up = u
  46.   dn = d
  47.   sPivot = ar((u + d) \ 2, pos)
  48.   While up <= dn
  49.     Do While up < d
  50.       If StrComp(ar(up, pos), sPivot, vbTextCompare) = -1 Then up = up + 1 Else Exit Do
  51.     Loop
  52.     Do While dn > u
  53.       If StrComp(sPivot, ar(dn, pos), vbTextCompare) = -1 Then dn = dn - 1 Else Exit Do
  54.     Loop
  55.     If up < dn Then
  56.       For x = l To r
  57.         vSwap = ar(up, x): ar(up, x) = ar(dn, x): ar(dn, x) = vSwap
  58.       Next
  59.       up = up + 1: dn = dn - 1
  60.     Else
  61.       If up = dn Then up = up + 1: dn = dn - 1
  62.     End If
  63.   Wend
  64.   If up < d Then QuickSort ar, up, d, l, r, pos
  65.   If dn > u Then QuickSort ar, u, dn, l, r, pos
  66. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2022-12-6 14:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 fzxba 于 2022-12-6 15:59 编辑

按类目分页小计_改进.rar (17.62 KB, 下载次数: 18)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-6 16:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
3190496160 发表于 2022-12-6 14:20
增加了  总计,以此附件为准

            For I = 1 To N Step 3
                M = rs - 1
                For s = I To I + 2
                    If s <= N Then
                        M = M + 1
                        For j = 1 To UBound(br, 2)
                            .Cells(M, j) = br(I, j)
                        Next j
                    End If
                Next s
                 .Cells(rs + 4, 1) = "小计"
br(I, j)好像没对。麻烦了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 12:23 , Processed in 0.057239 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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