Как я вижу это, есть две возможности получить yahoo! -Финансные данные в excel. Первый - для данных в реальном времени, второй - для исторических данных.yahoo! -финансирование (или другие) исторические данные в 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, который я использую онлайн, но я не мог определить, как сделать его таким, чтобы отображались только данные и столбец цены закрытия. Насколько я вижу, код не содержит никаких запросов на «открытые», «высокие», «низкие», «закрытые», которые я мог бы исключить, чтобы получать только те данные, которые я хочу. Я также не понимаю, что линия .Name = «table.csv? S = BMW.DE & д = 6 & е = 31 & F = 2012 г = & д & а = 0 & Ь = 1 с = ignore = " может быть, поскольку эти даты не отражаются в моих данных. Последнее, хотя я прошу ежедневные данные с сегодняшнего дня до года назад, данные возвращаются до 3.1.2000.
В целом, этот негибкий способ является единственным, что я нашел для получения необходимых данных. То, что я хотел бы, однако, является то, что выглядит в следующем виде:
т.е. с той разницей, что я могу настроить, какие данные мне нужно (вместо всех открытых, высокий, низкий,. ..) и где вставить его в существующий лист (вместо $ A $ 1 на новый лист).
В качестве альтернативы, я бы использовал любую другую базу данных, если это было предложено. Версия Excel - 2013 год. Я посмотрел на функцию Webservice
, но это также похоже на получение данных, а не исторических данных.