2017-11-11 2 views
2

저는 Alpha Vantage로 전환하려고하는 Yahoo Finance API 피난민입니다 (API 서비스를 중단했습니다). 이전에 Yahoo Finance에 사용했던 아래 코드를 수정했지만 Excel에서 #VALUE 오류가 발생합니다.Alpha Vantage : Excel VBA를 사용하여 CSV 파일에서 데이터 가져 오기

아래 URL은 웹 브라우저에 입력하면 CSV가 열립니다. 따라서 내 실제 문제는 CSV에서 올바른 Excel 스프레드 시트로 추출하는 것입니다. 누구든지이 일을 도울 수 있습니까?

2 행 5 열 (마지막 마감 가격)의 데이터를 CSV에서 추출하려고합니다. 미리 많은 감사드립니다!

{ "메타 데이터"

: { "1. 정보": "매일 가격 (오픈, 고가, 저가 내가 대신 CSV의 JSON을 추출 할 경우 데이터의

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 

샘플 반환 , 닫기) 및 볼륨 ", "2. 기호 : "SGD = X", "0123, "5. 시간대": "미국/동부" }, "시계열 (매일)": { "201 7-11-13 ": { "1. 열기 ":"1.3588 ", "2. 높음 ":"1.3612 ", "3. 낮음 ":"1.3581 ", "4. 닫기 ":"1.3587 ", "5. 볼륨 ":"0 " }, "2017-11-10 ": { "1. 열기 ":"1.3588 ", "2. 높음 ":"1.3612 ", "3. 낮음 ":"1.3581 ", "4. 닫기 ":"1.3587 ", "5. 볼륨 "". 0 " 는},

+0

[이 답변] (https://stackoverflow.com/a/43969543/2165759)을 확인하면 Yahoo Finance API로 관리하는 데 도움이 될 수 있습니다. – omegastripes

답변

3

은"웹 사이트에서 CSV "옵션은 다운로드 할 수있는 파일이 아닌 다음과 같은 구문 분석하는 텍스트 문서 인 간단한 해결책은 대신 사이트의 JSON 옵션을 사용하는 것입니다있는 쉽게 캐릭터에로드됩니다. 당신은 단지 하나 개의 값을 필요로하기 때문에

, 그것은 단지 "닫기"문자열을 검색하고, 이후 값을 반환하는 것이 가장 쉬운 방법이다. 여기에

당신이로 적용 할 수있는 빠른 해결책이다 필요 :

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 
+0

감사합니다 Ashlee, 위의 코드를 시도했지만 함수는 항상 0을 반환합니다. json에 "4. close"가 여러 개있을 수 있다고 생각하십니까? 아래에 추출 된 샘플 : "시간 시리즈 (매일)": { "2017년 11월 13일": { "1.": "1.3588", "2 고" "1.3612" " 3. "낮음": "1.3581", "닫음": "1.3587", "볼륨": "0" }, "2017-11-10": { "1. 열기" "1.3588", "2. 높음": "1.3612", "낮음": "1.3581", "닫음": "1.3587", "볼륨": "0" – volvader

+0

흠, 그건 중요하지 않아. 그것은 첫 번째 모습을 찾고 있어요. 대/소문자는 중요 할 수도 있고 중요하지 않을 수도 있습니다. 대소 문자가 코드에서와 동일합니까 :'4. 가까이? – ashleedawg

+0

당신이 확인할 티커 심볼은 무엇입니까? – ashleedawg

-1

야후가 API 서비스를 종료 한 것은 슬픈 날이었습니다. 그럼에도 불구하고 많은 대안들이있다. 파이썬을 사용하여 주식에 대한 시계열 데이터를 얻을 수 있습니다. R도 사용할 수 있습니다. 엑셀 -VBA 사용자이기 때문에 이러한 기술을 활용하는 방법을 알아 내려고합니다. 당신이 그 기술을 잃지 않는다면 그 옵션을 강요하고 싶지는 않습니다. 대안으로 아래에 나열된 두 가지 옵션 중 하나를 고려하십시오. 두 번째 URL에 대한 enter image description here

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

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

'Get Excel Spreadsheet to Download Bulk Historical Stock Data from Google Finance'라는 제목의 링크를 클릭하면 당신이 원하는 모든 일을해야 도구를 다운로드 할 수 있습니다.

관련 문제