NORM.DIST function

PRO

The NORM.DIST function in Jspreadsheet Formulas Pro returns the normal distribution for a value, given the mean and the standard deviation. It is the most used distribution in statistics and the basis of any analysis built on the bell curve. With cumulative TRUE it returns the probability that a value is less than or equal to x; with FALSE it returns the height of the curve at x. It returns the same values as the compatibility function NORMDIST.

Documentation

Returns the normal distribution for the specified mean and standard deviation.

Category

Statistical

Syntax

NORM.DIST(x, mean, standard_dev, cumulative)

Parameter Description
x The value at which to evaluate the distribution.
mean The arithmetic mean of the distribution.
standard_dev The standard deviation of the distribution. Should be greater than 0.
cumulative TRUE returns the cumulative distribution function. FALSE returns the probability density function.

Behavior

The NORM.DIST function standardizes x with (x - mean) / standard_dev and evaluates the standard normal density or cumulative probability.

  • cumulative also accepts numbers: 0 is treated as FALSE and any other number as TRUE.
  • standard_dev is not validated. A standard deviation of 0 returns 1 for the cumulative form and a negative value is used as given, whereas Excel returns #NUM! in both cases. Guard the argument with IF when it may not be positive.
  • The cumulative probability is 0.5 when x equals mean.
  • Text arguments return #VALUE!.

Common Errors

Error Description
#VALUE! Returned when an argument is text that cannot be interpreted as a number.

Best practices

  • Check standard_dev before calling, for example IF(C2>0, NORM.DIST(A2, B2, C2, TRUE), NA()), since the function does not reject zero or negative values.
  • Pass cumulative explicitly as TRUE or FALSE so the intent is clear when reading the formula.
  • Use absolute references for the mean and standard_dev cells when copying the formula down a column of x values, for example $B$1.
  • Check with ISNUMBER that the input cells hold numbers, because text returns #VALUE!.

Usage

A few examples using the NORM.DIST function.

NORM.DIST(1.96, 0, 1, FALSE)
// Returns 0.058441, the density at 1.96

NORM.DIST(-2, 10, 3.5, TRUE)
// Returns 0.000303

NORM.DIST(60, 70, 10, TRUE)
// Returns 0.158655, the probability of a value at most one standard deviation below the mean

NORM.DIST(1, 0, 1, 1)
// Returns 0.841345, a numeric cumulative flag is accepted

Interactive Spreadsheet Demo

<html>
<script src="https://jsuites.net/v6/jsuites.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jspreadsheet@13/dist/index.min.js"></script>
<link rel="stylesheet" href="https://jsuites.net/v6/jsuites.css" type="text/css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet@13/dist/jspreadsheet.min.css" type="text/css" />

<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Material+Icons" />
<script src="https://cdn.jsdelivr.net/npm/@jspreadsheet/formula-pro/dist/index.min.js"></script>

<div id="spreadsheet"></div>

<script>
// You can use the following license for quick testing on localhost, StackBlitz, or CodeSandbox.
// The license is valid for one day, after which the spreadsheet will become read-only.
// For a longer trial period, you can create a free account and generate a demo license with an extended expiration date.
jspreadsheet.setLicense('ZDM3MWEzZjdhYmIxNzk4NjJhOTQzYjVmODYxMWI2MGI2MjEyNmMwNWYxYzBkMDI1NWM4ZDI2MDc0ZTFmZjlhYWFjOWNjZDgyNzJkYjY2ODQ3NjlhMzY2Yzk2ZmIxNzRlY2JkOGQ4NjI4MTM1MjBlN2Q2Yzk3NTQzOGUyMDEzMGUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpreE1ESTRNelF5TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW5ZeE15SXNJbU5vWVhKMGN5SXNJbVp2Y20xeklpd2labTl5YlhWc1lTSXNJbkJoY25ObGNpSXNJbkpsYm1SbGNpSXNJbU52YlcxbGJuUnpJaXdpYVcxd2IzSjBaWElpTENKaVlYSWlMQ0oyWVd4cFpHRjBhVzl1Y3lJc0luTmxZWEpqYUNJc0luQnlhVzUwSWl3aWMyaGxaWFJ6SWl3aVkyeHBaVzUwSWl3aWMyVnlkbVZ5SWl3aWMyaGhjR1Z6SWl3aVptOXliV0YwSWl3aWNHbDJiM1FpWFN3aVpHVnRieUk2ZEhKMVpYMD0=');

// Set the extensions
jspreadsheet.setExtensions({ formula });

// Create a new spreadsheet
jspreadsheet(document.getElementById('spreadsheet'), {
  worksheets: [{
    data: [
    [
        "x",
        "mean",
        "standard_dev",
        "cumulative",
        "NORM.DIST"
    ],
    [
        60,
        70,
        10,
        true,
        "=NORM.DIST(A2, B2, C2, D2)"
    ],
    [
        70,
        70,
        10,
        true,
        "=NORM.DIST(A3, B3, C3, D3)"
    ],
    [
        80,
        70,
        10,
        true,
        "=NORM.DIST(A4, B4, C4, D4)"
    ],
    [
        1.96,
        0,
        1,
        false,
        "=NORM.DIST(A5, B5, C5, D5)"
    ]
]
  }]
});
</script>
</html>
import React, { useRef } from "react";
import { Spreadsheet, Worksheet, jspreadsheet } from "@jspreadsheet/react";
import formula from "@jspreadsheet/formula-pro";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";

// Set license
jspreadsheet.setLicense('ZDM3MWEzZjdhYmIxNzk4NjJhOTQzYjVmODYxMWI2MGI2MjEyNmMwNWYxYzBkMDI1NWM4ZDI2MDc0ZTFmZjlhYWFjOWNjZDgyNzJkYjY2ODQ3NjlhMzY2Yzk2ZmIxNzRlY2JkOGQ4NjI4MTM1MjBlN2Q2Yzk3NTQzOGUyMDEzMGUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpreE1ESTRNelF5TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW5ZeE15SXNJbU5vWVhKMGN5SXNJbVp2Y20xeklpd2labTl5YlhWc1lTSXNJbkJoY25ObGNpSXNJbkpsYm1SbGNpSXNJbU52YlcxbGJuUnpJaXdpYVcxd2IzSjBaWElpTENKaVlYSWlMQ0oyWVd4cFpHRjBhVzl1Y3lJc0luTmxZWEpqYUNJc0luQnlhVzUwSWl3aWMyaGxaWFJ6SWl3aVkyeHBaVzUwSWl3aWMyVnlkbVZ5SWl3aWMyaGhjR1Z6SWl3aVptOXliV0YwSWl3aWNHbDJiM1FpWFN3aVpHVnRieUk2ZEhKMVpYMD0=');

// Set the extensions
jspreadsheet.setExtensions({ formula });

export default function App() {
    // Spreadsheet array of worksheets
    const spreadsheet = useRef();

    // Worksheet data
    const data = [
    [
        "x",
        "mean",
        "standard_dev",
        "cumulative",
        "NORM.DIST"
    ],
    [
        60,
        70,
        10,
        true,
        "=NORM.DIST(A2, B2, C2, D2)"
    ],
    [
        70,
        70,
        10,
        true,
        "=NORM.DIST(A3, B3, C3, D3)"
    ],
    [
        80,
        70,
        10,
        true,
        "=NORM.DIST(A4, B4, C4, D4)"
    ],
    [
        1.96,
        0,
        1,
        false,
        "=NORM.DIST(A5, B5, C5, D5)"
    ]
];

    // Render component
    return (
        <Spreadsheet ref={spreadsheet}>
            <Worksheet data={data} />
        </Spreadsheet>
    );
}
<template>
    <Spreadsheet ref="spreadsheet">
        <Worksheet :data="data" />
    </Spreadsheet>
</template>

<script>
import { Spreadsheet, Worksheet, jspreadsheet } from "@jspreadsheet/vue";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
import formula from "@jspreadsheet/formula-pro";

// Set license
jspreadsheet.setLicense('ZDM3MWEzZjdhYmIxNzk4NjJhOTQzYjVmODYxMWI2MGI2MjEyNmMwNWYxYzBkMDI1NWM4ZDI2MDc0ZTFmZjlhYWFjOWNjZDgyNzJkYjY2ODQ3NjlhMzY2Yzk2ZmIxNzRlY2JkOGQ4NjI4MTM1MjBlN2Q2Yzk3NTQzOGUyMDEzMGUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpreE1ESTRNelF5TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW5ZeE15SXNJbU5vWVhKMGN5SXNJbVp2Y20xeklpd2labTl5YlhWc1lTSXNJbkJoY25ObGNpSXNJbkpsYm1SbGNpSXNJbU52YlcxbGJuUnpJaXdpYVcxd2IzSjBaWElpTENKaVlYSWlMQ0oyWVd4cFpHRjBhVzl1Y3lJc0luTmxZWEpqYUNJc0luQnlhVzUwSWl3aWMyaGxaWFJ6SWl3aVkyeHBaVzUwSWl3aWMyVnlkbVZ5SWl3aWMyaGhjR1Z6SWl3aVptOXliV0YwSWl3aWNHbDJiM1FpWFN3aVpHVnRieUk2ZEhKMVpYMD0=');

// Set the extensions
jspreadsheet.setExtensions({ formula });

export default {
    components: {
        Spreadsheet,
        Worksheet,
    },
    data() {
        // Worksheet data
        const data = [
    [
        "x",
        "mean",
        "standard_dev",
        "cumulative",
        "NORM.DIST"
    ],
    [
        60,
        70,
        10,
        true,
        "=NORM.DIST(A2, B2, C2, D2)"
    ],
    [
        70,
        70,
        10,
        true,
        "=NORM.DIST(A3, B3, C3, D3)"
    ],
    [
        80,
        70,
        10,
        true,
        "=NORM.DIST(A4, B4, C4, D4)"
    ],
    [
        1.96,
        0,
        1,
        false,
        "=NORM.DIST(A5, B5, C5, D5)"
    ]
]

        return {
            data
        };
    }
}
</script>
import { Component, ViewChild, ElementRef } from "@angular/core";
import jspreadsheet from "jspreadsheet";
import formula from "@jspreadsheet/formula-pro";

// You can use the following license for quick testing on localhost, StackBlitz, or CodeSandbox.
// The license is valid for one day, after which the spreadsheet will become read-only.
// For a longer trial period, you can create a free account and generate a demo license with an extended expiration date.
jspreadsheet.setLicense('ZDM3MWEzZjdhYmIxNzk4NjJhOTQzYjVmODYxMWI2MGI2MjEyNmMwNWYxYzBkMDI1NWM4ZDI2MDc0ZTFmZjlhYWFjOWNjZDgyNzJkYjY2ODQ3NjlhMzY2Yzk2ZmIxNzRlY2JkOGQ4NjI4MTM1MjBlN2Q2Yzk3NTQzOGUyMDEzMGUsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpreE1ESTRNelF5TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW5ZeE15SXNJbU5vWVhKMGN5SXNJbVp2Y20xeklpd2labTl5YlhWc1lTSXNJbkJoY25ObGNpSXNJbkpsYm1SbGNpSXNJbU52YlcxbGJuUnpJaXdpYVcxd2IzSjBaWElpTENKaVlYSWlMQ0oyWVd4cFpHRjBhVzl1Y3lJc0luTmxZWEpqYUNJc0luQnlhVzUwSWl3aWMyaGxaWFJ6SWl3aVkyeHBaVzUwSWl3aWMyVnlkbVZ5SWl3aWMyaGhjR1Z6SWl3aVptOXliV0YwSWl3aWNHbDJiM1FpWFN3aVpHVnRieUk2ZEhKMVpYMD0=');

// Set the extensions
jspreadsheet.setExtensions({ formula });

@Component({
    standalone: true,
    selector: "app-root",
    template: `<div #spreadsheet></div>`
})
export class AppComponent {
    @ViewChild("spreadsheet") spreadsheet: ElementRef;
    // Worksheets
    worksheets: jspreadsheet.worksheetInstance[];

    // Create a new data grid
    ngAfterViewInit() {
        // Create spreadsheet
        this.worksheets = jspreadsheet(this.spreadsheet.nativeElement, {
            worksheets: [{
                data: [
    [
        "x",
        "mean",
        "standard_dev",
        "cumulative",
        "NORM.DIST"
    ],
    [
        60,
        70,
        10,
        true,
        "=NORM.DIST(A2, B2, C2, D2)"
    ],
    [
        70,
        70,
        10,
        true,
        "=NORM.DIST(A3, B3, C3, D3)"
    ],
    [
        80,
        70,
        10,
        true,
        "=NORM.DIST(A4, B4, C4, D4)"
    ],
    [
        1.96,
        0,
        1,
        false,
        "=NORM.DIST(A5, B5, C5, D5)"
    ]
]
            }]
        });
    }
}