Daten aus Website laden
29.03.2020 20:35:27
Markus
leider hatte ich auf meine letzte Frage keine hilfreiche Antwort erhalten, weshalb ich mich selber versucht habe um eine Lösung zu kümmern. Die Dinge, die ich dazu brauche, sind für mich aber sowohl im Excel an sich neu, als auch im VBA.
Zu meinem Grundanliegen:
Ich möchte mir eine umfangreiche Exceltabelle mit Aktiendaten erstellen, damit ich diese dann weiter bearbeiten kann.
Zur Vorgehensweise:
Nachdem ich geschaut hatte, bin ich ursprünglich auf Yahoo verwiesen wurden. Mit Yahoo an sich habe ich bisher nichts zutun gehabt. Einige Seiten und Videos haben anscheinend in der Vergangenheit eine API genutzt, um sich verhältnismäßig einfach die Daten, die man haben möchte über eine CSV zu ziehen. Anscheinend funktioniert das heutzutage aber nicht mehr.
Nun wäre meine erste Frage:
Kennt sich jemand grundlegend mit der Thematik aus und kann mir weiterhelfen, ob das noch irgendwo anders geht oder wie es vielleicht anders gemacht werden kann?
Da oben genannte Thematik (für mich) erst einmal nicht mehr geht, habe ich versucht mich über QueryTables ans Werk zu machen. Das ist für mich aber auch ein komplett neues Gebiet, mit dem ich bisher noch nie etwas zutun hatte. Dementsprechend fällt es mir auch schwer mich mit dem Code zurecht zu finden.
Vom Vorgehen:
Ich habe mir eine Tabelle erstellt, in der die erste Spalte Zeile für Zeile durchlaufen wird (da stehen die Aktien drin) und dann sollte die entsprechende Homepage bei Yahoo geladen werden, damit alle Tabelleninhalte über die Queryfunktion in ein separates WB geladen werden. Ziel sollte dann hinterher sein, dass ich die Daten alle zusammenfasse und in meine eigentliche Tabelle lade. Das dauert zwar sehr lange, wenn die Queries geladen werden, aber der Rest funktioniert zum Glück sehr schnell.
Nun habe ich versucht den Code so anzupassen, dass er das tatsächlich auch für jeden Zelleninhalt übernimmt, aber in dem Queriescode wird im hinteren Teil zum Beispiel auf einen Wert 1,54 verwiesen, der zwar in der aktuellen Tabelle drin steht, der aber bei einer anderen Aktie eben ein anderer Wert ist. Kann ich einfach von diesem Code etwas weg nehmen oder wie bringe ich es ihm bei, dass er das anpassen muss?
Ich wäre euch sehr verbunden, wenn ihr mir behilflich sein könnt oder andere Ideen habt, wie ich das machen kann, ohne dass das so lange läd.
Ich wünsche euch noch einen schönen Sonntag :)
LG Markus
ActiveWorkbook.Queries.Add Name:="Aktienkursverlauf", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Quelle = Web.Page(Web.Contents(""https://de.finance.yahoo.com/quote/" & aktie & "/key-statistics?p=" & aktie & """))," & Chr(13) & "" & Chr(10) & " Data3 = Quelle{3}[Data]," & Chr(13) & "" & Chr(10) & " #""Geänderter Typ"" = Table.TransformColumnTypes(Data3,{{""Beta (5 J., monatlich)"", type text}, {""1,54"", type number}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Geänderter Typ"""
Sheets.Add after:=ActiveSheet
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=Aktienkursverlauf;Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [Aktienkursverlauf]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Aktienkursverlauf"
.Refresh BackgroundQuery:=False
End With