遇到的实际问题:
这个问题,是在我遇到一些明细表的时候,经常会将不需要的字段隐藏,或者组合起来,方便查看重要数据,但是每次都要手动去右键——>隐藏这个操作,而且需要隐藏的列比较多,还是分开的,特别麻烦所以我写了这个代码,来自动完成。
我的这些代码均可结合其他的常用代码使用,此篇我就介绍一下【_3】和【_1】的结合使用。
图示问题:
![VBA常用代码_3、多列自动建立组合分级显示](http://www.lyw520.com/uploadfile/202305/afaca9742301e.jpg)
列可多了!这还不是最大的那一个!
自动组合分级代码
Sub 自动分级组合()Dim w1, sh1, folder, address, address2, i, i2, i3, ed, ed1, ed2, ed3, ed4, arr1, arr2, e, f Set ed1 = Range("A" & Rows.Count).End(xlUp) ed = ed1.Row ed2 = Range("A1").End(xlToRight).Column For i = 1 To ed2 Arr = Array("公司名称 ", "账薄 ", "参考段代码 ", "参考段说明 ", "往来代码 ", "往来说明 ", "备用段1 ", _ "备用段1描述 ", "备用段2 ", "备用段2描述 ", "现金流附表项目", "凭证来源 ", "凭证类别 ", "批名 ", _ "日记帐名称 ", "创建日期 ", "行号 ", "币种 ", "本位币金额借项 ", "本位币金额贷项 ", _ "原币金额借项 ", "原币金额贷项 ", "过帐状态 ", "冲销期间 ", "冲销状态") 'array括号里还可以增加其他需要组合的内容 If IsError(Application.Match(Cells(1, i), Arr, 0)) Then1 Else Columns(i).Group End If Next ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1 Cells(1, 1).SelectEnd Sub
说明一下:
- 代码定义了很多变量,因为这串代码还有其他的东西,但是没有放上来全,大家可以不用管Dim后的变量,代码正常使用即可
- 【If IsError(Application.Match(Cells(1, i), Arr, 0)) Then 1】,这个1是用来站位的,大家知道用法即可哈,不用理语法。
- 【Arr = Array(...)】这个括号里的可以自己重新填一下,修改引号内的内容即可,这里本来可以作为动态数组,由于需要分享出来,所以就改为了手动输入的,方便大家自定义。
代码作用图示:
![VBA常用代码_3、多列自动建立组合分级显示](http://www.lyw520.com/uploadfile/202305/70d31ca60e3faf9.jpg)
我们能看到,这里分级组合的功能已经自动完成了!
但是这个字体还是宋体12号,看起来不是特别好看,那我们可以在点击一下【_1】中的我们补充的自动文本整理功能,将文本整理一下,看起来就舒服多了。
如图:
![VBA常用代码_3、多列自动建立组合分级显示](http://www.lyw520.com/uploadfile/202305/c5057b61e97c515.jpg)
代码拼接
我们可以把【_1】和【_3】代码拼接一下,实现一步完成操作。
代码如下:
Sub 组合并调整格式()Dim w1, sh1, folder, address, address2, i, i2, i3, ed, ed1, ed2, ed3, ed4, arr1, arr2, e, f Set ed1 = Range("A" & Rows.Count).End(xlUp) ed = ed1.Row ed2 = Range("A1").End(xlToRight).Column For i = 1 To ed2 Arr = Array("公司名称 ", "账薄 ", "参考段代码 ", "参考段说明 ", "往来代码 ", "往来说明 ", "备用段1 ", _ "备用段1描述 ", "备用段2 ", "备用段2描述 ", "现金流附表项目", "凭证来源 ", "凭证类别 ", "批名 ", _ "日记帐名称 ", "创建日期 ", "行号 ", "币种 ", "本位币金额借项 ", "本位币金额贷项 ", _ "原币金额借项 ", "原币金额贷项 ", "过帐状态 ", "冲销期间 ", "冲销状态") 'array括号里还可以增加其他需要组合的内容 If IsError(Application.Match(Cells(1, i), Arr, 0)) Then1 Else Columns(i).Group End If Next ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1 '-----------------------------------------------------------------------以上为自动组合代码 ActiveSheet.UsedRange.Select With Selection.Font .Name = "微软雅黑" .Size = 9 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .TintAndShade = 0 .ThemeFont = xlThemeFontNone End With Rows("1:1").Select Selection.Font.Bold = True If ActiveSheet.AutoFilterMode Then2 Else Rows("1:1").AutoFilter End If '-----------------------------------------------------------------------以上为文本整理代码 Cells(1, 1).SelectExcel.Application.ScreenUpdating = tureEnd Sub
说明一下:
- 在组合的时候需要注意是否两串代码中有重复的变量,有的话,需要调整重复的变量名称(即dim后边的字母或标识)
合并后代码使用的动图如下:
![VBA常用代码_3、多列自动建立组合分级显示](http://www.lyw520.com/uploadfile/202305/efeccecbc0f45bf.jpg)
稍微总结一下:
- 实现自动的操作:字体调整、字号调整、首行加筛选、首行加粗、建立组合、显示为1级组合级别,共7个鼠标点击动作。Ps个人觉得还是挺方便的,不用来回点来点去,点一下,整个表看起来都舒服多了!
- 代码是可以拼接的,但是拼接时注意dim后变量是否重复使用了,重复使用的要修改一下
来点个人对VBA的看法
本人财务专业并在财务分析和财务BP搬砖3年,VBA这个我们做到了解基本用法,拿着别人的会用,已经基本足够应付工作了。举个例子,我们会用电脑,但是我们并不了解电脑的生产过程,也不用了解它怎么生产的,我们知道它怎么用就行了。
当然,如果和我一样,有兴趣的可以加深对它的了解,但是也不建议非常系统地学,我知道有大部分同学是从VAB什么时候产生开始学起的。其实我们以实用性为出发点,带着问题去学是最容易也是最快上手的。
比如我觉得每次都要手动点击组合这次演示的文本,效率好像有点低,然后就写串代码出来,让它来解决就行了。实在不会写,再去搜索看看别人的代码及其用法,有没有更简单的方法解决。
结束!