ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求请教如何把某列中内容相同的行放在一起,并附加个小计,类似于筛选的那种,用VBA...

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-4-13 12:41 | 显示全部楼层 |阅读模式
就像在工作表中的内容按照产品类型进行分类(如sheet1),然后每个类型下一行加一个求和的小计(如sheet2),哪位VB大神帮帮忙

新建 Microsoft Excel 工作表.zip

9.16 KB, 下载次数: 29

TA的精华主题

TA的得分主题

发表于 2018-4-13 12:46 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-13 13:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
LMY123 发表于 2018-4-13 12:46
排序并插入小计行

代码该这么写呢,实际工作的表里产品类型巨多,一个个弄的话还是很麻烦

TA的精华主题

TA的得分主题

发表于 2018-4-13 13:07 | 显示全部楼层
Option Explicit

Sub test()
  Dim arr, i, j, k, sum, total, n
  With Sheets("sheet1")
    arr = .Range("a2:f" & .Cells(Rows.Count, "c").End(xlUp).Row + 1)
  End With
  ReDim brr(1 To UBound(arr, 1) * 2, 1 To UBound(arr, 2))
  Call bsort(arr, 3)
  For i = 1 To UBound(arr, 1) - 1
    For j = i To UBound(arr, 1) - 1
      sum = sum + arr(j, 6)
      n = n + 1
      For k = 1 To UBound(arr, 2): brr(n, k) = arr(j, k): Next
      If arr(j, 3) <> arr(j + 1, 3) Then
        n = n + 1
        brr(n, 1) = "小计": brr(n, 6) = sum
        total = total + sum: sum = 0
        i = j: Exit For
      End If
  Next j, i
  n = n + 1: brr(n, 1) = "总计": brr(n, 6) = total
  With Sheets("sheet2").[a2]
    .Resize(Rows.Count - 1, UBound(brr, 2)).ClearContents
    .Resize(n, UBound(brr, 2)) = brr
  End With
End Sub

Function bsort(arr, key)
  Dim i, j, k, t, move As Boolean
  For i = LBound(arr, 1) To UBound(arr, 1) - 2
    For j = LBound(arr, 1) To UBound(arr, 1) + LBound(arr, 1) - 2 - i
        If arr(j, key) > arr(j + 1, key) Then
          For k = LBound(arr, 2) To UBound(arr, 2)
            t = arr(j, k): arr(j, k) = arr(j + 1, k): arr(j + 1, k) = t
          Next
          move = True
        End If
      Next
    If Not move Then Exit For
  Next
End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-13 17:09 | 显示全部楼层

大佬您再帮我看看,小弟愚笨做不到举一反三,和上一个附件类似,将表一里的数据分别按照 产品类型 产品型号 产品项目号生成三张表,给销售收入和成本加小计,感激不尽

案例.zip

55.29 KB, 下载次数: 12

TA的精华主题

TA的得分主题

发表于 2018-9-19 07:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-9-19 08:59 | 显示全部楼层
  1. Sub test()
  2.   Dim r%, i%
  3.   Dim arr, brr, zrr()
  4.   Application.ScreenUpdating = False
  5.   Application.DisplayAlerts = False
  6.   With Worksheets("sheet1")
  7.     r = .Cells(.Rows.Count, 1).End(xlUp).Row
  8.     .Range("a1:f" & r).Sort key1:=.Range("c2"), order1:=xlAscending, Header:=xlYes
  9.     xm = ""
  10.     arr = .Range("c1:c" & r)
  11.     For i = 2 To UBound(arr)
  12.       If arr(i, 1) <> xm Then
  13.         m = m + 1
  14.         ReDim Preserve zrr(1 To 2, 1 To m)
  15.         zrr(1, m) = i
  16.         zrr(2, m) = i
  17.         xm = arr(i, 1)
  18.       Else
  19.         zrr(2, m) = i
  20.       End If
  21.     Next
  22.     For k = UBound(zrr, 2) To 1 Step -1
  23.       .Rows(zrr(2, k) + 1).Insert
  24.       .Cells(zrr(2, k) + 1, 1) = "小计"
  25.       .Cells(zrr(2, k) + 1, 6).FormulaR1C1 = "=SUM(R" & zrr(1, k) & "C:R" & zrr(2, k) & "C)"
  26.     Next
  27.   End With
  28. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2018-9-19 09:00 | 显示全部楼层
练练手。。。

新建 Microsoft Excel 工作表.rar

110.48 KB, 下载次数: 23

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

本版积分规则

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

GMT+8, 2025-1-15 18:38 , Processed in 0.024479 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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