excel中的yahoo!-finance(或其他)历史数据
我认为,有两种方法可以将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."
这将遍历股票行情清单,并创建一个以股票行情清单为名称的新表,并按以下方式下载历史数据:
===============>>#1 票数:1 已采纳
我找到了一种使用Webservice函数的方法(很难做到)。
在表中,列A包含日期值,列C1包含代码。 单元格C2包含:
=WEBSERVICE("http://ichart.finance.yahoo.com/table.csv?s="&C$1&"&a="&MONTH($A2)-1&"&b="&DAY($A2)&"&c="&YEAR($A2)&"&d="&MONTH($A2)-1&"&e="&DAY($A2)&"&f="&YEAR($A2)&"&g=d&ignore=.csv")
这将导入数据(如问题中所示),但是格式为.csv一天。 在给定的单元格引用日期为$ A2且股票行情为C $ 1的情况下,可以将此公式向右拖动以获取更多公司,向下拖动以获取更多日期。
然后,单元格C2的内容为:
“日期,打开,高,低,关闭,音量,调整后关闭2016-01-07,153.15,154.95,151.55,153.75,2454400,138.63”
接下来,单元格C8包含第十个逗号的位置,因为收盘价在字段C2中的第十个逗号之后开始:
=FIND("X";SUBSTITUTE(C2;",";"X";10))
接下来,单元格C9是第十个逗号之后的剩余字符串。
=RIGHT(C2;LEN(C2)-C8)
接下来,C10一直到C9的第一个逗号为止:
=LEFT(C9;FIND(",";C9)-1)
接下来,C11是C10,使用给定的十进制分隔符转换为十进制:
=NUMBERVALUE(C10;".")
最后,为了节省空间,我们可以按顺序组合所有这些功能,并将其放入C2中以得到相同的结果。 它看起来像这样(C13):
=NUMBERVALUE(LEFT(RIGHT(WEBSERVICE("http://ichart.finance.yahoo.com/table.csv?s="&C$1&"&a="&MONTH($A2)-1&"&b="&DAY($A2)&"&c="&YEAR($A2)&"&d="&MONTH($A2)-1&"&e="&DAY($A2)&"&f="&YEAR($A2)&"&g=d&ignore=.csv");LEN(WEBSERVICE("http://ichart.finance.yahoo.com/table.csv?s="&C$1&"&a="&MONTH($A2)-1&"&b="&DAY($A2)&"&c="&YEAR($A2)&"&d="&MONTH($A2)-1&"&e="&DAY($A2)&"&f="&YEAR($A2)&"&g=d&ignore=.csv"))-FIND("X";SUBSTITUTE(C2;",";"X";10)));FIND(",";RIGHT(WEBSERVICE("http://ichart.finance.yahoo.com/table.csv?s="&C$1&"&a="&MONTH($A2)-1&"&b="&DAY($A2)&"&c="&YEAR($A2)&"&d="&MONTH($A2)-1&"&e="&DAY($A2)&"&f="&YEAR($A2)&"&g=d&ignore=.csv");LEN(WEBSERVICE("http://ichart.finance.yahoo.com/table.csv?s="&C$1&"&a="&MONTH($A2)-1&"&b="&DAY($A2)&"&c="&YEAR($A2)&"&d="&MONTH($A2)-1&"&e="&DAY($A2)&"&f="&YEAR($A2)&"&g=d&ignore=.csv"))-FIND("X";SUBSTITUTE(WEBSERVICE("http://ichart.finance.yahoo.com/table.csv?s="&C$1&"&a="&MONTH($A2)-1&"&b="&DAY($A2)&"&c="&YEAR($A2)&"&d="&MONTH($A2)-1&"&e="&DAY($A2)&"&f="&YEAR($A2)&"&g=d&ignore=.csv");",";"X";10))))-1);".")
现在,这可以同样地向右和向下拖动,以在更多的日子里获取更多公司的数据。
但是,如果有更优雅的解决方案,我将非常高兴看到它!
===============>>#2 票数:0
如果您的问题是将YF的实时报价和历史数据导入Excel,那么有一种比使用vba更为简单的方法,由于YF自2017年11月起关闭了其api服务,因此该方法极有可能无法使用。可以使用几乎免费的Deriscope外接程序,将这些数据检索到Excel中。 免责声明:我是Deriscope的开发人员。
评论专区