Das Makro funktioniert nicht mehr, da Yahoo Finance die Abfrage über die kostenfreie API eingestellt hat.
Mit diesem Beitrag möchte ich allen ein Hilfsmittel an die Hand geben, die Aktienkurse und Währungen automatisch in einer Exceltabelle aktualisieren möchten.
Vorne weg:
Ich bin in der Programmierung mit VBA relativ unbegabt und die Funktion wurde nicht von mir erstellt. Da ich mich nicht mit fremden Federn schmücke, hier der Link zum Aktienboard und dem Beitrag des Users Smoke. Ihm gebührt die Ehre. Ich gebe hier lediglich eine Schritt für Schritt Anleitung und noch einige kleinere Tipps. Das Ganze wird mit einer vorbereiteten Tabelle im Downloadbereich ergänzt. Ich hoffe, es funktioniert und ist allen eine Hilfe.
Schritt 1
Als erstes ist eine leere Arbeitsmappe zu öffnen.
Anschließend wird mit der Tastenkombination ALT+F11 ein neues Fenster mit der VBA Umgebung geöffnet. Das sollte dann so ausschauen, wie im Screenshot rechts.
Schritt 2
Oben in der Menüleiste auf Ansicht gehen und dann den Projekt-Explorer starten. Er ist knapp unterhalb der Mitte des Auswahlmenüs. Im Screenshot ist die Zeile gelb unterlegt (wo sich auch der Mauszeiger befindet). Dadurch wird der Projekt-Explorer aktiviert, man sieht aber noch nichts.
Schritt 3
Jetzt kann in der Menüleiste oben das Auswahlmenü Einfügen geöffnet werden und hier der Menüpunkt Modul (dritter von oben) ausgewählt werden.
Schritt 4
Nun sollte ein Modulfenster offen sein und links im Verzeichnisbaum steht neu der Ordner Module und darunter Modul 1.
Schritt 5
Nun wird der untenstehende Code einfach in das Modulfenster eingefügt. Den Text markieren und mit Strg+C in die Zwischenablage kopieren und dann das Modulfenster anklicken und mit Strg+V einfügen.
Das war es schon. Das komplette Fenster kann nun geschlossen werden und die Arbeitsmappe unter dem gewünschten Namen abgespeichert werden. Hierbei ist darauf zu achten, dass man die Dateiform mit Makros einstellt, aber da fragt einen Excel. Die Funktion steht nun wie jede andere Funktion zur Verfügung.
Option Explicit
Public Function KURS_AB(Symbol As String) As Double
On Error GoTo Fehler
Dim Kurs As String
Dim xml
Set xml = CreateObject("MSXML2.ServerXMLHTTP")
xml.Open "GET", "http://download.finance.yahoo.com/d/quotes.csv?s=" _
& Symbol & "&f=l1&e=.csv", False
xml.send ""
Kurs = RTrim(xml.responseText)
Kurs = Replace(Kurs, Chr$(10), "")
Kurs = Replace(Kurs, Chr$(13), "")
Select Case Right(Symbol, 2)
Case ".L"
Kurs = Replace(Kurs, ".", ",") / 100
Case Else
Kurs = Replace(Kurs, ".", ",")
End Select
KURS_AB = Kurs
Set xml = Nothing
Exit Function
Fehler:
KURS_AB = 0
Set xml = Nothing
Exit Function
End Function
Erster Test
Wenn alles geklappt hat, kann der erste Test erfolgen. Gibt man in einer beliebigen Zelle nun =kurs_ab("Kürzel") ein, so sollte der Kurs automatisch geholt werden. Kürzel ist
hierbei die Wertpapierkennung. Möchte ich den Kurs von Coca-Cola haben, muss folglich =kurs_ab("KO") eingegeben werden. Es ist darauf zu achten, die Anführungszeichen nicht zu vergessen. Wie das
aussieht, ist im Screenshot ersichtlich.
Der Kurs wird nur einmal geholt und bleibt so in der Tabelle stehen. Man kann die Kurse aktualisieren, indem man die Tasten-Kombination Strg+Umsch+Alt+F9 drückt.
Erstens bin ich aber dazu zu faul und zweitens verbiege ich mir da regelmäßig die Finger. Deshalb wäre es schön, wenn sich die Kurse automatisch beim Öffnen der Arbeitsmappe aktualisieren
würden. Das folgt in Schritt 6.
Schritt 6
Hierzu muss wieder die VBA-Umgebung geöffnet werden. Am einfachsten mit ALT+F11 oder über die Entwicklertools und Visual Basic auswählen. Es sollte im großen Fenster noch das Modul mit dem VBA-Text stehen, das einfach schließen.
Um den Autostart einzurichten, muss man im oberen linken Fenster mit der rechten Maustaste auf Diese Arbeitsmappe klicken, dann öffnet sich ein Auswahlmenü, wie im Screenshot ersichtlich. Hier dann den obersten Menüpunkt Code anzeigen auswählen, dann öffnet sich ein leeres Codefenster wie in Abbildung bei Schritt 7 ersichtlich.
Schritt 7
Nun folgenden Text einfach in das leere Fenster reinkopieren. Es ist die selbe Vorgehensweise wie bei der Funktionserstellung. Danach speichern nicht vergessen.
Private Sub Workbook_Open()
Application.CalculateFullRebuild
End Sub
Das war es schon. Nun werden die Kurse automatisch beim Öffnen aktualisiert.
Wer möchte, kann sich noch eine Schaltfläche einbauen, die die Prozedur aufruft, um während der Arbeit seine Kurse zu aktualisieren. Dies kann ein Button oder ein Symbol in der Schnellzugriffsleiste sein. Ganz wie es beliebt. Dazu muss man lediglich ein Makro definieren.
Noch ein Hinweis:
Die Prozedur steht nur in dieser Arbeitsmappe zur Verfügung und nicht global. Das geht etwas anders, soll hier aber nicht vertieft werden. Mit den Kursen kann man genauso wie mit allen anderen Zahlen arbeiten. Zum Beispiel den Kurs von $ in € umrechnen.
Wer es bis hierher geschafft hat. Gratulation. Für alle, die zu faul sind, habe ich eine Tabelle erstellt, in der die Prozedur, die automatische Aktualisierung und eine Schaltfläche zum manuellen Aktualisieren, eingearbeitet ist. Da kann beliebig gebastelt werden. Die sende ich gerne per E-Mail zu. Dazu könnt ihr das Kontaktformular verwenden.
Michael C. Kissig (Freitag, 31 Juli 2015 18:48)
Danke für die Anleitung!
Allerdings funktioniert das nur mit amerikanischen Werten, da die Daten ja von finance.yahoo.com geholt werden und sich an den amerikanischen Börsenkürzeln orientieren, oder?
Alexander (Freitag, 31 Juli 2015 19:00)
Es funktioniert mit allen Werten, die man bei Yahoo abfragen kann. USA, Deutschland, Schweiz usw.
Man muss nur das Börsenkürzel wissen. Bei BAT zum Beispiel BAT.DE für Deutschland oder BATS.L bei London. Am einfachsten ist es, bei yahoo die Aktie suchen, dann steht oben das Kürzel mit der Börse neben dem Namen in Klammern.
@all
Das mit dem upload funktioniert nicht richtig, ich hoffe ich finde bald eine Lösung. Mein Provider scheint keine Dateien mit Makros und VBA zu mögen. Wer die Datei will, den maile ich sie gerne. DAS sollte hoffentlich funktionieren.
Christian (Freitag, 31 Juli 2015 21:18)
@Michael: Das ist ja gerade der Vorteil bei Yahoo, dass es für jede beliebige Börse und jedes Unternehmen einen eigenen Kürzel gibt. Bei Yahoo finance, also der englischen Seite, im ganz linken Fenster den Unternehmensnamen oder auch die ISIN eingeben, dann tauch da in der Regel eine Reihe von Ergebnissen auf samt Handelsplatz. Manchmal muss man ein bisschen suchen, aber bisher habe ich alle Aktien, auch die ganz kleinen deutschen gefunden.
TS (Samstag, 01 August 2015 11:09)
Vielen Dank für die Erstellung dieser Anleitung!!
Habe das eben in eine bereits existierende Liste eingebaut und mir sind noch zwei Punkte eingefallen:
1. Am Ende von Punkt 6 muss man man Rechtsklick noch auf "Code" anzeigen klicken. Nur Rechtsklick auf Diese Arbeitsmappe ist zu wenig ...
2. Man muss die Excel-Liste in Anschluss als XLSM Datei (Excel Liste mit Makros) abspeichern. Eine XLSX Datei wie üblich speichert die Makros nicht mit.
Alexander (Samstag, 01 August 2015 12:34)
Das bei Punkt 6 habe ich vergessen. Wird ergänzt.
Excel fragt beim Abspeichern, ob mit oder ohne Makros. Ich denke das sollten die meisten hinkriegen.
GDL (Samstag, 01 August 2015 17:20)
Nochmals vielen Dank an dieser Stelle. Bis jetzt funktioniert alles einwandfrei.
Alex von Reich-mit-Plan.de (Sonntag, 02 August 2015 14:25)
Früher habe ich auch lange Excel verwendet. Mittlerweile mache ich alles über Google Spreadsheets. Da geht das alles ohne große Programmierung. Einfach wie gewohnt eine Formel setzen und ist. Probier es mal aus, das funktioniert um Welten besser.
Zudem werden die Zahlen in Realtime aktivalisiert und nicht nur beim öffnen oder "aktivieren".
Gruß
Alex
Alexander (Sonntag, 02 August 2015 17:37)
Auch eine Möglichkeit. Aber manche Sachen will ich einfach Google nicht zur Verfügung stellen. Da bin ich vielleicht komisch. Aber Danke für den Hinweis.
Malte (Mittwoch, 02 September 2015 10:40)
Hallo Alexander,
vielen Dank, das ist wirklich ein hilfreiches Tool!! Kannst du noch verraten, welches Symbol man für die Währungskurse verwendet? Beispielsweise €/$ ? Das habe ich nicht gefunden...
Grüße Malte
Alexander (Mittwoch, 02 September 2015 18:15)
Hallo Malte,
den €/$ Kurs bekommst du mit eurusd=x , die Schreibweise ist kurs_ab=("eurusd=x")
also Anführungszeichen nicht vergessen. Beim Pfund wäre es zB "eurgbp=x".
Wenn du bei yahoo financial auf Währungen gehst, wird das Kürzel rechts am Bildschirm im Chart eingeblendet.
Eventuell muss man das Kürzel groß schreiben, das habe ich nicht getestet.
Viele Grüße
Sam (Samstag, 09 April 2016 10:45)
Hervorragend. Vielen lieben Dank für diesen Code.
ich sehe das nicht als selbstverständlich an!
Alexander (Samstag, 09 April 2016 16:42)
Hallo Sam,
gerne doch :)
Bei Bedarf eine kurze Mail und ich schick dir eine Excel-Tabelle, wo alles eingearbeitet ist.
Ich arbeite jetzt seit 9 Monaten mit der VBA und es funktioniert bisher sehr gut, dauert nur manchmal etwas, bis alle Kurse abgeholt sind. Aber damit kann ich leben.
Tom (Mittwoch, 18 Mai 2016 14:37)
Hallo Alexander
Ich habe das gerade probiert. Leider funktioniert das bei mir nicht. Ich bekomme als Wert bei verschiedenen Symbolen immer 0 (null) zurück. Sieht so aus, als ob auch der Wert KO nicht gefunden wird. Lasse ich die Anführungszeichen "Symbol" weg erscheint #WERT. Von dem her schliesse ich daraus, dass was mit der Abfrage nicht stimmt. Hast du einen Tip?
Danke schön!
Tom
Alexander (Mittwoch, 18 Mai 2016 19:04)
Hallo Tom,
das Problem kann bei Yahoo liegen, da am Wochenende oder an Feiertagen die Kurslieferung nicht immer zu 100 % klappt. Kommt sehr selten vor, aber hatte ich schon zweimal.
Gruß
Alexander
Jürgen B (Sonntag, 17 Juli 2016 20:02)
Hallo, besten Dank für die Codezeilen. Ich kann nun sogar ausser meinen US- und DAX Aktien auch meine einzelnen ETF aus meinem Sparplan einlesen und auswerten. Dazu war der Hinweis den Euro Dollar Kurs betreffend äusserst hilfreich.
Gruß Jürgen
Alexander (Montag, 25 Juli 2016 16:04)
Hallo Jürgen,
freut mich, wenn alles klappt :)
Viele Grüße
Robert Weis (Donnerstag, 29 Dezember 2016 19:56)
Kann man auf diese Art auch irgendwie die Aktienkurse zu einem bestimmten Datum abrufen und wenn ja wie?
Alexander (Freitag, 30 Dezember 2016 17:10)
Hallo Robert,
mit dieser Funktion holt man sich den letzten verfügbaren Kurs (meist der Schlusskurs vom Vortag). Ob es die Möglichkeit gibt, sich Kurse von einem bestimmten Datum automatisch zu holen, weiß ich leider nicht.
Ulrich (Donnerstag, 19 Januar 2017 13:32)
Habe das Excelblatt soeben mit all meinen Kursen erstellt und mit Makros als .xlsm-Datei abgespeichert. Will ich nun alle Kurse durch erneutes Öffnen der Tabelle aktualisieren, erscheint in den Zellen in denen z.B. =kurs_ab("SIE") hinterlegt ist der Text #Name? Aber kein aktualisierter Kurswert. Hast du einen Tipp für mich, wie ich das hinbekomme?
viele Grüße
Ulrich
Alexander (Donnerstag, 19 Januar 2017 19:55)
Leider nein, ich schicke die Datei gerne per Mail.
ostone (Samstag, 15 Juli 2017 22:06)
Mensch Alexander, die Anleitung ist echt der Hit und rettet meine Excel-Aktien-Übersicht. Ich hatte bisher die Kurse über die Microsoft eigene Funktion "MSN MoneyCentral Investor Aktienkurse" abgerufen. Aber seit einigen Tagen unterstützt MSN die Funktion nicht mehr.
Gut, dass es deinen Blog gibt.
Grüße, Oli
Alexander (Sonntag, 16 Juli 2017 16:10)
Hallo Oli,
MSN hat bei mir oft falsche Werte geliefert. Wenn es nicht funktioniert, dann schicke ich dir das Makro in einer leeren Excel-Datei als Mail.
Viele Grüße
Jonas (Mittwoch, 19 Juli 2017 16:16)
Hallo Alex,
ich bin auch aufgrund der Abschaltung der MSN MoneyCentral über deinen Blog gestolpert. Aber irgendwie bekomme ich bei mir die Abfrage nicht ans Laufen. Ich habe Excel 2013, und eine Tabelle, in der in Spalte A die Yahoo-Kürzel der Aktien/ETFs stehen.
In Spalte B habe ich dann die Formel =KURS_AB(A1) stehen. Das Ergebnis ist dabei 0...
Auch wenn ich das Kürzel manuell in die Formal einsetze, bekomme ich Wert 0 ausgegeben (Bsp.: =KURS_AB("X010,DE").
Wenn ich den Link manuell generiere und in einem Browser eingebe, erhalte ich eine gültige quotes.csv Datei... ich bin echt ratlos, was da schief läuft :(
Hast du da zufällig eine Idee? :)
Gruß
Jonas
Jonas (Mittwoch, 19 Juli 2017 19:31)
Auf einem anderen Rechner mit Excel 2016 funktioniert es jetzt ohne Probleme... Keine Ahnung was da bei Excel 2013 schief läuft :/
Alexander (Mittwoch, 19 Juli 2017 20:11)
Hallo Jonas,
an der Excel-Version selber dürfte es nicht liegen. Vermutlich ist bei deinem Rechner irgendeine Einstellung, die verhindert, dass die VB-Funktion ausgeführt wird. Wenn du magst, schicke mit eine kurze Mail über das Kontaktformular, dann hänge ich dir die Musterdatei an.
Viele Grüße
Alexander
W.Walter (Montag, 11 September 2017)
Halllo,
bin zufällig über diese Seite gestolpert.
Versuche schon lange in Excel Aktienkurse aktuell zu bekommen.
Leider klappt dies mit der Anleitung bei mir nicht. Habe Excel 2007.
Könntest du mir eine Musterdatei mit Makro zusenden?
An: walter.nordwalde@t-online.de
Viele Grüße
Willi
Rainer (Donnerstag, 28 September 2017 17:47)
leider ist bei mir nach Strg+V im Modul ab dem Befehl Set die Zeilen rot und es funktioniert leider nicht. Gibt es dafür eine Lösung?
VG
Alexander (Montag, 02 Oktober 2017 16:45)
Hallo Rainer,
die einfachste Lösung wäre, du schreibst mir ein kurze Mail und ich schicke dir die Excel-Datei. Eine Ferndiagnose kann ich da leider nicht liefern.
VG
Dieter (Donnerstag, 02 November 2017 10:45)
Hallo,
seit heute funktioniert das Skript scheinbar nicht mehr =/
Wenn ich in den Browser "händisch" http://download.finance.yahoo.com/d/quotes.csv?s=
eingebe bekomme ich folgende Fehlermeldung:
Sorry, Unable to process request at this time -- error 999.
Eine Idee für eine andere Quelle um die XML zu füttern?
LG und danke für das tolle Skript
Greets
Andre (Donnerstag, 02 November 2017 12:36)
Hallo Dieter und alle andere,
du bist auf jeden Fall nicht alleine, ich habe das selbe Probelm.
Auf die schnelle finde ich persönlich auch keine Lösung bzw. neue URL von yahoo und hoffe, dass hier noch jemande behilflich sein kein.
VG und auch von mir natürlich Danke für das Skript.
Alexander (Donnerstag, 02 November 2017 19:28)
Mich hat es jetzt auch erwischt. Es werden keine Kurse mehr angezeigt, ich habe überall nur Nullen drin.
Ich gehe davon aus, dass das Makro keinen Fehler hat, sondern das Yahoo etwas geändert hat. Ob das von Dauer ist oder nur temporär, wird sich zeigen. Vielleicht wollen die auch nicht, dass man das nutzt.
Ich arbeite an einer Lösung. Meine Excel-Datei ist inzwischen ziemlich umfangreich und es wäre schmerzlich, hier etwas Neues machen zu müssen.
Trölfi (Donnerstag, 02 November 2017 20:20)
Danke Alex, ich bin der nächste in der Liste dem seine Excel Lieblingsdatenbank in der Tonne ist seit der Umstellung :/
Alexander (Donnerstag, 02 November 2017 21:06)
Nach einigem Suchen habe ich im Yahoo Finance Forum gefunden, dass das Problem weltweit besteht.
Nach Aussage des Administrators NIXON wurde der Service abgeschaltet :(
Update from the Finance team: It has come to our attention that this service is being used in violation of the Yahoo Terms of Service. As such, the service is being discontinued. For all future markets and equities data research, please refer to finance.yahoo.com.
Sollte Yahoo daran festhalten, haben wir erst mal ein Problem. Die Überlegung ist dann, ob man das über Google bekommt oder einen anderen Anbieter. Es gibt von der Nasdaq eine API, ob man da auch an deutsche Kurse kommt, muss ich noch herausfinden. Jedenfalls werde ich eine Lösung finden.
ostone (Freitag, 03 November 2017 13:55)
Ich reihe mich dann mal in die Liste der Leidtragenden ein. :-/
Erst schaltet Microsoft seinen Dienst zum Abruf der Kurse (MSN MoneyCentral Investor Aktienkurse) ab und nun auch Yahoo. Langsam scheint es sich zu einer Service-Wüste für Investoren zu entwickeln... :-(
Andererseits scheint die finanzielle Lage von Yahoo wohl auch nicht die Beste zu sein. Da möchte man natürlich die User werbewirksam auf die Homepage ziehen.
Aber evtl. ist finance.google.com eine Alternative. Zumindest lassen sich US-Kurse und auch Kurse an deutschen Handelsplätzen abrufen. Auch die Unternehmen sind zahlreich vertreten... Nur wie dies in das Excel-Sheet einbinden?
Rico (Samstag, 04 November 2017 22:02)
Hallo Leute, selbiges bei mir... erst MSN, dann yahoo... jetzt darf ich wieder irgendetwas ummodeln in meiner Tabelle? -_- oh man...
Gibt es keinen anderen Dienst, der die Datenabfrage auf diesem Wege zulässt und ggf. auch noch die selben Symbole oder wenigstens ISINr. akzeptiert, so dass man ggf. einfach nur den Link im VBA Skript austauschen müsste??? So ist auch die schöne Anleitung dieser Seite hier obsolet... aber wenigstens steht der Hinweis direkt unter der Überschrift :-]
Björn (Sonntag, 05 November 2017 00:08)
Ja, leider hat Yahoo den Service abgeschaltet. Sehr ärgerlich. Wäre auch daran interessiert eine Alternativlösung zu finden. Google Finance scheint es nur für historische Daten zu geben und die "Live Kurse" nur für Google Docs soweit ich das im Internet gelesen habe. Sicher bin ich mir allerdings nicht.. :-(
Bin gespannt, wann oder ob es eine neue Lösung geben wird.
Tobi (Donnerstag, 28 Dezember 2017 00:59)
Hat schon jemand eine Alternativlösung zu MSN und Yahoo gefunden?