Learn to use Excel's Solver add-in like an expert — build structured optimization models, configure constraints and objective functions, interpret sensitivity reports, and handle linear, integer, and nonlinear problems. This deep-dive lesson turns complex business decisions into mathematically optimal answers.

Your operations manager drops a spreadsheet on your desk. It contains 12 products, 4 manufacturing lines, 3 warehouses, and a margin target the CFO needs hit by end of quarter. You have limited machine hours, labor constraints, raw material caps, and minimum order commitments to honor. The question isn't just "which products should we make?" — it's "how many of each product, on which lines, routed through which warehouses, maximizes profit without violating any of these constraints?" That question has a mathematically optimal answer. Getting to it by trial and error would take days. Solver gets you there in seconds.
Excel's Solver add-in is a full-featured optimization engine built directly into Excel. It uses algorithms from linear programming, nonlinear programming, and evolutionary computation to search through millions of possible combinations and find the one that best satisfies your objective — whether that's maximizing revenue, minimizing cost, or hitting an exact target. This isn't a niche academic tool. Financial modelers use it for portfolio optimization. Supply chain analysts use it for production scheduling. HR teams use it for shift planning. If you work with constrained decision-making in any form, Solver is one of the highest-leverage skills you can develop in Excel.
By the end of this lesson, you'll be able to formulate real business problems as mathematical optimization models, configure Solver correctly for different problem types, interpret results critically, and avoid the subtle traps that produce wrong answers without warning.
What you'll learn:
You should be comfortable with Excel formula construction, particularly cell references — absolute references are critical when building Solver models. You should also be familiar with named ranges, which make Solver models dramatically more readable and maintainable. Basic familiarity with business math (margins, costs, constraints) is assumed. No calculus or linear algebra is required, but understanding what "maximize subject to constraints" means conceptually will help you build better models.
Solver ships with every version of Excel for Windows and Mac, but it's disabled by default. To enable it, go to File → Options → Add-ins, select "Excel Add-ins" from the Manage dropdown, click Go, and check the box next to "Solver Add-in." After clicking OK, you'll find Solver in the Data tab, all the way to the right in the Analysis group.
On Mac, the path is Tools → Excel Add-ins → check Solver Add-in.
Note
In Excel for the web and Excel Online, Solver is not available. You need the desktop application. If you're working in a shared environment where the add-in isn't installed, your IT administrator will need to push it via Group Policy or you'll need local admin rights to install it yourself.
What many users don't realize is that Solver is actually a wrapper around three distinct solving engines, each optimized for a different class of problem:
GRG Nonlinear (Generalized Reduced Gradient): The default engine for smooth nonlinear problems — problems where your objective function or constraints contain curved relationships like multiplication between decision variables, exponentials, or logarithms. GRG is gradient-based, meaning it follows the slope of the function to find a local optimum. This is fast but susceptible to finding local rather than global optima.
Simplex LP: The classical linear programming solver. If your objective and all constraints are linear (no variable multiplied by another variable, no powers, no IF statements in formulas), Simplex LP is what you should use. It is guaranteed to find the global optimum and runs extremely efficiently even on large models.
Evolutionary: A genetic algorithm-based solver for discontinuous, non-smooth problems — anything involving IF, CHOOSE, VLOOKUP, ABS, INT, or MOD in your objective or constraint formulas. It doesn't guarantee an optimal solution, but it's often the only engine capable of handling this class of problem. It runs much slower and requires more careful parameter tuning.
Choosing the wrong engine is one of the most common mistakes professionals make, and we'll return to this throughout the lesson.
Before you open Solver, you need to have a clear model structure in your head. Every optimization problem has exactly three components:
1. Decision Variables: The values Solver is allowed to change. These are the levers you control — quantities to produce, dollars to allocate, hours to schedule. They must be represented as cells in your spreadsheet.
2. Objective Function: A single number Solver is trying to maximize, minimize, or set to a specific value. This number must be calculated from your decision variables through formulas.
3. Constraints: The rules that limit what values the decision variables can take. These translate directly to business realities: machine capacity, budget limits, minimum order quantities, non-negativity requirements.
The discipline of formulating a problem correctly before touching Solver is what separates practitioners who get reliable answers from those who get confidently wrong ones. Let's build a complete realistic model from scratch.
The Scenario: A specialty food manufacturer produces four products: Artisan Granola, Trail Mix, Protein Bars, and Nut Clusters. Each product uses three shared resources: processing time (hours), packaging time (hours), and raw ingredient weight (kg). Each product generates a contribution margin per unit. Weekly resource capacities are fixed. Minimum production commitments exist for each product due to retail contracts. The goal is to maximize total weekly contribution margin.
Here's how to structure this in Excel before opening Solver at all.
Model Layout (set up in a new worksheet):
Rows 1–2: Title and date
Row 4: Column headers — Product | Units Produced | Processing Hrs/Unit | Packaging Hrs/Unit | Ingredient kg/Unit | Margin $/Unit
Rows 5–8: One row per product, with all unit consumption rates and margin figures
Row 10: "Totals" row — using SUMPRODUCT to calculate total resource usage and total margin
Row 12: "Capacity" row — the maximum available of each resource
Row 14: "Minimum Production" row — the contractual minimums per product
=SUMPRODUCT($B$5:$B$8, C5:C8)
This formula, placed in C10 and then copied across for each resource column, calculates total resource consumption by multiplying each product's production quantity (column B, your decision variables) by its per-unit consumption rate. The mixed reference — absolute on column B (the decision variables), relative on the resource column — means you can copy the formula across columns without breaking it.
Key insight
The SUMPRODUCT formula is the heart of a well-structured LP model in Excel. It computes the dot product of two ranges — exactly what linear programming requires. If you find yourself writing long SUM formulas with individual cell references, you're making your model fragile. Use SUMPRODUCT and named ranges together for a model that's readable and audit-ready.
Your objective cell, let's say F10, contains:
=SUMPRODUCT($B$5:$B$8, $F$5:$F$8)
This is total contribution margin. It's a single number, it references the decision variables (B5:B8), and it updates automatically as Solver changes those variables.
Concrete data for the model:
| Product | Units | Processing Hrs | Packaging Hrs | Ingredient (kg) | Margin ($/unit) |
|---|---|---|---|---|---|
| Artisan Granola | (variable) | 0.5 | 0.3 | 1.2 | 4.50 |
| Trail Mix | (variable) | 0.3 | 0.2 | 0.9 | 3.80 |
| Protein Bars | (variable) | 0.8 | 0.5 | 0.7 | 6.20 |
| Nut Clusters | (variable) | 0.4 | 0.4 | 1.1 | 5.10 |
| Resource | Capacity |
|---|---|
| Processing Hours | 480 |
| Packaging Hours | 320 |
| Ingredients (kg) | 900 |
| Product | Min Production |
|---|---|
| Artisan Granola | 50 |
| Trail Mix | 50 |
| Protein Bars | 30 |
| Nut Clusters | 40 |
Start with 100 in each of your decision variable cells (B5:B8). This gives Solver a reasonable starting point and lets you visually verify that your SUMPRODUCT formulas are calculating correctly before you even open Solver.
Now open Solver from the Data tab. You'll see the Solver Parameters dialog with several fields. Let's walk through each one with intention.
Set Objective: Click the cell reference picker and select F10, your total margin cell. This tells Solver what it's optimizing.
To: Select "Max" since you want to maximize margin. You could also select "Min" for cost minimization, or "Value Of" and enter a number if you need to hit an exact target (useful in scenarios like "find the production mix that generates exactly $50,000 in revenue").
By Changing Variable Cells: Select B5:B8, your production quantities. You can enter a range directly or use the picker. For non-contiguous ranges, hold Ctrl while clicking.
Subject to the Constraints: This is where most of the modeling work lives. Click "Add" to add each constraint. The Add Constraint dialog has three parts: the cell reference on the left, a comparison operator in the middle (<=, =, >=, int, bin, dif), and a value or cell reference on the right.
Add these constraints one at a time:
C10 <= C12 — Total processing hours used ≤ processing capacityD10 <= D12 — Total packaging hours used ≤ packaging capacityE10 <= E12 — Total ingredient weight used ≤ ingredient capacityB5 >= 50 — Minimum granola production (or reference the cell containing 50)B6 >= 50 — Minimum trail mix productionB7 >= 30 — Minimum protein bar productionB8 >= 40 — Minimum nut cluster productionTip
Rather than hardcoding numbers like 50 into constraint fields, reference the cells in your "Minimum Production" row. This makes it trivial to run what-if scenarios by changing cell values, without reopening Solver. This design principle — separating data from structure — is what turns a one-time Solver run into a reusable decision model.
Make Unconstrained Variables Non-Negative: Check this box. For most real-world production, allocation, or scheduling problems, negative decision variables are meaningless. Checking this box adds non-negativity constraints to all decision variables automatically, which is cleaner than adding them manually.
Select a Solving Method: Since our objective (SUMPRODUCT of constants × decision variables) and all constraints are linear, choose "Simplex LP." This guarantees the globally optimal answer.
Click Solve. Within milliseconds, Solver returns a solution.
When Solver finishes, it shows the Solver Results dialog. If a feasible optimal solution was found, you'll see "Solver found a solution. All Constraints and optimality conditions are satisfied." Your decision variable cells now contain the optimal values.
Before clicking OK, pay attention to the reports available in the right panel. For linear problems, you have three: Answer Report, Sensitivity Report, and Limits Report. Select all three and click OK. Excel creates a separate worksheet tab for each.
The Answer Report shows three sections:
Objective Cell: The original value (what your objective was before Solver ran) and the final value (the optimum). This is your headline result.
Variable Cells: Each decision variable, its original value, and its optimal value. This tells you exactly what Solver recommends producing.
Constraints: Each constraint, the formula value at the optimal solution, the constraint status (Binding or Not Binding), and the slack.
Binding means the constraint was hit exactly — you used every unit of that resource. Not Binding means you have slack — you didn't use all of that resource. This distinction matters enormously for business decisions. If processing hours are binding, adding more processing capacity would increase profit. If packaging capacity is not binding (you have 40 hours of slack), buying more packaging equipment is a waste of money.
This is where optimization becomes genuinely powerful for decision makers. The Sensitivity Report has two sections: Variable Cells and Constraints.
Variable Cells — Reduced Cost: For non-binding variables (decision variables at zero or at their lower bound), the reduced cost tells you how much the objective coefficient would need to improve before it would be optimal to include that variable. If a product has a reduced cost of -1.20, its margin would need to increase by $1.20/unit before Solver would recommend producing it.
Variable Cells — Allowable Increase/Decrease: This is the range over which you can change a decision variable's objective coefficient (margin per unit) without changing which solution is optimal. If Artisan Granola's allowable decrease is 0.80, you could cut its margin by up to $0.80/unit and still produce the same quantities. Beyond that, the optimal product mix changes.
Constraints — Shadow Price (Dual Value): This is the most practically important number in the entire report. The shadow price tells you how much the objective would improve if you relaxed that constraint by one unit. If the shadow price on processing hours is 3.40, then adding one more hour of processing capacity would increase total margin by $3.40. This is the economic value of a constrained resource — exactly what you need for capacity investment decisions.
Constraints — Allowable Increase/Decrease: The range over which you can change a constraint's right-hand side value (the capacity or limit) while the shadow price remains valid. This is your confidence interval for capacity planning.
Warning
The Sensitivity Report is only mathematically valid for linear models solved with Simplex LP. If you're using GRG Nonlinear or Evolutionary, the report is generated but the shadow prices and allowable ranges may not be meaningful. Always verify that you've used the correct solver before interpreting sensitivity results.
The Limits Report shows, for each decision variable, the lower and upper bounds of its value while keeping all other variables at their optimal values and maintaining feasibility. It's less commonly used than the Sensitivity Report but useful for checking how much flexibility exists in individual decisions.
The linear programming model above might return an answer like "produce 127.3 units of Protein Bars." In some contexts, fractional units are fine — allocating dollars, scheduling hours. But in many real-world problems, decision variables must be whole numbers. You can't ship half a truckload or hire 2.7 people.
Integer programming adds the constraint that some or all decision variables must take integer values. In the Add Constraint dialog, select the decision variable range and choose "int" from the operator dropdown. Solver will then search only over integer solutions.
Binary variables (the "bin" option) constrain a variable to be exactly 0 or 1. This models yes/no decisions: Do we open this facility or not? Do we assign this employee to this shift or not? Binary programming is the foundation of an entire class of problems called combinatorial optimization.
Warning
Adding integer constraints transforms your problem from a linear program (solvable in polynomial time, guaranteed optimal) to a mixed-integer program, which is NP-hard in general. For small problems (under ~20 binary variables), Solver handles this easily. For larger problems, solve time can explode exponentially. If you're hitting time limits, increase the Max Time and Max Subproblems values in Solver Options, but recognize that for truly large integer programs you may need specialized tools like Python's PuLP library or commercial solvers like Gurobi.
Practical Example — Capital Budgeting:
A company has seven potential projects, each with a cost and an NPV. The total budget is $2.5M. Which projects maximize total NPV?
Set up binary decision variables (B2:B8), one per project. The objective is:
=SUMPRODUCT(B2:B8, NPV_range)
The budget constraint is:
=SUMPRODUCT(B2:B8, Cost_range) <= 2500000
Add "bin" constraints on B2:B8. Solver will determine which combination of yes/no decisions maximizes NPV without exceeding budget. This is a classic 0-1 knapsack problem, and Solver handles it reliably for this scale.
Many real business relationships aren't linear. Price elasticity means that revenue isn't just Price × Quantity — the quantity sold depends on the price you set, often nonlinearly. Portfolio optimization involves variance (which is a quadratic function of portfolio weights). Blending problems with interaction effects are nonlinear.
For these problems, switch to GRG Nonlinear. The setup is identical to LP, but the solving method changes. There's one critical additional consideration: starting point sensitivity.
GRG follows gradients — it finds the steepest ascent and climbs until it reaches a local peak. If your problem has multiple peaks (a common situation in nonlinear optimization), GRG will find whichever peak is closest to your starting values, which may not be the global optimum.
Solver has a built-in mechanism to address this: Multistart. In the Solver Options dialog for GRG Nonlinear, check "Use Multistart." Solver will run GRG from multiple randomly selected starting points and return the best solution found. It's slower but significantly more reliable for problems with multiple local optima.
Practical Example — Pricing Optimization:
Suppose demand for your product follows: Quantity = 5000 - 200 × Price
Your cost structure is: Total Cost = 1000 + 2 × Quantity (fixed cost + variable cost)
Profit = Revenue - Cost = Price × Quantity - Total Cost
Substituting:
Profit = Price × (5000 - 200 × Price) - 1000 - 2 × (5000 - 200 × Price)
This is a quadratic function of Price. In Excel, set up:
=5000 - 200*B2 (Quantity, calculated)=B2*B3 (Revenue)=1000 + 2*B3 (Total Cost)=B4-B5 (Profit, your objective)Add constraints: B2 >= 2 (price must cover variable cost), B3 >= 0 (can't have negative demand). Set objective to Max B6, decision variable B2, method GRG Nonlinear. Solver will find the profit-maximizing price analytically equivalent to what calculus would give you — with no calculus required.
The Evolutionary engine uses a genetic algorithm — it maintains a population of candidate solutions, combines them in ways analogous to genetic crossover and mutation, and iteratively improves the population toward better objective values. It doesn't require gradient information, which makes it uniquely capable of handling discontinuous functions.
You need Evolutionary when your model contains:
Practical Example — Staff Scheduling with Tiered Overtime:
An employee's weekly cost depends on hours worked: regular hours are paid at $22/hr, hours between 40 and 50 are paid at $33/hr, and hours over 50 at $44/hr. This creates a stepped cost function:
=IF(B2<=40, B2*22, IF(B2<=50, 40*22 + (B2-40)*33, 40*22 + 10*33 + (B2-50)*44))
This formula has discontinuities — the derivative doesn't exist at hours=40 and hours=50. GRG will likely fail or return unreliable results. Evolutionary will handle it, though you need to give it time (increase the Max Time setting) and understand that it may not find the true global optimum.
Key insight
Evolutionary Solver does not generate a Sensitivity Report, and its solutions come with no optimality guarantee. Use it only when GRG and Simplex LP genuinely can't handle your problem structure. If you can reformulate a discontinuous problem linearly using auxiliary variables and constraints, that formulation will be both more reliable and more interpretable.
Evolutionary Options Worth Knowing:
Experienced LP modelers rarely use IF functions in their models because they know how to encode conditional logic as linear constraints instead, keeping the problem solvable by Simplex LP with its optimality guarantees.
The most powerful technique is using binary auxiliary variables to encode conditions.
Example: A supplier offers a volume discount — if you order more than 500 units, the price drops from $12 to $10. You want to decide order quantity and account for the actual cost.
Naively, the cost formula would be =IF(Q>500, Q*10, Q*12) — nonlinear and discontinuous.
Instead:
Add constraints:
C = 12*Q - 2*(Q - y*500) [encodes the discount]
Q <= 500 + M*y [if y=1, Q can exceed 500; M is a large number]
Q >= 501*y [if y=1, Q must exceed 500]
This reformulation lets Simplex LP handle what appeared to be a nonlinear pricing problem. The technique is called big-M reformulation and is a cornerstone of practical integer programming.
For models with multiple dimensions — say, allocating employees to shifts AND departments — SUMPRODUCT becomes indispensable. A two-dimensional decision variable matrix (employees × shifts) with associated cost or productivity parameters can be evaluated in a single SUMPRODUCT formula, keeping the model compact and Solver's variable range clean.
Consider pairing your Solver model with data validation on scenario inputs. This lets end users choose from predefined scenarios (conservative demand, baseline, optimistic) without editing raw numbers, reducing the risk of corrupting the model structure. The Solver model then reoptimizes against whichever scenario is active.
This means your constraints are contradictory — there's no combination of decision variable values that satisfies all of them simultaneously. Common causes:
Minimum constraints exceed capacity. If you require at least 200 units of a product but producing 200 units uses more resources than available, the problem is infeasible. Check that the sum of minimum production times resource usage doesn't exceed capacity.
Equality constraints that can't be simultaneously satisfied. Two constraints requiring the same variable to equal different values.
Typo in constraint direction. >= where you meant <= is easy to miss.
Diagnosis approach: Remove constraints one by one (or in groups) until Solver finds a solution. The last removed constraint — or the interaction between the last few — is causing the infeasibility. Then adjust your data to make the problem feasible, or change the business requirements.
Tip
Use the formula auditing tools to trace which cells are feeding your constraint formulas. A broken cell reference feeding into a constraint can produce phantom infeasibility that's invisible without auditing.
This is the unbounded problem warning. Your objective can be improved without limit because there are no constraints stopping it. For maximization, this usually means you're missing a constraint — typically an upper bound on a resource or a demand cap. Add the missing bound and re-run.
This is the multiple local optima problem. Enable Multistart in GRG options. If Multistart returns different answers across runs, your problem has many local optima and you should consider whether GRG is the right engine. For quadratic objectives with linear constraints (like portfolio optimization), the problem is convex and GRG will always find the global optimum — multiple local optima only arise in genuinely nonconvex problems.
This usually means your objective cell formula isn't actually connected to the decision variables. Check the formula chain: does changing a decision variable manually change the objective cell? Use Trace Precedents to verify the dependency chain is intact.
Add a Time Limit in Solver Options (Solver Options → Max Time). Also check whether your binary or integer variables are truly necessary — sometimes modelers add "int" constraints reflexively when fractional solutions are actually acceptable. Each integer constraint multiplies the solve complexity. For large models, consider relaxing integer constraints to get a linear programming bound first, then tightening.
For models that need to run regularly — daily optimization of production schedules, weekly portfolio rebalancing — you don't want to open the Solver dialog every time. Solver exposes a full API through VBA that lets you configure and run it programmatically.
Sub RunProductionOptimizer()
' Clear previous solution
Range("B5:B8").Value = 100
' Reset and configure Solver
SolverReset
SolverOk SetCell:="$F$10", _
MaxMinVal:=1, _
ValueOf:=0, _
ByChange:="$B$5:$B$8", _
Engine:=1, _
EngineDesc:="GRG Nonlinear"
' Resource constraints
SolverAdd CellRef:="$C$10", Relation:=1, FormulaText:="$C$12"
SolverAdd CellRef:="$D$10", Relation:=1, FormulaText:="$D$12"
SolverAdd CellRef:="$E$10", Relation:=1, FormulaText:="$E$12"
' Minimum production constraints
SolverAdd CellRef:="$B$5", Relation:=3, FormulaText:="50"
SolverAdd CellRef:="$B$6", Relation:=3, FormulaText:="50"
SolverAdd CellRef:="$B$7", Relation:=3, FormulaText:="30"
SolverAdd CellRef:="$B$8", Relation:=3, FormulaText:="40"
' Non-negativity
SolverOptions AssumeNonNeg:=True
' Solve and keep result
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
MsgBox "Optimization complete. Total margin: " & Format(Range("F10").Value, "$#,##0.00")
End Sub
Key VBA parameters:
MaxMinVal: 1=Maximize, 2=Minimize, 3=Value OfRelation: 1=<=, 2==, 3=>=, 4=int, 5=binEngine: 1=GRG Nonlinear, 2=Simplex LP, 3=EvolutionaryUserFinish:=True suppresses the Solver Results dialog so the macro runs silentlyWarning
To use Solver in VBA, you must add "Solver" as a reference in the VBA editor (Tools → References → check "Solver"). Otherwise you'll get a "Sub or Function not defined" error. Also note that Solver VBA calls reference the Solver installed on the machine, so the code must run on a machine where Solver is enabled.
This kind of automation becomes especially powerful when combined with scenario tables — you can loop through a scenario table, run Solver for each scenario, and write results back to a summary range, building a complete sensitivity analysis automatically.
Complete this end-to-end optimization exercise before moving on.
Scenario: You manage a small investment portfolio with $100,000 to allocate across five asset classes: US Equities, International Equities, Bonds, Real Estate (REIT), and Cash. You have the following data:
| Asset | Expected Annual Return | Risk Score (1-10) | Min Allocation | Max Allocation |
|---|---|---|---|---|
| US Equities | 8.5% | 7 | 10% | 60% |
| International | 7.2% | 8 | 5% | 40% |
| Bonds | 4.1% | 3 | 10% | 50% |
| Real Estate | 6.8% | 6 | 0% | 25% |
| Cash | 2.0% | 1 | 5% | 30% |
Your investment policy requires:
Your tasks:
Build the model: Set up decision variables as allocation percentages (B2:B6), calculate weighted return, weighted risk, and total allocation using SUMPRODUCT.
Task A — Maximize Return: Find the allocation that maximizes expected return subject to all constraints. Record the optimal allocations and the maximum achievable return.
Task B — Minimize Risk: Change the objective to minimize weighted average risk score, keeping all constraints. Record the new allocations. Note which constraints are now binding.
Task C — Efficient Frontier Point: Find the allocation that maximizes return when the risk constraint is tightened to 5.0. How does the optimal return change? What does this tell you about the risk-return tradeoff?
Task D — Sensitivity Analysis: From the Sensitivity Report for Task A, identify the shadow price on the risk constraint. What does this number tell you about how much expected return you give up for each unit reduction in allowable risk?
Add a VBA macro that runs all three scenarios sequentially and writes the results to a summary table.
Expected insights you should reach:
Mistake 1: Circular References in the Model
Solver requires a clean, acyclic formula chain. If your objective depends on a cell that depends on a constraint formula that depends back on the objective, Solver will either error or behave unpredictably. Use formula auditing to verify there are no circular dependencies before running Solver.
Mistake 2: Putting IF Statements in Objective/Constraint Formulas and Using Simplex LP
Simplex LP assumes linearity. If your formulas contain IF, it won't necessarily error — Solver might evaluate the formula at a linearization point and produce a subtly wrong answer. Always match your model's mathematical structure to the correct solving engine. When in doubt, test manually: change a decision variable by a small amount and check whether the objective changes proportionally. If it does, the relationship is linear.
Mistake 3: Forgetting to Set Starting Values
For GRG and Evolutionary, your starting point matters. All-zero starting values can land in a degenerate region where Solver can't get gradient information. All-one starting values might violate constraints immediately. Use realistic initial values that satisfy your constraints — this gives Solver a valid starting point and usually leads to faster, more reliable convergence.
Mistake 4: Hardcoding Values in Constraint Fields
Entering 500 in the constraint formula field rather than referencing $C$12 means that changing your capacity data doesn't automatically update the constraint. This is a model maintenance disaster — the first time someone updates the capacity table and re-runs Solver, they get results from the old constraints with no warning. Always reference cells.
Mistake 5: Ignoring Scaling Issues
When decision variables operate in vastly different magnitudes — some in the thousands, others as fractions — numerical precision problems can arise, particularly in GRG. Solver Options has a "Use Automatic Scaling" checkbox that normalizes the problem internally. Enable it for mixed-scale models. Alternatively, reformulate the problem so all variables operate in similar ranges (e.g., express everything in thousands of units rather than mixing units and millions).
Mistake 6: Treating the Evolutionary Result as Optimal
Genetic algorithms are heuristic. The Evolutionary engine doesn't prove optimality — it finds a good solution within its time and iteration limits. For the same problem, running Evolutionary twice may produce different answers. If you need a proven optimal solution, reformulate the problem to use Simplex LP (via linearization techniques). If you must use Evolutionary, run it multiple times and take the best result, and report your solution with the caveat that it's heuristic.
Mistake 7: Not Saving Scenarios Before Rerunning
Solver overwrites your decision variable cells when it runs. If you want to compare multiple scenarios — say, the optimal mix under three different capacity assumptions — save each result to a separate column before running the next scenario. Excel's Scenario Manager (Data → What-If Analysis → Scenario Manager) integrates with Solver's results to store and compare named scenarios without manual copying.
Tip
Pair Solver with conditional formatting on your decision variable cells to visually highlight binding constraints and show at a glance where your model is resource-constrained. A green-to-red scale on resource utilization percentages makes constraint tightness immediately visible to stakeholders reviewing the model.
Before presenting Solver results to any stakeholder, validate the solution manually:
Feasibility check: Plug the optimal values back into each constraint formula manually (or trace through the formulas) and verify that every constraint is satisfied. The Answer Report does this, but developing the habit of manual verification catches errors that report formatting might obscure.
Boundary test: Set all decision variables to their minimum values and verify the objective is lower (for maximization) than the Solver solution. Set them to boundary values and check again. If you can find a better value by hand, something is wrong.
Small perturbation test: Change one decision variable by a tiny amount in the direction the Sensitivity Report suggests would improve the objective. Verify that the constraint violation this causes matches what the shadow price predicts.
Degenerate case check: What happens if you remove all constraints? Does the objective go unbounded? For maximization of a positive-margin product mix, it should — meaning your constraints are genuinely the binding factor, not a modeling artifact.
Business logic check: Does the solution make sense to a domain expert? If the model recommends zero production of your most popular product, there's likely a modeling error or a constraint that's unrealistically tight. Engage the domain expert before accepting the result.
You now have a complete, professional-grade understanding of Excel Solver — from the mathematical foundations of optimization modeling through the practical mechanics of configuring the tool, interpreting its reports, handling nonlinear and integer problems, automating with VBA, and validating results.
The core discipline is formulation: being precise about what you can control (decision variables), what you're trying to achieve (objective), and what rules you must respect (constraints). Get the formulation right, choose the correct solving engine, and Solver will consistently find answers that manual analysis never could.
The progression for continued learning:
linprog offer the same conceptual framework with dramatically more scalabilityOptimization is one of the most intellectually satisfying corners of data work — it takes the ambiguity of business decisions and replaces it with mathematically defensible recommendations. Master Solver, and you'll consistently be the person in the room who has an actual answer, not just a heuristic.