做工程预决算的看过来——只需输入计算式,VBA立即帮你在指定位置的单元格显示出结果

用Excel做工程预决算的时候,一个最常见的需求是在某个单元格中输入工程量的计算式,然后在计算式右侧的相邻单元格中显示出计算式的结果,示例图如下:

要在计算结果栏中算出计算结果,最笨的方法当然是点计算器算出结果了填上(为什么说这个方法最笨恕不解释),第二笨的方法是在计算结果对应的单元格中写上`=`号再重抄一遍公式(请恕同样不给出解释)。

笨办法说完了,该比较聪明的方法出场了:利用宏表函数。具体做法如下(千言万语比不上一个动图):

 

 上面的演示中将单元格的绝对引用改为相对引用,主要是为了方便下拉公式时自动改变引用的单元格。

下面才是本文的主角——利用VBA来自动计算表达式并将结果填写在右侧相距distance列的单元格中。使用VBA的好处是:只要在计算使单元格中完成了计算式的填写,结果就自动显示,无需在对应的计算结果单元格中输入“=计算结果”之类引用名称的公式,而且可以兼容多个Excel版本(在早期Excel版本中,不支持`×、÷`这样的运算符)。

这次的VBA代码不再写在通用模块中,而是写在worksheet的change事件中。方法是打开VBA编辑器后点击如下图红色方框中的下拉按钮,分别选中Worksheet和Change:

 代码编辑框中即自动出现如下代码块:

Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

我们的代码就放在这个代码块里。完整代码如下:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xR As Range, tmp, flag As String, distance As Integer
    flag = "计算式"
    distance = 1
    Set xR = Cells.Find(flag)
    If Not xR Is Nothing Then
        If Target.Column = xR.Column And Target.Row > xR.Row Then
           On Error GoTo er
           tmp = Cells(Target.Row, Target.Column)
           If tmp <> "" Then
                 tmp = Replace(tmp, "+", "+")
                 tmp = Replace(tmp, "-", "-")
                 tmp = Replace(tmp, "×", "*")
                 tmp = Replace(tmp, "÷", "/")
                 tmp = Replace(tmp, "(", "(")
                 tmp = Replace(tmp, ")", ")")
                 tmp = Replace(tmp, vbCr, "")
                 Cells(Target.Row, Target.Column + distance) = "=" & tmp
            End If
        Else
            End
        End If
    Else
        MsgBox "没有找到计算式所在列的标题,请检查计算式所在列的标题与本宏代码第三行标题是否一致。"
        End
    End If
er:
    MsgBox "您可能输入了无效的算式!"
    Cells(Target.Row, Target.Column + distance ) = Cells(Target.Row, Target.Column)
End Sub

当然,如果你的计算式所在列的标题不是“计算式”而是其他标志,你只需要修改`flag`变量的值,但应该注意的是,这个标志在整个工作表中最好是唯一的,否则我也没测试会发生什么不测事件。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yivifu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值