今天遇到一个需要求解单一变量方程的问题,需要用Excel来进行批量求解。
通过了解,发现Excel有一个单变量求解的功能,可以解决此类问题。但是由于需要求解的变量值有许多,但Excel这个功能并不能像函数公式一样进行批量操作。
经过一番搜索发现实现批量操作可以通过录制宏命令来实现,由于搜索到的相关结果没有关于可变目标值的完整示例,现在此说明,希望可以帮助有需要的朋友。
首先,演示如何使用单变量求解单个值的问题。
示例:2X-1=10,求X的值。
方程比较简单,仅供演示,勿喷。
![276c728670d8dae9041a02f3581ae414.png](https://i-blog.csdnimg.cn/blog_migrate/a283ca2554645fd18d4dcbc235a63ee3.jpeg)
以Excel365版(2019)为例,单变量求解功能在数据选项卡下。
![35404763ce210714e31e1206c1919c1f.png](https://i-blog.csdnimg.cn/blog_migrate/2812a8f45e0af5dae8d499dca23f0d2a.jpeg)
具体操作如下:将函数表达式填入目标单元格D8内,表达式中待求变量(X)用可变单元格C8代替。将光标置于D8单元格,单击单变量求解功能,依次填入目标单元格、目标值、和可变单元格,具体输入值如下图所示:
![4f5f9d6ec57ef8d5018332b9d4fb0f0a.png](https://i-blog.csdnimg.cn/blog_migrate/b24e3769317421bf62f0445e49a47f7f.jpeg)
单击确定即可在可变单元格内生成相应结果,确定即可。
注意:目标值不能使用单元格引用
若要求进行批量求解,如下图所示,每个进行相应操作将十分繁琐,且易出错。
![c6a5ba84a5d62afa21f2f8e665b57092.png](https://i-blog.csdnimg.cn/blog_migrate/73172a523a61aeb7c5936b9856025cef.jpeg)
而Excel也无法进行直接批量复制粘贴求解,因此需要借助宏命令。
在此,是通过录制单一问题的宏命令,经过修改,添加循环和变量来实现批量操作。
单击视图选项卡下宏-录制宏即可开始录制。
![515a95a6ee37648b9555a673fbbf6bbc.png](https://i-blog.csdnimg.cn/blog_migrate/254879142faeb5a0a529be70c4c4c4c2.jpeg)
然后开始之前单个问题求解的操作,然后结束录制,编辑生成的宏命令如下。
Sub 批量单变量求解()
'
' 批量单变量求解 宏
'
Range("D8").GoalSeek Goal:=10, ChangingCell:=Range("C8")
End Sub
这里需要添加一个变量i循环和一个目标值变量m。
更改后的代码如下
Sub 批量单变量求解()
'
' 批量单变量求解 宏
'
Dim i As Integer
For i = 9 To 19
m = Range("E" & i)
Range("D" & i).GoalSeek Goal:=[m], ChangingCell:=Range("C" & i)
Next i
End Sub
通过查看运行该宏命令即可获得相应结果如下。
![2b43a43c5b7d6146ed11d6ee4ba74690.png](https://i-blog.csdnimg.cn/blog_migrate/aaa1fb93063bea95e1ad5c7ecbc8e814.jpeg)
一定要注意,不要搞错变量i的赋值范围,由于Excel该功能中目标值不能引用单元格的值,我设置了新的变量m,要注意m的取值,一定不要出错。
其实,经过再次尝试不需要引入变量m也可以。直接GoalSeek Goal:=单元格的值,VB里引用要Range()的形式。
因此,代码也可以这样写:
Sub 批量单变量求解()
'
' 批量单变量求解 宏
'
Dim i As Integer
For i = 9 To 19
Range("D" & i).GoalSeek Goal:=Range("E" & i), ChangingCell:=Range("C" & i)
Next i
End Sub
简单了许多,哈哈。
代码是改出来的,
技能是练出来的,
分享是最好的学习方式!共勉!