Get Historical Stock Quotes – Google Finance
Historical Stock Quotes are required as a first data item when you considering buying a stock. Lets say you are investigating GOOG stock listed in the NASDAQ Stock Exchange. You can download the Historical Stock Quotes to Excel using Google Finance with the help of Easy VBA Macro.
If you are looking for downloading Live Stock Quotes in Excel, you could refer to this article.
How to Get Historical Stock Quotes in Excel
Get Historical Stock Quotes in Excel Using Google Finance
Historical Stock Quotes will return the values for parameters “Date, Open, High, Low, Close, Volume”. We need to pass the stock quote and the date range that we are looking for.
We need to construct Google Finance URL like this, “https://finance.google.com/finance/historical?q=NASDAQ:GOOG&startdate=Jan+1%2C+2016&enddate=May+19%2C+2017&num=500”.
- q – Stock Quote
- startdate – Start Date
- enddate – End Date
- num – Number of data entries
To get historical stock quotes from Google Finance, follow these steps.
- Open a new workbook, save it as Excel_Historical_Stock_Quotes.xlsm.
- In sheet 1, cells A2 enter “NASDAQ” and in B2 enter “GOOG” (in Row 2)
- In sheet 1, cells C2 enter “1/1/2016” and in D2 enter “5/19/2017″ (in Row 2)
- Press Alt+F11 to view VB editor.
- Copy paste the below code.
- Press F5 to execute the code.
Once the code is executed you can get historical stock quotes in Excel updated from Google finance and displayed.
'---------------------- 'For Any issues in Code - Contact the Developer listed below 'Code Developed by Author of https://officetricks.com (Kumarapush) '---------------------- Public Sub Get_Stock_Quotes_Range() 'Declare Variables Dim oXMLHTTP As Object, htmlNew As HTMLDocument, sURL As String, i As Long Dim emmm As String, edd As Double, eyyyy As Double, smmm As String, sdd As Double, syyyy As Double Dim oSh As Worksheet, iSh As Worksheet, sDate As Date, eDate As Date, sQuote As String, dispCount As Double Dim iRow As Double, oRow As Double, ihtml 'Change the URL before executing the code Set iSh = ThisWorkbook.Sheets("Sheet1") Set oSh = ThisWorkbook.Sheets("Sheet2") iRow = 2 dispCount = 500 oRow = 1 'Write Column Header to Output sheet oSh.Cells(1, 1) = "StockSymbol" oSh.Cells(1, 2) = "Date" oSh.Cells(1, 3) = "Open" oSh.Cells(1, 4) = "High" oSh.Cells(1, 5) = "Low" oSh.Cells(1, 6) = "Close" oSh.Cells(1, 7) = "Volume" 'Loop thru Each quote in Input Sheet While VBA.Trim(VBA.UCase(iSh.Cells(iRow, 5))) <> "" 'Get Quote & Date Values from Input sheet 'Start Date sDate = iSh.Cells(iRow, 3) smmm = VBA.Format(sDate, "mmm") sdd = VBA.Format(sDate, "dd") syyyy = VBA.Format(sDate, "YYYY") 'End Date eDate = iSh.Cells(iRow, 4) emmm = VBA.Format(eDate, "mmm") edd = VBA.Format(eDate, "dd") eyyyy = VBA.Format(eDate, "YYYY") 'Get Quote Name sQuote = VBA.Trim(VBA.UCase(iSh.Cells(iRow, 5))) sURL = "https://finance.google.com/finance/historical?q=" & sQuote & "&startdate=" & smmm & "+" & sdd & "%2C+" & syyyy & "&enddate=" & emmm & "+" & edd & "%2C+" & eyyyy & "&num=" & dispCount rowStart = 0 'Create Object for Fetching HTML Data from Server Set oXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP") lbl_Fetch_Url_Data: 'Extract data from website to Excel using VBA oXMLHTTP.Open "GET", sURL, False oXMLHTTP.send Set ihtmlNew = CreateObject("htmlfile") ihtmlNew.body.innerHTML = oXMLHTTP.responseText Set htmlNew = ihtmlNew DoEvents 'Check whether History Data is available Set t0 = htmlNew.getElementsByTagName("table") For Each tablee In t0 If (tablee.className = "gf-table historical_price") Then 'History Data Available - Fetch the Table to Excel With tablee t = 0 For Each Tr In .Rows ocol = 2 If t > 0 Then oRow = oRow + 1 oSh.Cells(oRow, 1) = sQuote For Each Td In Tr.Cells oSh.Cells(oRow, ocol) = Td.innerText ocol = ocol + 1 Next Td End If t = 1 Next Tr End With rowStart = rowStart + 200 'Get to Next Page of same Quote sURL = "https://finance.google.com/finance/historical?q=" & sQuote & "&startdate=" & smmm & "+" & sdd & "%2C+" & syyyy & "&enddate=" & emmm & "+" & edd & "%2C+" & eyyyy & "&num=" & dispCount & "&start=" & rowStart GoTo lbl_Fetch_Url_Data: End If Next iRow = iRow + 1 Wend 'Process Completed Set oXMLHTTP = Nothing Set htmlNew = Nothing Application.StatusBar = "Ready" MsgBox "Process Completed" End Sub
You can enter as many Stock symbols in the Column ‘A’ and even get quotes value for a list of symbols. Ensure that there is no blank row in between the stock symbols. You could try this with various stock exchanges and stock symbols & leave your valuable comments.
Thanks! This worked for me. However, using the code above, the stock ticker needed to be in cell B5 (not B2). In order to use cell B2, I updated:
VBA.Trim(VBA.UCase(iSh.Cells(iRow, 5)))
to:
VBA.Trim(VBA.UCase(iSh.Cells(iRow, 2)))
in both instances.
*Also, don’t forget to go to Tools–>References and add the Microsoft HTML object library
Thanks for taking time to the corrections. I will update the page accordingly.
I’ve added the Microsoft HTML object library. I’m getting the following error when running the macro “subscript out of range”. Any help is appreciated. I’m looking to download 32 stocks so I’d like to automate my process