NORM.INV function

Returns the value at a probability percentile from a normal distribution with given mean and standard deviation, used for inventory reorder point planning.

=NORM.INV(probability, mean, standard_dev)

Generate a NORM.INV formula

Describe what you need. The generator will reach for NORM.INV where NORM.INV is the right tool, and tell you when it is not.

How to get a better answer
  • Name your columns by letter and by header: "column F (Net Value)" beats "the amount column".
  • State every condition, including the negatives — "not cancelled" changes the formula's shape.
  • Say where the data starts if it is not row 1, and whether it will grow.
  • Check the settings above match your spreadsheet: the wrong argument separator is a syntax error on your machine.

Arguments

How NORM.INV reads its arguments
probabilityrequiredmeanrequiredstandard_devrequiredNORM.INV
ArgumentRequiredDescription
probabilityRequiredA decimal between 0 and 1 (exclusive) representing a percentile; 0.9 means the 90th percentile. Values ≤0 or ≥1 return #NUM! error.
meanRequiredThe center of the normal distribution curve; can be any numeric value including negative. This is typically calculated from historical inventory data using AVERAGE.
standard_devRequiredThe spread of the distribution around the mean; must be strictly positive. Zero or negative values return #NUM! error. Calculate using STDEV.S for sample data.

Returns

A numeric value representing the point on the normal distribution curve at the specified percentile.

Availability

Excel: All · Google Sheets: Supported

Worked examples

1. Calculate safety stock level at 90th percentile

IngredientSupplierUnitQtyExpiry Date
Olive OilFreshFood CoL452024-12-15
GarlicLocal Farmkg122024-09-25
TomatoesFresh Producekg282024-09-22
BasilHerb Gardensbunch182024-09-20
PastaItalian Importkg352025-03-10
=NORM.INV(0.9, 45, 12)

Result: 60.38

Based on historical olive oil inventory averaging 45 liters with a 12-liter standard deviation, this returns 60.38—the quantity level where only 10% of inventory checks fall above. This helps set a safety stock target to prevent unexpected stockouts while minimizing excess inventory costs.

2. Determine reorder point at 10th percentile

IngredientSupplierUnitQtyExpiry Date
Olive OilFreshFood CoL452024-12-15
GarlicLocal Farmkg122024-09-25
TomatoesFresh Producekg282024-09-22
BasilHerb Gardensbunch182024-09-20
PastaItalian Importkg352025-03-10
=NORM.INV(0.1, 45, 12)

Result: 29.62

The 10th percentile gives 29.62 liters—the level where only 10% of past counts dropped below. Setting a reorder alert at 29.62 liters ensures the kitchen reorders before critically depleting olive oil, balancing supplier lead times against storage space constraints.

3. Verify median inventory level at 50th percentile

IngredientSupplierUnitQtyExpiry Date
Olive OilFreshFood CoL452024-12-15
GarlicLocal Farmkg122024-09-25
TomatoesFresh Producekg282024-09-22
BasilHerb Gardensbunch182024-09-20
PastaItalian Importkg352025-03-10
=NORM.INV(0.5, 45, 12)

Result: 45

The 50th percentile (median) of any normal distribution always equals its mean, so this returns exactly 45. This property confirms the symmetry of the normal curve—half of all inventory counts sit above 45 liters, half below, validating the mean as a true center point.

Common errors

Which NORM.INV error are you seeing?
NORM.INV returned an error#NUM!
Ensure probability is a decimal strictly between 0 and 1 (use 0.9 for the 90th percentile, not 90 or 1.5). Verify standard_dev is positive; recalculate it with STDEV.S or STDEV.P if in doubt.
#VALUE!
Ensure all three arguments are numeric. Remove quotes from percentile values (use 0.9 not '0.9'). If referencing cells, verify they contain numbers, not labels or formatted text.
#NUM!
Verify the standard deviation source contains valid positive values. If calculating STDEV.S from a range, check for data entry errors or missing values that might skew the calculation toward zero.
ErrorWhy it happensHow to fix it
#NUM!Probability argument falls outside the valid range (0, 1), such as =NORM.INV(1.05, 45, 12) or =NORM.INV(-0.05, 45, 12), or when standard_dev is zero or negative.Ensure probability is a decimal strictly between 0 and 1 (use 0.9 for the 90th percentile, not 90 or 1.5). Verify standard_dev is positive; recalculate it with STDEV.S or STDEV.P if in doubt.
#VALUE!One or more arguments is text or a non-numeric value, such as =NORM.INV('0.9', 45, 12) or =NORM.INV(0.9, 'avg', 12) or a cell containing descriptive text instead of a number.Ensure all three arguments are numeric. Remove quotes from percentile values (use 0.9 not '0.9'). If referencing cells, verify they contain numbers, not labels or formatted text.
#NUM!Standard deviation is zero (=NORM.INV(0.9, 45, 0)), negative (=NORM.INV(0.9, 45, -12)), or calculated by a formula that returns zero or negative due to data issues.Verify the standard deviation source contains valid positive values. If calculating STDEV.S from a range, check for data entry errors or missing values that might skew the calculation toward zero.

Tips and when to use something else

  • Use NORM.INV when you know a probability percentile and need the inventory value; use NORM.DIST (the inverse operation) when you have the value and need its cumulative probability. They solve opposite problems.
  • NORM.INV assumes your inventory follows a bell curve; if supply disruptions or seasonal swings cause non-normal patterns, use PERCENTILE on actual historical data instead for more realistic reorder points.
  • For a quick sanity check, NORM.INV(0.5, mean, stdev) always returns the mean—if it doesn't, your input data has an error.
  • Build a dynamic reorder rule: =NORM.INV(0.85, AVERAGE(qty_history), STDEV.S(qty_history)) auto-adjusts safety stock as inventory history grows, requiring no manual tweaking.

Frequently asked questions

What's the difference between NORM.INV and PERCENTILE?
NORM.INV assumes your data follows a perfect bell curve (normal distribution) and calculates the value at a percentile based on mean and standard deviation alone—useful for modeling or when you lack raw historical data. PERCENTILE looks at your actual inventory counts and finds the exact percentile value without any distribution assumptions. Use PERCENTILE for real data; use NORM.INV for theoretical models or when distribution shape is known.
Why does NORM.INV give an error when I use probability like 90 or 95 instead of 0.9 and 0.95?
NORM.INV expects probability as a decimal (0.0 to 1.0), not as a percentage. The decimal 0.9 means the 90th percentile, while the number 90 is outside the valid range and triggers #NUM!. Always convert: divide your percentile by 100 (90÷100 = 0.9) or enter it as a decimal (0.9, 0.95, 0.5).
Can NORM.INV handle negative means or negative standard deviations?
A negative mean is perfectly valid—for example, =NORM.INV(0.5, -10, 5) works fine and returns –10. However, standard deviation must always be positive because it represents the spread or width of the distribution. Negative or zero standard deviation values return #NUM! error; the curve cannot have negative width.
How do I use NORM.INV to set up automatic safety stock alerts?
Create a formula that calculates the 85th or 90th percentile dynamically: =NORM.INV(0.85, AVERAGE(B2:B100), STDEV.S(B2:B100)). As you add new inventory counts to column B, the reorder threshold automatically adjusts. When actual quantity drops below this result, it's time to place a new order. This method adapts to changing supply patterns without manual updates.

Need a different formula?

The full generator is not scoped to one function — describe any spreadsheet problem and it will pick.

Open the formula generator

Reviewed 2026-09-17