总是听到或看到有人问,编程好学吗?如何入门?多久能学会?它能做些什么?怎么写代码呀?执行过程中出问题了谁能帮帮我...如果你也有类似的问题那就赶快关注我的公众号,一起学起来吧!
1 “表格”对象引入
在平时使用Excel时,经常会遇到一个问题:新增行导致公式断裂
这是因为在普通的单元格区域,数据中间插入一行后,原有的公式范围不会自动扩展到新行。例如上图中,原本在E列使用 =C2-D2 计算每行利润,当在第2行和第3行之间插入新行后,新插入的第3行E列单元格是空的,需要手动将公式从第2行复制下来。这极易导致数据计算错误,需要我们时刻保持警惕并手动干预,用起来非常不方便
因此,Excel中引入了一个名词“表格”,没有使用过的小伙伴可以尝试以下方法查看它的庐山真面目:选中数据区域使用快捷键 Ctrl+T
转换为Excel的“表格”后,一切将变得不同,当我们再次新增加行时,公式会自动填充
这类“表格”在VBA中归属于“ListObject”对象,在ListObject表格中,其功能亮点之一就是添加计算列:公式会自动填充到该列的所有数据行(包括未来新增的行),无需手动向下填充
ListObject对象非常强大,今天我们就小试牛刀,使用ListObject自动创建一张结构化报表模板
案例需求:创建一张销售明细数据表格,包含5列:销售员、产品、销售额、成本及利润,要求利润列使用公式计算
演示视频:一键制作自动更新的销售报表
核心功能:E列利润列公式可自动填充——新增数据后,无需人为干预
想要实现以上效果,就需要用到ListObjects对象
2.1 操作步骤
- 选择 “插入” -> “模块”,将文中代码复制粘贴到新模块中
- 光标移动到“CreateTables”内,按“F5”键运行
回到Excel工作表,会看到多出一个名为“销售报表”的工作表,切换到该工作表,就得到了一个结构化报表模板了
2.2 代码实现
大家可以根据提供的代码,依葫芦画瓢设计并创建自己的表格了
Sub CreateTables() Dim ws As Worksheet Dim lo As ListObject Dim tblRange As Range Dim newCol As ListColumn ' 创建一个新工作表 Set ws = ThisWorkbook.Worksheets.Add ws.Name = "销售报表" ' 定义表格的初始范围 ' 从A1单元格开始,包含4列:销售员、产品、销售额、成本 Set tblRange = ws.Range("A1:D2") ' 第1行为标题,第2行为预留的第一行数据 ' 创建名为“MyTables”的ListObject表格 Set lo = ws.ListObjects.Add(SourceType:=xlSrcRange, _ Source:=tblRange, _ XlListObjectHasHeaders:=xlYes) lo.Name = "MyTables" ' 设置表格的视觉样式 lo.TableStyle = "TableStyleMedium9" ' 设置列标题 With lo .ListColumns(1).Name = "销售员" .ListColumns(2).Name = "产品" .ListColumns(3).Name = "销售额" .ListColumns(4).Name = "成本" End With ' 在表格末尾添加一个新的列,用于计算“利润” Set newCol = lo.ListColumns.Add(Position:=lo.ListColumns.Count + 1) newCol.Name = "利润" ' 设置新列的名称 '为该计算列设置结构化引用公式 newCol.DataBodyRange.Formula = "=[@销售额]-[@成本]" '设置该列的格式,如货币格式 newCol.DataBodyRange.NumberFormat = "¥#,##0.00" MsgBox "模版已创建。", vbInformationEnd Sub
好了,今天的编程知识到此结束了,又到每日分享小知识的时间了
今天分享的是键盘:大家有没有想过,为何键盘上的字母不按ABCD顺序排列?而是要采用QWERTY布局?这并非源于科学优化,而是早期打字机为克服机械缺陷而采取的“权宜之计”
本公众号一直在不间断地分享免费的编程案例和实用技巧。无论您是用来提升自动化办公效率还是想提升自我,请关注我的公众号,解锁更多的编程知识