【发布时间】:2017-06-17 22:39:02
【问题描述】:
在我看来,将 yahoo!-Finance 数据导入 Excel 有两种可能性。第一个是实时数据,第二个是历史数据。
我需要历史数据。我当前的 VBA 代码如下:
firstcolumn = 2
lastcolumn = 6
For n = firstcolumn To lastcolumn
Ticker = Worksheets(1).Cells(3, n).Value
ActiveWorkbook.Worksheets.Add After:=Worksheets(Worksheets.Count)
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;http://ichart.finance.yahoo.com/table.csv?s=" & Ticker & "&d=" & Month(Date) & "&e=" & Day(Date) & "&f=" & Year(Date) & "&g=d&" _
& "a=" & Month(Date) & "&b=" & Day(Date) & "&c=" & Year(Date) - 1 & "&ignore=.csv" _
, Destination:=Range("$A$1"))
.Name = "table.csv?s=BMW.DE&d=6&e=31&f=2012&g=d&a=0&b=1&c=2003&ignore="
.FieldNames = True
.RowNumbers = True
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(5, 1, 1, 1, 1, 1, 1)
.TextFileDecimalSeparator = "."
.TextFileThousandsSeparator = ","
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
ActiveSheet.Name = Ticker
MsgBox "status ende"
ActiveWorkbook.Connections("table.csv?s=" & Ticker & "&d=" & Month(Date) & "&e=" & Day(Date) & "&f=" & Year(Date) & "&g=d&a=" & Month(Date) & "&b=" _
& "" & Day(Date) & "&c=" & Year(Date) - 1 & "&ignore=").Delete
ActiveSheet.QueryTables.Item(ActiveSheet.QueryTables.Count).Delete
ActiveSheet.ListObjects.Add(xlSrcRange, ActiveSheet.Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(1, 7).End(xlDown)), , xlYes).Name = Ticker
'MsgBox "The data for " & Ticker & " were downloaded to a new sheet."
Next n
Exit Sub
ERR:
MsgBox "Error. Please check."
它会遍历股票代码列表并创建一个以股票代码为名称的新工作表,下载的历史数据如下:
然后由我来提取相关列、日期和收盘价,并将其复制到工作表中我需要它们的位置。
我在网上找到了我使用的 VBA 代码,但我无法确定如何使它只显示数据和收盘价列。据我所见,代码不包含任何关于“open”、“high”、“low”、“close”的查询,我可以排除这些查询以仅接收我想要的数据。我也看不到什么线 .Name = "table.csv?s=BMW.DE&d=6&e=31&f=2012&g=d&a=0&b=1&c=2003&ignore=" 可能是因为这些日期没有反映在我的数据中。 最后,即使我要求提供从今天到一年前的每日数据,但数据可以追溯到 2000 年 1 月 3 日。
总之,这种不灵活的方式是我发现的唯一一种获得必要数据的方式。然而,我想要的是如下形式的东西:
即不同之处在于我可以调整我需要的数据(而不是所有的开盘价、最高价、最低价……),以及将其插入现有工作表的位置(而不是在新工作表中插入 1 美元)。
或者,如果建议,我会使用任何其他数据库。
Excel 的版本是 2013。我查看了Webservice 函数,但它似乎也只获取当前数据,而不是历史数据。
【问题讨论】:
标签: excel vba yahoo-finance