2024年5月8日发(作者:)

Microsoft Excel Solver 的说明

Microsoft Excel Solver 是一个 Microsoft Excel 增益集。Microsoft Excel Solver 会帮助您决

定 Microsoft Excel 工作表上,特定目标储存格内之公式的最佳值。Microsoft Excel Solver 会使

用方程式,来调整与目标储存格相关之其他储存格的值。您建立好方程式,并定义方程式中之变量的

一组参数或条件约束之后,Microsoft Excel Solver 就会尝试各种解法,以得到满足所有条件约束

的答案。Microsoft Excel Solver 会使用下列元素来「解」方程式:

目标储存格 - 目标储存格是最终目的。它是工作表模型中要最小化、最大化或设定为特定

值的储存格。

变量储存格 - 变量储存格是做出判断的变量。这些储存格会影响目标储存格的值。

Microsoft Excel Solver 会变更这些储存格,以寻找目标储存格的最佳解法。

条件约束 - 条件约束是对储存格内容的限制。例如,工作表模型中某个储存格可能限制为

整数值,而另一个储存格可能限制为小于某个指定值。

您可以使用 Microsoft Visual Basic for Applications (VBA) 巨集,以自动执行 Microsoft Excel

Solver 模型的建立与操作。本文将告诉您如何使用 VBA 巨集语言,在 Microsoft Excel 97 中使

用 Microsoft Excel Solver 函数。本文假设您已熟悉 VBA 语言和 Microsoft Excel 97 的

Microsoft Visual Basic 编辑器。其中使用的范例可以从下列 Microsoft 网站下载:

/download/excel97win/solverex/1.0/WIN98Me/EN-US/

注意 本文中说明的巨集与范例,也可以在 Microsoft Excel 5.0 与 7.0 版中使用。

回此页最上方

如何在 VBA 巨集中使用 Microsoft Excel Solver 函数

若要在 VBA 巨集中使用 Microsoft Excel Solver 增益集函数,您必须从包含巨集之活页簿的

VBA 项目参照增益集。如果未参照 Microsoft Excel Solver 增益集,则在尝试执行巨集时,将会

收到下列编译错误:

Compile Error:Sub or Function not defined (编译错误:Sub 或 Function 未定义)。

若要在活页簿中参照巨集的 Microsoft Excel Solver 增益集,请依照下列步骤执行:

1. 开启活页簿。

2. 在 [工具] 功能表上,指向 [巨集],然后按一下 [Visual Basic 编辑器]。

3. 按一下 [工具] 功能表上的 [设定引用项目]。

4. 在 [可引用的项目] 清单中,按一下以选取 [] 核取方块,然后按一下 [确

定]。

注意 如果在 [可引用的项目] 清单中看不到 ,请按一下 [浏览]。在 [新增

引用项目] 对话方块中,找出并选取 档案,然后按一下 [开启]。

档案通常位于 C:Program FilesMicrosoft OfficeOfficeLibrarySolver 子资料

夹下。

您现在已经可以在 VBA 巨集中使用 Microsoft Excel Solver 函数。

回此页最上方

如何设计可建立并解决简单 Microsoft Excel Solver 模型的 VBA 巨集

虽然 Microsoft Excel Solver 提供许多函数,不过下列这三个函数是建立和解决模型的基础:

SolverOK 函数

SolverSolve 函数

SolverFinish 函数

SolverOK 函数

SolverOK 函数会定义基本的 Microsoft Excel Solver 模型。SolverOK 函数通常是建立

Microsoft Excel Solver 模型时,所使用的第一个函数。SolverOK 函数等于按一下 [工具] 功

能表上的 [规划求解],然后指定 [Solver Parameters] 对话方块中的选项。以下是 SolverOK

函数的语法:

SolverOK(SetCell, MaxMinVal, ValueOf, ByChange)

以下信息说明 SolverOK 函数的语法:

SetCell 指定目标储存格。

MaxMinVal 对应至您要将目标储存格解到最大值 (1)、最小值 (2) 或特定值 (3)。

ValueOf 指定目标储存格要符合的值。如果将 MaxMinVal 设定为 3,就必须指定这

个自变量。如果将 MaxMinVal 设定为 1 或 2,则可以省略这个自变量。

ByChange 指定要变更的一个储存格或某个范围内的储存格。

[图 1] 显示 SolverOK 函数的自变量与 [Solver Parameters] 对话方块中的参数之间的关

联性。

图 1. 与 SolverOK 自变量关联的参数