2017-11-11 5 views
2

Ich bin ein Yahoo Finance API-Flüchtling (sie haben ihren API-Dienst eingestellt) versuchen, zu Alpha Vantage wechseln. Ich habe den folgenden Code geändert, den ich zuvor für Yahoo Finance verwendet habe, aber ich bekomme einen Fehler #VALUE in Excel.Alpha Vantage: Excel VBA verwenden, um Daten aus der CSV-Datei zu ziehen

Die unten stehende URL funktioniert von selbst (es öffnet eine CSV, wenn Sie es in Ihren Webbrowser eingeben), also mein wahres Problem liegt darin, die richtigen Daten aus der CSV in meine Excel-Tabelle zu extrahieren. Würde jemand damit helfen können?

Ich versuche, aus der CSV die Daten in Zeile 2, Spalte 5 (der letzte Schlusskurs) zu extrahieren. Vielen Dank im Voraus!

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 

Probe der Daten zurückgegeben, wenn ich json statt csv extrahieren:

{ "Meta-Daten": { "1. Information": „Tagespreise (offen, hoch, niedrig , schließen) und Volumes ", " 2. Symbol ":" SGD = X ", " 3. Letzte Aktualisierung ":" 2017-11-10 ", " 4. Ausgabegröße ":" Volle Größe ", "5. Zeitzone": "US/Eastern" }, "Zeitreihe (täglich)": { "201 7-11-13 ": { " 1. Öffnen ":" 1.3588 ", " 2. hoch ":" 1.3612 ", " 3. niedrig ":" 1.3581 ", " 4. schließen ":" 1.3587 ", " 5. Volumen ":" 0 " }, " 2017-11-10 ": { " 1. Öffnen ":" 1.3588 ", " 2. hoch ":" 1.3612 ", " 3. niedrig ":" 1.3581 ", " 4. schließen ":" 1.3587 ", " 5. Volumen ":‚ 0‘ },

+0

Überprüfen Sie [diese Antwort] (https://Stackoverflow.com/a/43969543/2165759), es könnte Ihnen helfen, mit Yahoo Finance API zu verwalten. – omegastripes

Antwort

3

Die‚CSV‘Option von der Website ist eine herunterladbare Datei, kein Textdokument so analysieren Eine einfachere Lösung ist die Website der JSON Option stattdessen zu verwenden, die leicht in einen String geladen.

da Sie nur einen Wert benötigen, ist es am einfachsten nur für die Zeichenfolge „Close“, um zu suchen und den Wert nach der Rückkehr.

Hier ist eine schnelle Lösung ist, die Sie anpassen können, wie benötigt:

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

Danke Ashlee, ich habe den obigen Code ausprobiert, aber die Funktion gibt immer 0 zurück. Glaubst du, es könnte sein, dass es mehrere "4. Schließen" im JSON gibt? Extrahiert eine Probe unter: "Time Series (Daily)": { "2017.11.13": { "1. Öffnen Sie": "1,3588", "2. hoch": "1,3612", " 3. niedrig ":" 1.3581 ", " 4. schließen ":" 1.3587 ", " 5. Volumen ":" 0 " }, " 2017-11-10 ": { " 1. öffnen ": "1.3588", "2. hoch": "1.3612", "3. niedrig": "1.3581", "4. schließen": "1.3587", "5. Volumen": "0" – volvader

+0

hmm, es sollte nicht wichtig sein. Es ist auf der Suche nach dem ersten Auftritt. Groß-/Kleinschreibung kann oder darf nicht wichtig sein. Ist der Fall in Ihrer Datei identisch wie im Code: '4. nah dran? – ashleedawg

+0

Was ist das Ticker-Symbol, das du überprüfst? – ashleedawg

-1

Es war ein trauriger Tag als Yahoo seinen API Service beendete. Dennoch gibt es viele Alternativen. Sie können Python verwenden, um Zeitreihendaten für Bestände abzurufen. Sie können R auch verwenden. Ich überlasse es Ihnen, herauszufinden, wie Sie diese Technologien nutzen können, weil Sie ein Excel-VBA-Benutzer sind und ich diese Optionen nicht auf Sie anwenden möchte, wenn Sie sie nicht ablehnen. Betrachten Sie alternativ eine dieser beiden unten aufgeführten Optionen.

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

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

enter image description here

Für die zweite URL, klicken Sie auf den Link mit dem Titel 'Get Excel Spreadsheet to Download Bulk Historical Stock Data from Google Finance' und Sie können ein Tool herunterladen, das alles, was Sie wollen, tun sollten.

Verwandte Themen