【Excel VBA 编程】自动化实现在表格中按月插入合计行

目录

引言

问题的分析与设计

通过VBA实现Excel中插入行

确定插入行的位置

代码入口设计

代码实现

运行结果

回顾总结


引言

先看图表,根据B列和C列内容判断每个月的最后一天,在最后一天后面插入一行Excel公式,用SUM函数求和,计算G列和H列的合计,G列和H列不能是数值必须是Excel求和公式,其他字段留空。

至于为何使用Excel公式而不需要填实际数值,估计是每个月数据不固定,会有增删吧,这样就不必每次有数据变动时重新再来一遍,因为Excel公式就能实时更新最新的数据了。

根据上面的需求,得到的预期结果如下图,每个月最后一条数据下面自动插入一行总计,并且自动算出G列和H列的汇总后的数据,这些汇总数据还不能是实际的数字,必须是类似“=SUM(H2:H9)”这样的公式,红色框中已经标出来了。 

问题的分析与设计

经过分析需求和数据特点,我们需要做两件事情:

  1. 如何实现Excel表中在指定位置插入行的操作
  2. 如何判断插入行的位置

通过VBA实现Excel中插入行

在VBA中,如果想在Excel工作表的特定位置插入一行,需要使用Rows.Insert方法。这个方法允许我们在指定的位置插入一行或多行。举个例子,如果想在第5行上面插入一空行,编写代码格式:ws.Rows(5).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

Shift参数来决定如何移动下方的行,xlDown 表示下方的行将向下移动以腾出空间给新行。如果是在顶部插入可以

遇到一个问题是这样的:有个做采购的同事,他来找到我,让我给他设计一个execl表格,能完成它日常采购东西的流水账,要求是能够自动输入当天日期时间。 然后我开始分析这个问题,用=now()这个函数能够做到自动获得当前日期时间,但是问题在于怎么触发它,于是我有想到if语句。然后我制作一张简单的样表,A2设置为输入序号,B2里放日期时间,当A2输入内容后,B2自动输入当前日期时间。那么B2列里设置函数=IF(A2="","",NOW()) 开始以为就这么简单,但是发现这个表格如果重新打开后,所以B列都会变为最新的日期,而且当A2被重新编辑后,B2就会变更日期为最新日期,这样完全实现不了采购同事的需求。于是我查阅了资料,找到了Target更新事件Offset获得焦点,让他们配合起来达到目的,经过不懈的努力,终于让我把代码写成功了,初步达到了采购同事的要求。特此把代码写在下面。供大家参考(以下代码最好配合实际案例的execl表的环境进阅读,这样事半功倍,execl表,我把它挂载到一个下载链接吧): Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 1 And Target.Column <> 5 Or Target.Count > 1 Then Exit Sub On Error Resume Next With Target If .Column = 1 And .Offset(0, 1).Value = "" Then '判断该单元格是否已经写入时间 .Offset(0, 1) = Now() End If If .Column = 5 Then '计算合计价格 .Offset(0, 1) = .Offset(0, 0) * .Offset(0, -1) End If End With End Sub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wei1019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值