TBILLPRICE(settlement,maturity,discount) returns a Treasury bill price per 100 face value using an annual discount rate and an actual-day, 360-day denominator.
Try it
=TBILLPRICE(DATE(2027,1,1),DATE(2027,1,31),0.06) returns about 99.5. Thirty days at a six-percent annual discount remove 100*0.06*30/360=0.5 from par.
Quirks
Date values are truncated. Invalid dates give #VALUE!; a nonpositive discount or an invalid/too-long settlement-to-maturity interval gives #NUM!. There is no optional basis argument.
The one-year limit follows calendar rollover, rather than a fixed 365-day cap or an end-of-month clamp. The cited build-20430 controls admit settlement 29 February 2044 with maturity 1 March 2045, but reject settlement 28 February 1991 with maturity 29 February 1992. The first limit is the result of DATE(2045,2,29), which rolls into March.
The current helper rejects equal settlement and maturity, and also rejects a calculated price at or below zero. The opened Microsoft remarks explicitly mention settlement later than maturity and nonpositive discount; they do not spell out those two additional guards. A positive discount alone does not ensure a positive price.
An empty cell as a first date is serial 0, but a logical in that cell is #VALUE!
A reference to an empty cell as the first date of these functions reads as serial 0 and gives a normal answer: NETWORKDAYS(B1,5) is 4 and WORKDAY(B1,2) is 3. YEARFRAC(B1,5,0) is 5/360. TRUE in the same cell gives #VALUE!, as a direct TRUE does, so a blank is not treated as the logical FALSE either.
Formula
Excel
Mathematical value
=NETWORKDAYS(B1,5) Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZAInputs and reference value
Number supplied through a cell.
B1: (empty cell)
4 0x4010000000000000
—
=NETWORKDAYS(B1,5) Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZAInputs and reference value
Number supplied through a cell.
B1: TRUE
#VALUE!
—
=WORKDAY(B1,2) Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZAInputs and reference value
Number supplied through a cell.
B1: (empty cell)
3 0x4008000000000000
—
=WORKDAY(B1,2) Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZAInputs and reference value
Number supplied through a cell.
B1: TRUE
#VALUE!
—
=NETWORKDAYS.INTL(B1,5,1) Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZAInputs and reference value
Number supplied through a cell.
B1: (empty cell)
4 0x4010000000000000
—
=WORKDAY.INTL(B1,2,1) Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZAInputs and reference value
Number supplied through a cell.
B1: (empty cell)
3 0x4008000000000000
—
=YEARFRAC(B1,5,0) Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZAInputs and reference value
Number supplied through a cell.
B1: (empty cell)
0.013888888888888888 0x3f8c71c71c71c71c
—
=TBILLEQ(B1,5,0.1) Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZAInputs and reference value
Coerce the date arguments through the workbook’s date system and truncate their serial values. Validate the discount as finite and positive. Keep the date coercion layer separate: the notes below record a blank reference reading as serial zero, while a logical reference gives #VALUE!.
Require settlement before maturity. Convert settlement to year, month and day; construct the next-year date with Excel’s day rollover. Reject maturity beyond that serial date. In the current helper this uses the 1900 date-system conversion functions, including their treatment of Excel’s fictitious leap day.
Let days=maturity-settlement. These are actual serial days, without a 30/360 adjustment.
With D meaning one nearest/even binary64 rounding, calculate product=D(discount*days), fraction=D(product/360), remaining=D(1-fraction), then price=D(100*remaining). Keep these separate stores and disable contraction into fused operations.
Return #NUM! for a nonpositive calculated price; otherwise pass the result through the worksheet’s numeric publisher.
For the thirty-day example, the mathematical discount fraction is 0.06*30/360=0.005, so the price is 100*(1-0.005)=99.5. A discount of twelve over thirty days instead consumes the full face value and reaches the nonpositive-price guard.
This is the current code’s ordinary binary64 graph. The security functions beside it use other stored arithmetic sites, and PRICEDISC subtracts a redemption discount using a different association. An algebraically identical formula does not settle their last bits.
Rust code
Show the CalcFunc source of this function
Quoted from the public repository DnaCalc/DnaCalc, crates calc-func and calc-fml, at commit 9e1884369a67. Comments are the source's own. A kernel shared with other functions appears once, on its module page.
No implementation has been published with a Handbook test suite for this function.
Version differences
The recorded environments below distinguish a reading from a same-input comparison. Counts describe captured inputs in each environment; overlapping captures and comparisons are not totals of unique worksheet calls.
Excel 16.0 build
Platform and CPU
Captured inputs
20430
Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics
2,400
The record contains no same-input comparison between these environments. Reading different inputs on different builds does not establish either a version change or cross-build agreement.
Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics
2,400 captured inputs are indexed for this environment. Capture dates: 2026-09-24 to 2026-09-25. This is a reading count, not a comparison with another build.
Alternatives
TBILLYIELD computes a bill investment yield; TBILLEQ computes its specified equivalent yield; PRICEDISC accepts a general basis.