T.TEST
Quirk foundCategory: Statistical · Last tested 2026-09-01
Real compatibility results for the T.TEST function: executed in Excel for the web, Google Sheets and LibreOffice Calc, with desktop Excel behavior from Microsoft’s official documentation (we do not run desktop Excel — Excel for the web is a different application and is executed separately). Syntax and links to that documentation are below.
Support matrix
| Engine | Documented | Live-tested | Verdict |
|---|---|---|---|
| Excel (desktop) | Yes | No — documented only | n/a |
| Excel for the web | — | Yes (recalc, 2026-09-01) | Supported, behaves as documented |
| Google Sheets | Yes | Yes (Drive import, 2026-08-31) | Supported, behaves as documented |
| LibreOffice Calc | Yes | Yes (25.8.7.3, 2026-08-31) | Quirk found |
LibreOffice version history
We executed the same test cases under each LibreOffice release to show exactly when T.TEST’s support changed — not documentation claims, real results.
| LibreOffice version | Verdict | Tested |
|---|---|---|
| 24.2.0.3 | Quirk found | 2026-08-31 |
| 24.8.7.2 | Quirk found | 2026-08-31 |
| 25.2.0.3 | Quirk found | 2026-08-31 |
| 25.8.7.3 | Quirk found | 2026-08-31 |
Why isn't T.TEST working in LibreOffice?
T.TEST exists in LibreOffice 25.8.7.3, but it is not a drop-in match for
Excel — our executed tests found real behavioral differences (detailed in the test results on this
page). If a formula that works in Excel or Google Sheets misbehaves in LibreOffice, compare your usage
against the failing cases above before assuming your data is wrong.
Discovered quirks
-
=T.TEST({1,2,3},{1,2},2,1) on
LibreOffice Calc returned
#VALUE!, but the documented/expected
result is #N/A.
Provenance
The Remarks publish: "If array1 and array2 have a different number of data points, and type = 1 (paired), T.TEST returns the #N/A error value." The restriction is specific to the paired type -- types 2 and 3 accept unequal sample sizes -- which is why this case names type 1.; MISMATCH vs expected: expected '#N/A', got '#VALUE!'
-
=T.TEST({1,2,3},{4,5,6},3,1) on
LibreOffice Calc returned
#VALUE!, but the documented/expected
result is #NUM!.
Provenance
The Remarks publish: "If tails is any value other than 1 or 2, T.TEST returns the #NUM! error value."; MISMATCH vs expected: expected '#NUM!', got '#VALUE!'
Executed test cases
Excel for the web (executed 2026-09-01 via OneDrive recalculation)
These values come from Excel for the web, not from desktop Excel. They are two different implementations of the calculation engine, and this run measured only the web one: the corpus was uploaded to OneDrive as .xlsx, recalculated by Excel for the web on open, and downloaded again for readback. Excel for the web is a rolling service with no pinnable version, so the run is identified by its date. Where a value here disagrees with the Expected column — which is Microsoft’s documentation of the desktop product — we cannot tell you whether the web engine diverges from the desktop one or the documentation is wrong about both, because we do not run desktop Excel.
| Formula | Description | Result | Expected | Verdict |
|---|---|---|---|---|
| =ROUND(T.TEST(A2:A10,B2:B10,2,1),6) | Microsoft's documented worked example: a paired, two-tailed test | 0.196016 | 0.196016ProvenanceMicrosoft publishes =T.TEST(A2:A10,B2:B10,2,1) = 0.196016 ("Probability associated with a Student's paired t-Test, with a two-tailed distribution"). DERIVATION (nothing here comes from a statistics package's t-test routine): the paired t-statistic is dbar/(sd/sqrt(n)) over the nine pairwise differences -3,-15,2,6,-5,-3,-3,-13,4, whose mean is -30/9 and whose sample standard deviation uses the n-1 divisor; that gives t = -1.4106912317171967 on 8 degrees of freedom. The p-value is then 2*(1 - F(|t|)) evaluated on this batch's doubly-cross-checked Student t CDF -- the regularized incomplete beta AND an independent numerical quadrature of the t density, agreeing to 25 digits -- giving 0.1960157849252821063357. scipy.stats.ttest_rel reproduces both the statistic and the p-value to double precision as a third check. That is 0.196016 at the published precision. Microsoft's page was read live on 2026-08-31 at https://support.microsoft.com/en-us/excel/functions/t-test-function. FETCH NOTE FOR THIS BATCH: batch F recorded every /en-us/office/<name>-function-<guid> URL returning Microsoft's 'Sorry, the page you're looking for can't be found' body; today BOTH paths serve the article again -- the GUID form redirects to /en-us/excel/functions/<slug>-function -- and every page cited in this batch came back complete (217-223 KB) in one or two attempts, with no 87 KB stub responses. Nothing here is sourced from a search snippet or a mirror. |
Matched |
| =ROUND(T.TEST(A2:A10,B2:B10,2,1),12) | The same example carried to twelve decimals | 0.196015784925 | 0.196015784925ProvenanceAsserted at twelve places from the derivation: 0.196015784925. |
Matched |
| =ROUND(T.TEST(A2:A10,B2:B10,2,1)-2*T.TEST(A2:A10,B2:B10,1,1),15) | The documented relationship between the one- and two-tailed forms | 0 | 0ProvenanceThe page publishes it outright: "The value returned by T.TEST when tails=2 is double that returned when tails=1." A structural assertion with no derived constant. For the record the one-tailed value derives to 0.09800789246264105316783, exactly half the headline figure. |
Matched |
| =ROUND(T.TEST(A2:A10,B2:B10,2,2),12) | The same data as a two-sample equal-variance test, which must give a different answer | 0.19199588676 | 0.19199588676ProvenanceMICROSOFT PUBLISHES ONLY THE type = 1 ROW; this value is entirely ours, derived so that the `type` argument is actually pinned down rather than assumed. Type 2 is documented as "Two-sample equal variance (homoscedastic)": the pooled variance over both samples on n1+n2-2 = 16 degrees of freedom gives t = -1.3622298275610 and a two-tailed p of 0.1919958867603962174402, i.e. 0.19199588676 at twelve places. It sits within 0.005 of the paired figure, which is precisely why a case is needed: an engine that silently ran the wrong type would still look plausible against the published number. |
Matched |
| =ROUND(T.TEST(A2:A10,B2:B10,2,3),12) | The same data as a two-sample unequal-variance (Welch) test | 0.202293923369 | 0.202293923369ProvenanceAlso ours, not Microsoft's. Type 3 is documented as "Two-sample unequal variance (heteroscedastic)", i.e. Welch's test: the same t = -1.3622298275610 as type 2 (the two samples are the same size, so the statistic coincides) but on the Welch-Satterthwaite degrees of freedom 10.255208532, giving 0.2022939233686778922367. THE t STATISTICS BEING EQUAL WHILE THE p VALUES DIFFER IS THE WHOLE CONTENT OF THIS CASE: it isolates the degrees-of-freedom calculation, which is the only thing separating types 2 and 3 on equal-sized samples, and which no published Microsoft figure exercises anywhere. |
Matched |
| =T.TEST({1,2,3},{1,2},2,1) | A paired test whose arrays are different lengths, which the page assigns an error code | #N/A | #N/AProvenanceThe Remarks publish: "If array1 and array2 have a different number of data points, and type = 1 (paired), T.TEST returns the #N/A error value." The restriction is specific to the paired type -- types 2 and 3 accept unequal sample sizes -- which is why this case names type 1. |
Matched |
| =T.TEST({1,2,3},{4,5,6},3,1) | A tails argument of 3, which the page excludes | #NUM! | #NUM!ProvenanceThe Remarks publish: "If tails is any value other than 1 or 2, T.TEST returns the #NUM! error value." |
Matched |
| =T.TEST({1,2,3},{4,5,6},"x",1) | A non-numeric tails argument | #VALUE! | #VALUE!ProvenanceThe Remarks publish: "If tails or type is nonnumeric, T.TEST returns the #VALUE! error value." Note the pair of rules together: a non-numeric tails is #VALUE! while a numeric-but-invalid tails is #NUM!, and this corpus asserts both because engines routinely collapse them into one code. |
Matched |
Google Sheets (executed 2026-08-31 via Drive import)
Google Sheets is a rolling service with no pinnable version, so this run is identified by its date. The corpus was imported to Drive as .xlsx, recalculated by Sheets, and exported back for readback.
| Formula | Description | Result | Expected | Verdict |
|---|---|---|---|---|
| =ROUND(T.TEST(A2:A10,B2:B10,2,1),6) | Microsoft's documented worked example: a paired, two-tailed test | 0.196016 | 0.196016ProvenanceMicrosoft publishes =T.TEST(A2:A10,B2:B10,2,1) = 0.196016 ("Probability associated with a Student's paired t-Test, with a two-tailed distribution"). DERIVATION (nothing here comes from a statistics package's t-test routine): the paired t-statistic is dbar/(sd/sqrt(n)) over the nine pairwise differences -3,-15,2,6,-5,-3,-3,-13,4, whose mean is -30/9 and whose sample standard deviation uses the n-1 divisor; that gives t = -1.4106912317171967 on 8 degrees of freedom. The p-value is then 2*(1 - F(|t|)) evaluated on this batch's doubly-cross-checked Student t CDF -- the regularized incomplete beta AND an independent numerical quadrature of the t density, agreeing to 25 digits -- giving 0.1960157849252821063357. scipy.stats.ttest_rel reproduces both the statistic and the p-value to double precision as a third check. That is 0.196016 at the published precision. Microsoft's page was read live on 2026-08-31 at https://support.microsoft.com/en-us/excel/functions/t-test-function. FETCH NOTE FOR THIS BATCH: batch F recorded every /en-us/office/<name>-function-<guid> URL returning Microsoft's 'Sorry, the page you're looking for can't be found' body; today BOTH paths serve the article again -- the GUID form redirects to /en-us/excel/functions/<slug>-function -- and every page cited in this batch came back complete (217-223 KB) in one or two attempts, with no 87 KB stub responses. Nothing here is sourced from a search snippet or a mirror. |
Matched |
| =ROUND(T.TEST(A2:A10,B2:B10,2,1),12) | The same example carried to twelve decimals | 0.1960157849 | 0.196015784925ProvenanceAsserted at twelve places from the derivation: 0.196015784925. |
Matched |
| =ROUND(T.TEST(A2:A10,B2:B10,2,1)-2*T.TEST(A2:A10,B2:B10,1,1),15) | The documented relationship between the one- and two-tailed forms | 0 | 0ProvenanceThe page publishes it outright: "The value returned by T.TEST when tails=2 is double that returned when tails=1." A structural assertion with no derived constant. For the record the one-tailed value derives to 0.09800789246264105316783, exactly half the headline figure. |
Matched |
| =ROUND(T.TEST(A2:A10,B2:B10,2,2),12) | The same data as a two-sample equal-variance test, which must give a different answer | 0.1919958868 | 0.19199588676ProvenanceMICROSOFT PUBLISHES ONLY THE type = 1 ROW; this value is entirely ours, derived so that the `type` argument is actually pinned down rather than assumed. Type 2 is documented as "Two-sample equal variance (homoscedastic)": the pooled variance over both samples on n1+n2-2 = 16 degrees of freedom gives t = -1.3622298275610 and a two-tailed p of 0.1919958867603962174402, i.e. 0.19199588676 at twelve places. It sits within 0.005 of the paired figure, which is precisely why a case is needed: an engine that silently ran the wrong type would still look plausible against the published number. |
Matched |
| =ROUND(T.TEST(A2:A10,B2:B10,2,3),12) | The same data as a two-sample unequal-variance (Welch) test | 0.2022939234 | 0.202293923369ProvenanceAlso ours, not Microsoft's. Type 3 is documented as "Two-sample unequal variance (heteroscedastic)", i.e. Welch's test: the same t = -1.3622298275610 as type 2 (the two samples are the same size, so the statistic coincides) but on the Welch-Satterthwaite degrees of freedom 10.255208532, giving 0.2022939233686778922367. THE t STATISTICS BEING EQUAL WHILE THE p VALUES DIFFER IS THE WHOLE CONTENT OF THIS CASE: it isolates the degrees-of-freedom calculation, which is the only thing separating types 2 and 3 on equal-sized samples, and which no published Microsoft figure exercises anywhere. |
Matched |
| =T.TEST({1,2,3},{1,2},2,1) | A paired test whose arrays are different lengths, which the page assigns an error code | #N/A | #N/AProvenanceThe Remarks publish: "If array1 and array2 have a different number of data points, and type = 1 (paired), T.TEST returns the #N/A error value." The restriction is specific to the paired type -- types 2 and 3 accept unequal sample sizes -- which is why this case names type 1. |
Matched |
| =T.TEST({1,2,3},{4,5,6},3,1) | A tails argument of 3, which the page excludes | #NUM! | #NUM!ProvenanceThe Remarks publish: "If tails is any value other than 1 or 2, T.TEST returns the #NUM! error value." |
Matched |
| =T.TEST({1,2,3},{4,5,6},"x",1) | A non-numeric tails argument | #VALUE! | #VALUE!ProvenanceThe Remarks publish: "If tails or type is nonnumeric, T.TEST returns the #VALUE! error value." Note the pair of rules together: a non-numeric tails is #VALUE! while a numeric-but-invalid tails is #NUM!, and this corpus asserts both because engines routinely collapse them into one code. |
Matched |
LibreOffice Calc 25.8.7.3 (tested 2026-08-31)
| Formula | Description | Result | Expected | Verdict |
|---|---|---|---|---|
| =ROUND(T.TEST(A2:A10,B2:B10,2,1),6) | Microsoft's documented worked example: a paired, two-tailed test | 0.196016 | 0.196016ProvenanceMicrosoft publishes =T.TEST(A2:A10,B2:B10,2,1) = 0.196016 ("Probability associated with a Student's paired t-Test, with a two-tailed distribution"). DERIVATION (nothing here comes from a statistics package's t-test routine): the paired t-statistic is dbar/(sd/sqrt(n)) over the nine pairwise differences -3,-15,2,6,-5,-3,-3,-13,4, whose mean is -30/9 and whose sample standard deviation uses the n-1 divisor; that gives t = -1.4106912317171967 on 8 degrees of freedom. The p-value is then 2*(1 - F(|t|)) evaluated on this batch's doubly-cross-checked Student t CDF -- the regularized incomplete beta AND an independent numerical quadrature of the t density, agreeing to 25 digits -- giving 0.1960157849252821063357. scipy.stats.ttest_rel reproduces both the statistic and the p-value to double precision as a third check. That is 0.196016 at the published precision. Microsoft's page was read live on 2026-08-31 at https://support.microsoft.com/en-us/excel/functions/t-test-function. FETCH NOTE FOR THIS BATCH: batch F recorded every /en-us/office/<name>-function-<guid> URL returning Microsoft's 'Sorry, the page you're looking for can't be found' body; today BOTH paths serve the article again -- the GUID form redirects to /en-us/excel/functions/<slug>-function -- and every page cited in this batch came back complete (217-223 KB) in one or two attempts, with no 87 KB stub responses. Nothing here is sourced from a search snippet or a mirror. |
Matched |
| =ROUND(T.TEST(A2:A10,B2:B10,2,1),12) | The same example carried to twelve decimals | 0.196015784925 | 0.196015784925ProvenanceAsserted at twelve places from the derivation: 0.196015784925. |
Matched |
| =ROUND(T.TEST(A2:A10,B2:B10,2,1)-2*T.TEST(A2:A10,B2:B10,1,1),15) | The documented relationship between the one- and two-tailed forms | 0 | 0ProvenanceThe page publishes it outright: "The value returned by T.TEST when tails=2 is double that returned when tails=1." A structural assertion with no derived constant. For the record the one-tailed value derives to 0.09800789246264105316783, exactly half the headline figure. |
Matched |
| =ROUND(T.TEST(A2:A10,B2:B10,2,2),12) | The same data as a two-sample equal-variance test, which must give a different answer | 0.19199588676 | 0.19199588676ProvenanceMICROSOFT PUBLISHES ONLY THE type = 1 ROW; this value is entirely ours, derived so that the `type` argument is actually pinned down rather than assumed. Type 2 is documented as "Two-sample equal variance (homoscedastic)": the pooled variance over both samples on n1+n2-2 = 16 degrees of freedom gives t = -1.3622298275610 and a two-tailed p of 0.1919958867603962174402, i.e. 0.19199588676 at twelve places. It sits within 0.005 of the paired figure, which is precisely why a case is needed: an engine that silently ran the wrong type would still look plausible against the published number. |
Matched |
| =ROUND(T.TEST(A2:A10,B2:B10,2,3),12) | The same data as a two-sample unequal-variance (Welch) test | 0.202293923369 | 0.202293923369ProvenanceAlso ours, not Microsoft's. Type 3 is documented as "Two-sample unequal variance (heteroscedastic)", i.e. Welch's test: the same t = -1.3622298275610 as type 2 (the two samples are the same size, so the statistic coincides) but on the Welch-Satterthwaite degrees of freedom 10.255208532, giving 0.2022939233686778922367. THE t STATISTICS BEING EQUAL WHILE THE p VALUES DIFFER IS THE WHOLE CONTENT OF THIS CASE: it isolates the degrees-of-freedom calculation, which is the only thing separating types 2 and 3 on equal-sized samples, and which no published Microsoft figure exercises anywhere. |
Matched |
| =T.TEST({1,2,3},{1,2},2,1) | A paired test whose arrays are different lengths, which the page assigns an error code | #VALUE! | #N/AProvenanceThe Remarks publish: "If array1 and array2 have a different number of data points, and type = 1 (paired), T.TEST returns the #N/A error value." The restriction is specific to the paired type -- types 2 and 3 accept unequal sample sizes -- which is why this case names type 1. |
Mismatch |
| =T.TEST({1,2,3},{4,5,6},3,1) | A tails argument of 3, which the page excludes | #VALUE! | #NUM!ProvenanceThe Remarks publish: "If tails is any value other than 1 or 2, T.TEST returns the #NUM! error value." |
Mismatch |
| =T.TEST({1,2,3},{4,5,6},"x",1) | A non-numeric tails argument | #VALUE! | #VALUE!ProvenanceThe Remarks publish: "If tails or type is nonnumeric, T.TEST returns the #VALUE! error value." Note the pair of rules together: a non-numeric tails is #VALUE! while a numeric-but-invalid tails is #NUM!, and this corpus asserts both because engines routinely collapse them into one code. |
Matched |
Docs & syntax
- Excel (desktop): official documentation
- Google Sheets: official documentation
- LibreOffice Calc: official documentation
Where T.TEST behaves differently
- Every error code LibreOffice reports as #VALUE!
Across our 2,334-case executed corpus, 272 cases in 135 functions return #VALUE! in LibreOffice Calc 25.8.7.3 where Microsoft documents #NUM! (244), #N/A (15), #DIV/0! (10) or #REF! (3). Google Sheets returns the documented code on 239 of the 249 it has a function for. Identical in all four LibreOffice builds tested.