# Function STOCKHISTORY and its Troubling NA errors

Excel Version
1. 365
The relatively new function STOCKHISTORY is terrific in most respects. Of course, it’s not without deficiencies. Principally, it delivers data only for dates that the source possesses, that source being Refinitiv. When a security did not trade for whatever reason or Refinitiv does not have the data, the function reports NA. This NA error is most troublesome when making calculations across dates and securities.

Take for example a portfolio of stocks going across columns and dates and another column spilling on down the rows. If the dates reported by STOCKHISTORY are different for the various securities then they won’t line up! If a stock is halted for a few days, the problem is just worsened. How frustrating.

stock spill.xlsx
ABCDEFGH
212/30/2022Start
31/12/2023End
11
12CANADIAN NATURAL RESOURCES LIMITED (XTSE:CNQ)Light Sweet Crude Oil
13DateCloseDateClose
1412/30/2022\$ 75.1912/30/2022\$ 80.26
151/3/2023\$ 71.291/2/2023#N/A
161/4/2023\$ 70.471/3/2023\$ 76.93
171/5/2023\$ 70.621/4/2023\$ 72.84
181/6/2023\$ 73.291/5/2023\$ 73.67
191/9/2023\$ 73.881/6/2023\$ 73.77
201/10/2023\$ 74.371/9/2023\$ 74.63
211/11/2023\$ 74.761/10/2023\$ 75.12
221/12/2023\$ 76.091/11/2023\$ 77.41
231/12/2023\$ 78.39
Sheet2
Cell Formulas
RangeFormula
D13:E22D13=STOCKHISTORY(D12,A2,A3)
G13:H23G13=STOCKHISTORY(G12,A2,A3)
Dynamic array formulas.

Note that it is not possible to simply use STOCKHISTORY copied down to all rows of a long list of dates for each security because Excel will quickly report a #CALC! error as there eventually occurs too many calls on the source.

What can be done? Here is a complex formula that accounts for every single calendar day between the relevant dates, even weekends, holidays and no-trade days. As long as the Start date does not cause an error, this formula fills in all the data. The formula reports the Data Type data for the day in the row if available OR it reports the last valid data. If only Microsoft would include a new argument in function STOCKHISTORY that could if desired report the all dates and the last valid data between the Start Date and the End date this mind-bending formula would be unnecessary.

stock spill.xlsx
ABCDEFG
212/30/2022Start
31/12/2023End
27
28CANADIAN NATURAL RESOURCES LIMITED (XTSE:CNQ)Light Sweet Crude Oil
29Fri 12/30/2022\$ 75.19\$ 80.26
30Sat 12/31/2022\$ 75.19\$ 80.26
31Sun 1/1/2023\$ 75.19\$ 80.26
32Mon 1/2/2023\$ 75.19\$ 80.26
33Tue 1/3/2023\$ 71.29\$ 76.93
34Wed 1/4/2023\$ 70.47\$ 72.84
35Thu 1/5/2023\$ 70.62\$ 73.67
36Fri 1/6/2023\$ 73.29\$ 73.77
37Sat 1/7/2023\$ 73.29\$ 73.77
38Sun 1/8/2023\$ 73.29\$ 73.77
39Mon 1/9/2023\$ 73.88\$ 74.63
40Tue 1/10/2023\$ 74.37\$ 75.12
41Wed 1/11/2023\$ 74.76\$ 77.41
42Thu 1/12/2023\$ 76.09\$ 78.39
Sheet2
Cell Formulas
RangeFormula
A29:A42A29=SEQUENCE(A3-A2+1,,A2)
D29:D42,G29:G42D29=XLOOKUP(\$A29#,FILTER(INDEX(STOCKHISTORY(D28,\$A\$2,\$A\$3,0,0),,1),ISNUMBER(INDEX(STOCKHISTORY(D28,\$A\$2,\$A\$3,0,0),,2))),FILTER(INDEX(STOCKHISTORY(D28,\$A\$2,\$A\$3,0,0),,2),ISNUMBER(INDEX(STOCKHISTORY(D28,\$A\$2,\$A\$3,0,0),,2))),,-1)
Dynamic array formulas.
manen2312 and Tluv
Author
DRSteele
Views
1,885
First release
Last update
Rating
0 ratings

### We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.

### Which adblocker are you using?

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

### Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

### Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back