Alpha Vantage:使用Excel VBA从CSV文件中提取数据

我是雅虎财经API难民(他们停止了他们的API服务)试图切换到Alpha Vantage。 我修改了以前用于Yahoo Finance的下面的代码,但是我在Excel中遇到了一个#VALUE错误。

下面的url本身是可以工作的(如果你在networking浏览器中input的话,它会打开一个CSV文件),所以我想我真正的问题在于从CSV中提取正确的数据到我的Excel电子表格中。 任何人都可以帮助吗?

我试图从CSV中提取第2行第5列(最后收盘价)的数据。 提前谢谢了!

Function StockClose(Ticker As String) Dim URL As String, CSV As String, apikey As String, SCRows() As String, SCColumns() As String, pxClose As Double apikey = "*censored*" URL = "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=" & Ticker & "&outputsize=full&" & apikey & "&datatype=csv" Set xmlhttp = CreateObject("MSXML2.XMLHTTP") xmlhttp.Open "GET", URL, False xmlhttp.Send CSV = xmlhttp.responseText 'split the CSV into rows SCRows() = Split(CSV, Chr(10)) 'split the relevant row into columns. 0 means 1st row, starting at index 0 SCColumns() = Split(SCRows(1), ",") '6 means: 5th column; starting at index 0 - price close is in the 5th column pxClose = SCColumns(6) StockClose = pxClose Set http = Nothing End Function 

如果我提取json而不是csv,返回的数据示例如下:

{“元数据”:{“1.信息”:“每日价格(开盘价,最高价,最低价,收盘价)和交易量”,“2.符号”,“SGD = X”,“3.最近刷新” -11-10“,”4.输出尺寸“:”全尺寸“,”5.时区“,”美国/东部“,”时间序列(每日)“:{”2017-11-13“ “1.打开​​”:“1.3588”,“2.高”:“1.3612”,“3.低”:“1.3581”,“4.closures”:“1.3587”,“5.音量”:“0” ,“2017-11-10”:{“1. open”:“1.3588”,“2. high”:“1.3612”,“3. low”:“1.3581”,“4. close”:“1.3587” “5. volume”:“0”},

网站上的“CSV”选项是一个可下载的文件,而不是像这样parsing的文本文件。 一个更简单的解决scheme是使用该网站的JSON选项,而不是简单地加载到一个string。

由于您只需要一个值,因此只需searchstring“Close”,然后返回值即可。

这里有一个快速的解决scheme,可以根据需要进行调整:

 Option Explicit Function StockClose(Ticker As String) As Double Dim URL As String, json As String, apiKey As String, xmlHTTP As Object Dim posStart As Integer, posEnd As Integer, strClose As String apiKey = "demo" URL = "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=" & Ticker & "&outputsize=full&apikey=" & apikey Set xmlHTTP = CreateObject("MSXML2.XMLHTTP") xmlHTTP.Open "GET", URL, False xmlHTTP.Send json = xmlHTTP.responseText Set xmlHTTP = Nothing posStart = InStr(json, "4. close") + 12 posEnd = InStr(posStart, json, """") - 1 strClose = Mid(json, posStart, posEnd - posStart) StockClose = Val(strClose) End Function 

当雅虎结束他们的API服务时,这是一个悲哀的日子。 尽pipe如此,还有很多select。 您可以使用Python获取股票的时间序列数据。 你也可以使用R. 我会把它留给你来弄清楚如何利用这些技术,因为你是一个Excel-VBA的用户,如果你不喜欢这些技术,我不想强​​迫你select这些技术。 作为替代scheme,请考虑下面列出的这两个选项之一。

http://finance.jasonstrimpel.com/bulk-stock-download/

http://investexcel.net/multiple-stock-quote-downloader-for-excel/

在这里输入图像说明

对于第二个url,点击标题为'Get Excel Spreadsheet to Download Bulk Historical Stock Data from Google Finance' ,您可以下载一个应该做你想做的一切的工具。