前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Excel实战:使用VBA实现自动规划求解

Excel实战:使用VBA实现自动规划求解

作者头像
fanjy
发布2023-02-24 20:53:21
发布2023-02-24 20:53:21
4K00
代码可运行
举报
文章被收录于专栏:完美Excel完美Excel
运行总次数:0
代码可运行

标签:VBA,规划求解

规划求解可能是Excel中最好的功能之一,但它使用起来相当不便,本文探讨一种自动化实现这项功能的方法。

规划求解功能确定实现特定结果所需的输入。示例根据销售量、销售价格、成本价格和固定成本来计算利润。

图1

灰色单元格是变量,如果任何变量发生变化,最终利润将发生变化。

手工规划求解

使用上面的数字,假设想知道我们需要卖出多少套才能实现盈亏平衡(即,利润等于零)。

1.单击功能区“数据”选项卡“预测”组中的“模拟分析——单变量求解”,如下图2所示。

图2

2.在“单变量求解”对话框,设置参数如下图3所示。

图3

3.单击“确定”,Excel尝试确定可能的解决方案,并相应地更新单元格E12。

图4

4.一旦找到解决方案,单击“确定”关闭单变量求解对话框。

如果按上述操作,示例中需要卖出571台才能实现收支平衡。

如果其中一个变量发生变化(例如,如果销售价格增加到110),那么我们需要重新运行相同的目标寻求过程。这相当耗时。此外,如果正在为设计电子表格,那么这不是一个很好的用户体验。

使用VBA自动化求解

我们可以将相关的单元格进行命名,然后在代码中运用,这样更加灵活且通用。

示例中命名的单元格如下:

C4: SalesUnits

D4: SalesPrice

D6: VariableCostPrice

E10: FixedCost

E12: Profit

I6: TargetValue

相应的代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
Sub Macro1()
    Range("Profit").GoalSeek Goal:=Range("TargetValue"), _
       ChangingCell:=Range("SalesPrice")
End Sub

我们再命名两个单元格名称:

I4: SetCell

I8: ChangeCell

在这两个单元格中输入下面的值:

I4 = Profit

I8 = SalesUnits

接着,在工作表代码模块,输入下面的代码:

代码语言:javascript
代码运行次数:0
运行
复制
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim inputCells As Range
    '列出所有输入单元格. (1)命名单元格或 (2) 单元格引用
    Set inputCells = Range("SalesUnits, SalesPrice, VariableCostPrice, FixedCost, " & _
         "TargetValue, SetCell, ChangeCell")
    '如果输入单元格改变则运行宏
    If Not Application.Intersect(Range(Target.Address),inputCells) Is Nothing Then
      '使用SetCell,TargetValue和ChangeCell单元格中的值运行规划求解
      Range(Range("SetCell").Value).GoalSeek Goal:=Range("TargetValue").Value, _
         ChangingCell:=Range(Range("ChangeCell").Value)
    End If
End Sub

这样,每次改变输入单元格值,会自动触发规划求解。

注:本文学习整理自exceloffthegrid.com,VBA应用场景示例,供参考。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档