NORM.DIST Function in Google Sheets: Complete Guide
The normal distribution appears everywhere in real-world data. Test scores, manufacturing tolerances, stock returns, human heights—when you measure enough of almost anything, you get that familiar...
Key Insights
- NORM.DIST calculates probabilities for normal distributions directly in Google Sheets, with the cumulative parameter determining whether you get probability density (FALSE) or cumulative probability (TRUE)
- The cumulative distribution function (CDF) is what you’ll use 90% of the time—it answers practical questions like “what percentage falls below this threshold?”
- Combining NORM.DIST with NORM.INV enables powerful two-way lookups between values and probabilities, essential for percentile calculations and setting data-driven thresholds
Introduction to NORM.DIST
The normal distribution appears everywhere in real-world data. Test scores, manufacturing tolerances, stock returns, human heights—when you measure enough of almost anything, you get that familiar bell curve. Google Sheets gives you NORM.DIST to work with these distributions directly, without needing statistical software or manual calculations.
NORM.DIST answers two fundamental questions about your normally distributed data: “How likely is this specific value?” and “What percentage of values fall below this threshold?” These questions drive practical decisions in quality control (are we producing within spec?), financial modeling (what’s our risk exposure?), and education (where does this student rank?).
If you’ve been exporting data to R or Python just to calculate normal probabilities, stop. NORM.DIST handles these calculations natively, and understanding it will make your spreadsheet analysis significantly more powerful.
Syntax and Parameters
The function signature is straightforward:
=NORM.DIST(x, mean, standard_deviation, cumulative)
Let’s break down each parameter:
x — The value you’re evaluating. This is the specific data point you want to know about.
mean — The average of your distribution. This is the center of your bell curve.
standard_deviation — How spread out your data is. Larger values create wider, flatter curves. Must be positive.
cumulative — A boolean (TRUE/FALSE) that changes what the function returns entirely. This is where people get confused, so pay attention.
Here’s the critical distinction:
=NORM.DIST(75, 70, 10, FALSE) // Returns: 0.03521 (PDF - probability density)
=NORM.DIST(75, 70, 10, TRUE) // Returns: 0.6915 (CDF - cumulative probability)
With cumulative=FALSE, you get the probability density function (PDF)—the height of the bell curve at that point. With cumulative=TRUE, you get the cumulative distribution function (CDF)—the probability that a random value falls at or below x.
The PDF value (0.03521) isn’t directly interpretable as a probability. The CDF value (0.6915) means 69.15% of values fall below 75. The CDF is what you want for most practical applications.
Calculating Probability Density (PDF)
When you set cumulative=FALSE, NORM.DIST returns the probability density at point x. This represents the relative likelihood of values occurring near that point.
=NORM.DIST(75, 70, 10, FALSE)
// Result: 0.0352065
This tells you the height of the bell curve when x=75, given a mean of 70 and standard deviation of 10. The PDF is useful for:
- Comparing relative likelihoods: A score of 70 has PDF ≈ 0.0399, while 85 has PDF ≈ 0.0130. Values near the mean are about 3x more likely than values 1.5 standard deviations away.
- Building visualizations: PDF values create the actual bell curve shape when plotted.
- Theoretical analysis: Understanding the distribution’s shape and behavior.
// Comparing PDF values at different points
=NORM.DIST(70, 70, 10, FALSE) // 0.0399 - at the mean (highest point)
=NORM.DIST(80, 70, 10, FALSE) // 0.0242 - one SD above mean
=NORM.DIST(90, 70, 10, FALSE) // 0.0054 - two SDs above mean
Remember: PDF values aren’t probabilities themselves. You can’t say “there’s a 3.52% chance of getting exactly 75.” Continuous distributions assign zero probability to exact values—only ranges have meaningful probabilities.
Calculating Cumulative Probability (CDF)
The CDF with cumulative=TRUE is your workhorse. It returns the probability that a randomly selected value is less than or equal to x.
=NORM.DIST(85, 70, 10, TRUE)
// Result: 0.9332
This means 93.32% of values fall at or below 85. For a test with mean 70 and standard deviation 10, a student scoring 85 outperforms about 93% of the population.
Common CDF applications:
// What percentage scores below 60?
=NORM.DIST(60, 70, 10, TRUE)
// Result: 0.1587 (about 16%)
// What percentage scores above 80?
=1 - NORM.DIST(80, 70, 10, TRUE)
// Result: 0.1587 (about 16%)
// What percentage scores between 65 and 75?
=NORM.DIST(75, 70, 10, TRUE) - NORM.DIST(65, 70, 10, TRUE)
// Result: 0.3829 (about 38%)
The subtraction pattern for “between” calculations is essential. Since the CDF gives you “everything below x,” subtracting two CDF values gives you “everything between.”
Practical Applications with Examples
Quality Control: Defect Rate Estimation
A manufacturing process produces widgets with mean diameter 50mm and standard deviation 0.5mm. Specifications require 49mm to 51mm. What’s the defect rate?
// Probability within spec (49 to 51mm)
=NORM.DIST(51, 50, 0.5, TRUE) - NORM.DIST(49, 50, 0.5, TRUE)
// Result: 0.9545 (95.45% within spec)
// Defect rate
=1 - (NORM.DIST(51, 50, 0.5, TRUE) - NORM.DIST(49, 50, 0.5, TRUE))
// Result: 0.0455 (4.55% defect rate)
Financial Risk: Value at Risk (VaR)
A portfolio has mean daily return of 0.1% with standard deviation 2%. What’s the 5th percentile return (95% VaR)?
// Using NORM.INV for reverse lookup
=NORM.INV(0.05, 0.001, 0.02)
// Result: -0.0319 (-3.19% daily loss at 95% confidence)
// Verify with NORM.DIST
=NORM.DIST(-0.0319, 0.001, 0.02, TRUE)
// Result: 0.05 (confirms 5th percentile)
Grading Curves: Setting Cutoffs
You want the top 10% of students to receive an A. With mean 72 and standard deviation 12, what’s the cutoff?
// Find the 90th percentile
=NORM.INV(0.90, 72, 12)
// Result: 87.4
// Verify: what percentage scores below 87.4?
=NORM.DIST(87.4, 72, 12, TRUE)
// Result: 0.90 (90% below, 10% above)
Combining NORM.DIST and NORM.INV
These functions are inverses. NORM.DIST takes a value and returns probability; NORM.INV takes a probability and returns the value.
// Start with a value, get probability
=NORM.DIST(80, 70, 10, TRUE) // Returns 0.8413
// Reverse: start with probability, get value
=NORM.INV(0.8413, 70, 10) // Returns 80
This pairing enables percentile calculations, threshold setting, and bidirectional analysis.
Visualizing Normal Distribution
Creating a bell curve chart requires generating PDF values across a range. Here’s a complete setup:
Step 1: Create x-values spanning your distribution
In column A, create values from (mean - 4×SD) to (mean + 4×SD):
// In A1: Starting value
=70 - 4*10 // Result: 30
// In A2 and drag down to A81:
=A1 + 0.5 // Creates values from 30 to 70 in 0.5 increments
Step 2: Calculate PDF values
// In B1 (assuming mean in D1, stdev in D2):
=NORM.DIST(A1, $D$1, $D$2, FALSE)
// Or use ARRAYFORMULA for the entire range:
=ARRAYFORMULA(NORM.DIST(A1:A81, D1, D2, FALSE))
Step 3: Create the chart
Select columns A and B, insert a Smooth Line Chart. You’ll get the classic bell curve shape.
For comparing distributions with different parameters:
// Column B: Original distribution (mean=70, SD=10)
=ARRAYFORMULA(NORM.DIST(A1:A81, 70, 10, FALSE))
// Column C: Higher mean (mean=75, SD=10)
=ARRAYFORMULA(NORM.DIST(A1:A81, 75, 10, FALSE))
// Column D: Wider spread (mean=70, SD=15)
=ARRAYFORMULA(NORM.DIST(A1:A81, 70, 15, FALSE))
Common Errors and Troubleshooting
Negative Standard Deviation Error
=NORM.DIST(75, 70, -10, TRUE)
// Error: #NUM!
Standard deviation must be positive. If you’re referencing a cell that might contain negative values, wrap it:
=NORM.DIST(75, 70, ABS(A1), TRUE)
Confusing PDF and CDF
The most common mistake is using cumulative=FALSE when you want actual probabilities.
// Wrong: "What's the probability of scoring below 80?"
=NORM.DIST(80, 70, 10, FALSE) // Returns 0.0242 (PDF, not probability!)
// Correct:
=NORM.DIST(80, 70, 10, TRUE) // Returns 0.8413 (84.13% probability)
Legacy Function Confusion
Google Sheets supports multiple normal distribution functions:
- NORM.DIST: Current standard, use this
- NORMDIST: Legacy version, identical functionality
- NORM.S.DIST: Standard normal only (mean=0, SD=1)
// These are equivalent:
=NORM.DIST(1, 0, 1, TRUE) // 0.8413
=NORM.S.DIST(1, TRUE) // 0.8413
=NORMDIST(1, 0, 1, TRUE) // 0.8413
Use NORM.DIST for consistency. Use NORM.S.DIST only when working explicitly with z-scores.
Precision Limitations
For extreme values (many standard deviations from mean), NORM.DIST may return 0 or 1 due to floating-point limitations:
=NORM.DIST(120, 70, 10, TRUE) // Returns 1 (actually 0.99999999...)
=NORM.DIST(20, 70, 10, TRUE) // Returns 3.17E-07 (very small, but not zero)
For most practical applications, this precision is sufficient. If you need extreme tail probabilities, consider specialized statistical software.
NORM.DIST is one of those functions that seems simple but enables sophisticated analysis. Master the CDF for probability calculations, understand when PDF matters for visualization, and pair it with NORM.INV for complete analytical flexibility. Your spreadsheet just became a capable statistical tool.