不同于《Excel·VBA一键计算每月合计》,仅对指定关键字计算合计数,而本文可以实现对选中列自动插入小计、总计行并求和

目录

  • 连续相同关键值自动小计
    • 举例
  • 固定行数分段自动小计

连续相同关键值自动小计

自动插入小计、总计行,对关键值列中连续相同值的行,对选中列进行小计,并最后总计

Sub 选中列一键计算小计总计_关键值()'对关键值列中连续相同值的行,对选中列进行小计,并最后总计'适用单/多列选中、单/多列部分选中;部分选中时,选中区域不得与表头行重叠,避免计算错误Dim key_col&, title_row&, rng As Range, i&, j&, k&Dim first_row&, last_row&, first_col&, last_col&, start_row&, end_row&
'--------------------参数填写:key_col、title_row都为数字key_col = 1    '关键值号,对连续相同的进行小计;空值不影响title_row = 1  '表头行数,不进行计算;0即为全部计算Set rng = Intersect(ActiveSheet.UsedRange, Selection)  'intersect语句避免选择整列造成无用计算first_row = rng.row     '选中区域开始行号last_row = first_row + rng.Rows.Count - 1  '选中区域结束行号first_col = rng.column  '选中区域开始列号last_col = first_col + rng.Columns.Count - 1  '选中区域结束列号With ActiveSheet'总计.Rows(last_row + 1).Insert  '选中末行插入.Cells(last_row + 1, key_col) = "总计": r = last_row - first_row + 1  '总行数For i = first_col To last_colIf title_row >= first_row Then  '整列选中,或部分选中时包含表头.Cells(last_row + 1, i).FormulaR1C1 = "=SUM(R[-" & r - title_row & "]C:R[-1]C)"Else  '部分选中,且不包含表头.Cells(last_row + 1, i).FormulaR1C1 = "=SUM(R[-" & r & "]C:R[-1]C)"End IfNext'清除公式仅保留结果,避免被后续小计的值干扰.Cells(last_row + 1, first_col).Resize(1, last_col - first_col + 1) = .Cells(last_row + 1, first_col).Resize(1, last_col - first_col + 1).Value'小计If first_row > title_row Then start_row = first_row Else start_row = title_row + 1end_row = last_row + 1  '因总计行,总行数+1DoFor j = start_row + 1 To end_rowIf .Cells(start_row, key_col) <> .Cells(j, key_col) Then.Rows(j).Insert.Cells(j, key_col) = .Cells(j - 1, key_col).Value & "-小计"For k = first_col To last_col.Cells(j, k).FormulaR1C1 = "=SUM(R[-" & j - start_row & "]C:R[-1]C)"Next'也可清除公式仅保留结果Range(.Cells(j, first_col), .Cells(j, last_col)).Value = Range(.Cells(j, first_col), .Cells(j, last_col)).Valuestart_row = j + 1: end_row = end_row + 1  '开始、结束行号更新值Exit For  '结束for循环End IfNextLoop Until start_row >= end_rowEnd WithDebug.Print "小计、总计行插入完成"
End Sub

举例


参数:key_col = 1,title_row = 1,选中C列运行代码,结果:

固定行数分段自动小计

Sub 选中列一键计算小计总计_分段()'对选中列按固定行数进行小计,并最后总计'适用单/多列选中、单/多列部分选中;部分选中时,选中区域不得与表头行重叠,避免计算错误Dim key_col&, title_row&, split_row&, rng As Range, i&, j&, k&Dim first_row&, last_row&, first_col&, last_col&, start_row&, end_row&, split_last&
'--------------------参数填写:key_col、title_row、split_row都为数字key_col = 1    '小计、总计,所在列号title_row = 1  '表头行数,不进行计算;0即为全部计算split_row = 8  '按固定行数分段小计Set rng = Intersect(ActiveSheet.UsedRange, Selection)  'intersect语句避免选择整列造成无用计算first_row = rng.row     '选中区域开始行号last_row = first_row + rng.Rows.Count - 1  '选中区域结束行号first_col = rng.column  '选中区域开始列号last_col = first_col + rng.Columns.Count - 1  '选中区域结束列号With ActiveSheet'总计.Rows(last_row + 1).Insert  '选中末行插入.Cells(last_row + 1, key_col) = "总计": r = last_row - first_row + 1  '总行数For i = first_col To last_colIf title_row >= first_row Then  '整列选中,或部分选中时包含表头.Cells(last_row + 1, i).FormulaR1C1 = "=SUM(R[-" & r - title_row & "]C:R[-1]C)"Else  '部分选中,且不包含表头.Cells(last_row + 1, i).FormulaR1C1 = "=SUM(R[-" & r & "]C:R[-1]C)"End IfNext.Cells(last_row + 1, first_col).Resize(1, last_col - first_col + 1) = .Cells(last_row + 1, first_col).Resize(1, last_col - first_col + 1).Value'小计If first_row > title_row Then start_row = first_row Else start_row = title_row + 1end_row = last_row + 1  '因总计行,总行数+1split_last = (end_row - start_row) Mod split_row  '最后一个非完整分段行数DoIf start_row + split_row <= end_row Then  '非最后一个分段,或完整分段j = start_row + split_row: offset_row = split_rowElse  '最后一个非完整分段j = end_row: offset_row = split_lastEnd If.Rows(j).Insert.Cells(j, key_col) = "小计"For k = first_col To last_col.Cells(j, k).FormulaR1C1 = "=SUM(R[-" & offset_row & "]C:R[-1]C)"Next'也可清除公式仅保留结果'Range(.Cells(j, first_col), .Cells(j, last_col)).Value = Range(.Cells(j, first_col), .Cells(j, last_col)).Valuestart_row = j + 1: end_row = end_row + 1  '开始、结束行号更新值Loop Until start_row >= end_rowEnd WithDebug.Print "小计、总计行插入完成"
End Sub

结果:
参数:key_col = 1,title_row = 1,split_row = 8,选中C列运行代码,结果与上面举例的效果一致

Excel·VBA选中列一键计算小计总计相关推荐

  1. oracle小鸡与合计,Excel EXCEL表中怎样快速实现小计和合计!excel小鸡 合计 总计

    怎么用EXCEL做每页自动小计? 步骤1 :前面插一列,在2至6入1,7至11行输入2.然后先取A2:A11,双击右下角向下填充,填充方式为复制单元格. 步骤2:选取整个数据表,数据 - 分类汇总 , ...

  2. 小福利,用Excel VBA编程制作一个变色小游戏

    小福利,用Excel VBA编程制作一个变色小游戏 设计思想:在正方形的四条边上都是设置循环函数,不断改变颜色和单元格里面的数值. Option ExplicitSub 按钮1_Click() Dim ...

  3. j2ee:servlet练习鲜花项目(购物车、分页、ajax、iframe弹出层、jquery、json(计算小计、总计)、map集合高级遍历、图片上传)...

    第一:概念 购物车全过程的理解:  1.新建一个购物车类,这样,这个类里面就可以封装商品对象和商品数量了.  2.每种商品都是一个购物车  3.把所有的购物车放在一起,也就是放在一个map集合中,这样 ...

  4. postgre——case、union、小计总计(GROUP BY ROLLUP)写法

    //将几张不同表结构的数据全部合并在一起,使用了case.union,同时实现小计总计 //小计总计使用的 GROUP BY ROLLUP函数,GROUP BY ROLLUP使用双括号将字段括起来,是 ...

  5. 【无标题】EXCEL合并选中列相同内容单元格(VBA)

    Sub 合并选中列相同内容单元格()Dim rngData As RangeDim i&, lngCol&, lngFirst, lngLastOn Error Resume Next ...

  6. excel函数:汉字转全拼_星期五的Excel函数:带过滤器的小计和总和

    excel函数:汉字转全拼 Last week, we used the Excel SUBTOTAL function to sum items in a filtered list, while ...

  7. vue el-table表格计算小计

    所要实现的效果图:输入单价,数量后自动算出小计的结果.下面的运费和其他费用只要编辑,合计就会自己得出. <el-table:data="tableData"border st ...

  8. python pandas 数据透视表_python – Pandas数据透视表:列顺序和小计

    小计和 MultiIndex.from_arrays的解决方案.最后 concat和所有数据帧, sort_index并添加所有总和: #replace km/h and convert to int ...

  9. Excel·VBA选中区域保存为txt文本

    vba代码有3种写法,都可实现,适用单/多列选中.单/多列部分选中,选中区域内容保存为一个txt文件 Private Function RE_STR(source_str As String, pat ...

最新文章

  1. 1月国内操作系统市场:Windows XP份额高达60.84%
  2. 数据元素和数据项的区别
  3. java –cp_Java –缺少字体–崩溃的应用程序!
  4. centos8部署Django项目---后台运行
  5. 使用栈实现队列 Implement Queue using Stacks
  6. 现代软件工程 作业汇总
  7. javascript实现数组深复制的方法
  8. Oracle 11gR2 ORA-12638 身份证明检索失败解决方法
  9. 安装Ubuntu 12.04
  10. new 一个结构体数组_C语言结构体到底占多少内存?简单!一文助你解决结构体内存问题...
  11. 高斯牛顿法 matlab代码实现
  12. Anders Hejlsberg语录
  13. UnityShader - 模拟动态光照特效
  14. HCIE-RS面试--STP弊端
  15. Ruby之父松本行弘:编程是可以干一辈子的
  16. struts2拦截器的使用及作用
  17. Java Socket设置timeout几种常用方式总结
  18. TOJ 5138: 数字游戏
  19. uniapp开发FFmpeg安卓原生短视频插件支持裁剪、添加背景音乐、压缩视频、视频播放器、拍照、录屏
  20. 已故女孩在微博“复生”追星,你的数据资产谁说了算?

热门文章

  1. WEB攻防-通用漏洞SQL读写注入ACCESS偏移注入MYSQLMSSQLPostgreSQL
  2. Python神经网络编程学习记录(一)
  3. python并发编程书籍推荐_《吐血整理》-顶级程序员书单集
  4. 老毛桃装ubuntu
  5. 使用MATLAB绘制Gazebo中的仿真小车的运动轨迹
  6. AD转换为KiCAD的方法
  7. 计算机专升研学院推荐,【解析】专升硕院校专业推荐
  8. 二级c语言程序基础知识,计算机二级《C语言》基本知识点
  9. Chrome的启动参数
  10. 学习笔记4 环境试验箱的校准