VBA-分类汇总

Sub 分页小计()
  If ActiveSheet.ProtectContents
Then MsgBox "工作表已保护,本程序拒绝执行!", 64, "提示": Exit
Sub
  Dim columm As String, colunn As String,
Title_Rows As Byte, EndRow As Long, FenYeFu_Row As Long, XiaoJiRow As Integer, i
As Integer, j As Byte, str1 As Byte, str2 As Byte, LJrow As
Integer
  If WorksheetFunction.CountA("a:b") = 0 Then
MsgBox "A、B列为空,无法建立分页小计。", 64, "提示": Exit Sub
  On
Error Resume Next
  AA =
WorksheetFunction.Substitute(Cells(1,
ActiveSheet.UsedRange.Columns.Count).Address(0, 0), 1,
"")  ‘获取最后一个非空列的列标
  Title_Rows =
Range(ActiveSheet.PageSetup.PrintTitleRows).Rows.Count  ‘获取顶端标题的行数
  If
err.Number = 1004 Then Title_Rows =
0  ‘如果不存在顶端标题则为0
  err.Clear  ‘清除错误设置
  columm
= Application.InputBox("请输入需要汇总之首列列标(必须是英文字母)," & Chr(10) &
"将从该列开始产生小计及累计和。" & Chr(10) & "如果你只需要汇总一列,请在汇总末列处输入同样列标即可。", "汇总首列",
"C", , , , , 2)
  If columm Like "[!a-zA-Z]" Then
MsgBox "对不起,您只能输入A-Z的字母。", vbOKOnly + 64, "提示": Exit
Sub
  colunn =
Application.InputBox("请输入需要汇总之末列列标(必须是英文字母)," & Chr(10) &
"将从首列至此列之间的单元格产生小计及累计和。", "汇总末列", AA, , , , , 2)
  If
colunn Like "[!a-zA-Z]" Then MsgBox "对不起,您只能输入A-Z的字母。", vbOKOnly + 64, "提示":
Exit Sub
  On Error GoTo
err
  str1 = Range(columm &
1).Column  ‘将列标转换成数值
  str2 = Range(colunn
& 1).Column  ‘将列标转换成数值
  If str2 <
str1 Then MsgBox "末列不能小于首列!", 64, "友情提示": Exit
Sub
  XiaoJiRow =
2  ‘第一次赋值T为2,T的值等于小计、累计的总行数
  ActiveSheet.ResetAllPageBreaks  ‘重设分页符,它可以让工作表自动产生分页符,且以前设置的不规范的分页符可以删除
  If
Application.ExecuteExcel4Macro("Get.Document(50)") > 1
Then  ‘利用宏表函数计算当前表的页数,如果大于1页
    i =
Application.ExecuteExcel4Macro("INDEX(GET.DOCUMENT(64),1)") - 1 
   ‘每页(不含最后一行)行数。
  Else
 
  MsgBox "对不起,您的文件不足一页,此功能无效。", vbOKOnly + 64, "提示"
 
  Exit Sub  ‘只有1页则退出程序
  End
If
  AA = Timer   
‘记录当前时间
  Application.Calculation =
xlCalculationManual  ‘手动计算
  Application.StatusBar
= "★★★★ 正在生成小计与累计,请稍候...... ★★★★"  ‘在状态栏显示当前状态
 
 Application.ScreenUpdating =
False  ‘关闭屏幕更新
  EndRow =
ActiveSheet.UsedRange.Rows.Count  ‘记录最后一个非空行的行号
  X
= i - Title_Rows             
                 
     ‘每页行数减标题行行数
  FenYeFu_Row =
i                
                 
           
 ‘每页最后一行行号。(此处为第一页最后一行的行号)
  Do While EndRow
>= FenYeFu_Row ‘只要最后一个非空行大于当前页分页符所在行就一直循环下去
   
Rows((FenYeFu_Row - 1) & ":" & FenYeFu_Row).Insert
Shift:=xlDown  ‘插入2行
    Cells(FenYeFu_Row -
1, 1).Resize(2, 1) = [{"本页小计"; "累   
计"}]  ‘写入标题,纵向两个单元格分别产生小计与累计
   
Range(columm & (FenYeFu_Row - 1) & ":" & colunn & (FenYeFu_Row -
1)).Formula = "=SUM(R[-" + CStr(X - 2) + "]C:R[-1]C)" 
 ‘设置合计公式
    Range(columm & FenYeFu_Row &
":" & colunn & FenYeFu_Row).Formula = IIf(XiaoJiRow = 2, "=R[-1]C",
"=SUM(R[-" + CStr(X) + "]C:R[-2]C)")
   
ActiveWindow.SelectedSheets.HPageBreaks.Add before:=Rows(FenYeFu_Row +
1)  ‘添加分页符
    FenYeFu_Row = XiaoJiRow * X +
Title_Rows ‘累加变量FenYeFu_Row,其数值为每页行数的倍数
    XiaoJiRow
= XiaoJiRow + 1
    EndRow = EndRow + 2 ‘对变量 EndRow
累加2,因为插入了两行
  Loop
  ‘再添加最后一页的小计
  EndRow
=
ActiveSheet.UsedRange.Rows.Count  ‘记录最后一行的行号
  LJrow
= Evaluate("=MAX((a1:a" & Rows.Count & "=""累    计"")*ROW(1:"
& Rows.Count & "))")
  Range(columm &
(EndRow + 1) & ":" & colunn & (EndRow + 1)).Formula = "=SUM(R[-" +
CStr(EndRow - LJrow) + "]C:R[-1]C)"
  Range(columm
& (EndRow + 2) & ":" & colunn & (EndRow + 2)).Formula =
"=SUM(R[-" + CStr(EndRow - LJrow + 2) +
"]C:R[-2]C)"
  Cells(EndRow + 1, 1).Resize(2, 1) =
[{"本页小计"; "累   
计"}]  ‘写入标题,纵向两个单元格分别产生小计与累计
  ‘添加边框
  Range(Cells(EndRow
+ 1, 1), Cells(EndRow + 2,
ActiveSheet.UsedRange.Columns.Count)).Borders.LineStyle =
xlContinuous
  Columns("A:A").HorizontalAlignment =
xlLeft  ‘A列左对齐
  Cells(1,
1).Select  ‘返回A1
  ActiveSheet.PageSetup.PrintArea
= Cells(Rows.Count, 1).End(xlUp).CurrentRegion.Address 
 ‘设定打印区域
  MsgBox "程序共运行了" & Format(Timer -
AA, "0.00") &
"秒"  ‘提示时间
  Application.StatusBar =
""  ‘恢复状态栏
  Application.Calculation =
xlCalculationAutomatic  ‘自动计算
err:
  ActiveWindow.View
=
xlNormalView  ‘还原为常规视图
  Application.ScreenUpdating
= True  ‘恢复屏幕更新
  If err <> 0 Then
MsgBox "出错原因可能有:" & Chr(10) & "1.指定的首尾列标大于Excel允许的最大列。" & Chr(10)
& "2.您的工作表纵向页数不超过1页!" & Chr(10) & "3.输入起止列时,您选择了取消!", 64,
"程序出错"
End Sub
Public Sub
删除小计()
  On Error Resume
Next  ‘将小计与累计会换成逻辑值,再定位于常量逻辑值,删除整行
  Range("a:a").Replace
What:="本页小计", Replacement:="true", LookAt:=xlPart,
SearchOrder:=xlByRows
  Range("a:a").Replace
What:="累    计", Replacement:="true", LookAt:=xlPart,
SearchOrder:=xlByRows
  Range("a:a").SpecialCells(xlCellTypeConstants,
4).EntireRow.Delete
End Sub

VBA-分类汇总,布布扣,bubuko.com

时间: 2024-08-06 16:03:27

VBA-分类汇总的相关文章

Tableau小技巧-如何在柱状堆积图上方添加分类汇总

怎样利用tableau在柱状堆积图上方添加分类汇总 在柱状图上午显示数据标签,只需要将标签设置为"显示标记标签":但是有些时候柱状图需要按照某些维度进行细分,此时在使用标签设置,显示的结果是给每个细分板块添加上了标签,而看不到汇总的数据. 以下我们可以通过添加参考线来进行设置: 1.右键点击纵轴,选择"添加参考线" 2.在弹出的参考线设置对话框中按下图进行设置 选择 "线", 范围选择 "每单元格", 线选项,设定值为&quo

GitHub上史上最全的Android开源项目分类汇总

今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源项目分类汇总,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参考价值,包括很炫的界面特效设计.个性化控件.工具库.优秀的Android开源项目.开发测试工具.优秀个人和团体等.可以这样说,每一位Andorid开发人员都能从中找到一个或多个适用自己项目的解决方案,消化吸收并加以利用,可以为自己的APP增色不少.文章最后还列出了部分国外著名Android开发者的信息,包括GitHub地址

机器学习常见算法分类汇总

机器学习常见算法分类汇总 机器学习无疑是当前数据分析领域的一个热点内容.很多人在平时的工作中都或多或少会用到机器学习的算法.这里 IT 经理网为您总结一下常见的机器学习算法,以供您在工作和学习中参考. 机器学习的算法很多.很多时候困惑人们都是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的.这里,我们从两个方面来给大家介绍,第一个方面是学习的方式,第二个方面是算法的类似性. 学习方式 根据数据类型的不同,对一个问题的建模有不同的方式.在机器学习或者人工智能领域,人们首先会考虑算法的学习

20170624xlVBA正则分割分类汇总

Sub RegExpSubtotal() '声明变量 Dim Regex As Object '正则对象 Dim Dic As Object '字典对象 Dim Key As String '关键字 Dim Item As Double '项内容 Dim Index As Long '序号 Dim Text As String '文本 Dim Mch As Object '匹配集合 Dim OneMch As Object '匹配子项 Dim Rng As Range '单元格对象 '实例化 正

【Anroid】Android开源项目分类汇总

Android开源项目第一篇——个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style.其他Android开源项目第二篇——工具库篇  包括依赖注入.图片缓存.网络相关.数据库ORM工具包.Android公共库.高版本向

Excel 学习笔记——排序,筛选,查找,定位,分类汇总和数据有效性及 细节操作技巧

Excel 学习笔记   课程内容:查找.替换.定位 想要实现的目标内容: 1.       替换指定内容,例:苏州 <- 苏州市  红色背景色<- 黄色背景色 将"张某某"替换为"经理的亲戚" 2.       定位特定位置的单元格,类似筛选功能(mac 系统中 暂时未发现定位按钮) 3.       批注 修改 删除 变换形状 隐藏命令 利用的工具,手段(操作按钮的名称,位置): 1.1   查找和替换-选项-单元格匹配 用来锁定指定单元格,避免类似

对EXCEL中分类汇总的数据进行复制碰到无法复制的问题

作者:iamlaosong 对数据进行分类汇总后只想复制汇总的结果,复制方法网上很多,这里就不多说了,见下面链接: 分类汇总结果的复制 现有一表,想要复制汇总的结果,由于数据量大,结果复制中碰到下面提示导致复制失败: 上面提出的变通方法也是不知所云,如何处理呢? 方法其实也很简单,就是分次复制,每次复制一部分,至于每次能够复制多少条,也不一定,似乎和汇总的条数有关,不过也没什么关系,多了就报上述错误,重新选择区域就行了.

五、分类汇总与数据有效性

一.分类汇总工具 1.认识分类汇总 使用分类汇总前先排序 数据--分类汇总,在[分类字段].[汇总方式].[选定汇总项]选择相应的选项,如果不选择[替换当前分类汇总]这个选项的话,那能够进行[分类汇总的嵌套]. 分类汇总后会在表格的左上方有数字,这些数字越大所代表的表格的数据越详细.        2.复制分类汇总的结果区域 如果直接进行复制的话,那么复制的是整个表格,所以在复制前先使用[定位]工具对可见单元格进行定位(或则使用快捷键 [alt] + ; ),再进行复制粘贴. 二.设置数据有效性

【Android】Android开源项目分类汇总

第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style等等..其他 一.ListView android-pulltorefresh一个强大的拉动刷新开源项目,支持各种控件下拉刷新

Android UI集锦——1.Android Drawable分类汇总(1/3)

Android UI集锦--1.Android Drawable分类汇总(1/3) -转载请注明出处coder-pig 本节引言: 小猪好像写了好几个专题,都没坚持写完,又忍不住开个新的专题了,因为最近打算 开始研究Android图形与图形图像处理,动画以及自定义View等,所以就顺道记录下, 最近事有点多,感觉情绪很低迷,心理压抑又找不到倾述的对象,这个时候程序猿肯定会说: "没对象,你自己new一个啊",好有道理,我竟无言以对...好吧!还是自己的那句座右铭: 没什么可以一蹴而就,