Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Einzelne Daten aus Quelltext in Excel importieren

Einzelne Daten aus Quelltext in Excel importieren
30.09.2017 11:19:31
Bernd
Wertes Forum,
Dank meiner bescheidenen VBA Kenntnisse möchte ich gerne euren Rat haben.
Ich habe einen Link: http://www.ariva.de/DE000A1EWWW0/historische_kurse
Öffnet man diesen Link in einem Internet Browser und schaut sich den Quelltext an, sind zwei Daten für mich besonders interessant: der Aktienname und die SECU-ID.
Der Aktienname "adidas-Aktie" steht im Quelltext hinter verschiedenen Stellen, manchmal hinter einem "href", allerdings gefolgt noch von weiteren Zeichen, die
vermutlich auf einen Art Link verweisen.
Allerdings steht dieser Aktienname auch direkt als Überschrift auf der Homepage die sich aufgrund des Links öffnet.
Diesen Aktienname möchte ich in Zelle B2 haben.
Die SECU-ID habe ich allerdings nur im Quelltext gefunden. Anbei der entscheidende Auszug:
<form action="/quote/historic/historic.csv" method="get" name="histcsv"> <input type="hidden" <b>name="secu" value="291"</b> /> <input type="hidden" name="boerse_id" value="16" /> <input type="hidden" name="clean_split" value="1" /> <input type="hidden" name="clean_payout" value="0" /> <input type="hidden" ...
Diesen Wert "291" möchte ich gerne in Zelle B3 haben.
Als VBA Laie würde es mir helfen, wenn ihr mir eine Vorlage hättet aufgrund der ich mich entlang hangeln kann.
Vielen Dank für eure Hilfe vorab.
Lieber Peter Kloßek, leider konnte ich auf "unseren" Aktien Thread nicht mehr antworten. Nochmals vielen Dank für deine uneigennützige Hilfe. Ich bin gerade dabei mir selber etwas zusammen zu schustern (s.o.) 😀
Sollte es dir helfen kann ich dir das Kunstwerk gerne zusenden...
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einzelne Daten aus Quelltext in Excel importieren
30.09.2017 12:50:40
Zwenn
Hallo Bernd,
gib folgenden Quellcode in ein Modul ein. Ich habe hoffentlich genug Kommentare eingefügt:

Option Explicit
Sub AktienDatenHolen()
Dim browser As Object
Dim knotenAst As Object
Dim knoten As Object
Dim url As String
url = "http://www.ariva.de/DE000A1EWWW0/historische_kurse"
Set browser = CreateObject("internetexplorer.application")
browser.Visible = False
browser.navigate url
Do Until browser.readyState = 4: DoEvents: Loop
'Auslesen des Aktiennamens aus der Überschrift 'Performance Adidas'
'Es wird zunächst der HTML Abschnitt gesucht, in dem diese Überschrift steht
'Das geht in diesem Fall über den zugewiesenen Namen der CSS Klasse class="arhead"
'Die Element, die diesen Klassennamen enthalten werden durchlaufen. Dabei wird
'für jedes geprüft, ob das Wort 'Performance' vorkommt.
'Die entsprechende Überschrift wird dann ohne das Wort 'Performance' in die
'Exceltabelle ausgegeben. Durch dieses Vorgehen werden auch Aktiennamen vollständig
'ausgegeben, die Leerzeichen enthalten
Set knotenAst = browser.document.getElementsByClassName("arhead")
If Not knotenAst Is Nothing Then
For Each knoten In knotenAst
If InStr(1, knoten.innertext, "Performance") > 0 Then
ActiveSheet.Cells(2, 2).Value = VBA.Trim(Right(VBA.Trim(knoten.innertext), Len( _
VBA.Trim(knoten.innertext)) - 11))
End If
Next knoten
Else
'Es wurden keine Seitenelemente gefunden, die den gesuchten Klassennamen enthalten
ActiveSheet.Cells(2, 2).Value = "Kein Aktienname gefunden"
End If
'Entscheidender HTML Abschnitt für SecuNr:
'
'Zunächst wird ein Array aus allen Tags mit dem Namen 'input' gebildet. Dieses
'Array wird dann durchlaufen, wobei nach dem Attribut 'name' mit dem Wert 'secu'
'gesucht wird. Wurde es gefunden, wird im entsprechenden Code Abschnitt direkt
'auf das Attribut value zugegriffen und der gewünschte Wert wird in die Tabelle
'eingetragen
Set knotenAst = browser.document.getElementsByTagName("input")
If Not knotenAst Is Nothing Then
For Each knoten In knotenAst
If knoten.getAttribute("name") = "secu" Then
ActiveSheet.Cells(2, 3).Value = knoten.getAttribute("value")
End If
Next knoten
Else
'Es wurden keine Seitenelemente gefunden, die den gesuchten Namen enthalten
ActiveSheet.Cells(2, 3).Value = "Keine SecuNr. gefunden"
End If
'Speicher aufräumen
browser.Quit
Set browser = Nothing
Set knotenAst = Nothing
Set knoten = Nothing
End Sub
Viele Grüße,
Zwenn
Anzeige
AW: Einzelne Daten aus Quelltext in Excel importieren
30.09.2017 14:46:06
Bernd
Vielen vielen dank für deine schnelle Antwort. 😄
Noch eine grundsätzliche Frage:
In meiner Excel Datei habe ich bereits ein Modul mit einem Programmiercode. Verstehe ich es _ richtig, dass ich zum Ausprobieren des obigen Codes im gleichen Modul ein eigenes Makro (?) mit

Sub und End 

Sub erstelle und das dann einzeln ausführe?
Wenn das Makro funktioniert und sauber läuft, wie bringe ich beide Makros zusammen, damit das  _
in einem Schwung abläuft? Einfach untereinander schreiben?

Anzeige
AW: Einzelne Daten aus Quelltext in Excel importieren
30.09.2017 23:34:58
Bernd
Ich habe nun drei Makros gemacht, die ich hier gerne mit euch durchkauen würde:
Sub Werte_holen_und_Tabs_erzeugen()
ISIN_in_Name_und_SECU_Umwandeln
Neue_Tabs_aus_Tabelle_erstellen
End Sub
Im obigen Makro führe ich zwei Makros hintereinander aus.
Sub ISIN_in_Name_und_SECU_Umwandeln()
Dim browser As Object
Dim knotenAst As Object
Dim knoten As Object
Dim url As String
Dim Spalte As Integer
Dim startzeile As Integer
Dim endzeile As Integer
Dim numberws As Integer
On Error GoTo Fehler
Tabellenblatt = "Startseite"
Spalte = 3
startzeile = InputBox("Startzeilenummer der ISIN")
endzeile = InputBox("Endzeile der ISIN")
For n = startzeile To endzeile
a = Worksheets(Tabellenblatt).Cells(n, 2).Value 'Aktientitel
b = Worksheets(Tabellenblatt).Cells(n, Spalte).Value 'ISIN
c = Worksheets(Tabellenblatt).Cells(n, 4).Value 'SECU-ID
d = Worksheets(Tabellenblatt).Cells(n, 6).Value 'Börsen ID
e = Worksheets(Tabellenblatt).Cells(n, 7).Value 'Währung
f = Worksheets(Tabellenblatt).Cells(n, 8).Value 'Bereinigung_Splits
g = Worksheets(Tabellenblatt).Cells(n, 9).Value 'Bereinigung_Dividenden
h = Worksheets(Tabellenblatt).Cells(n, 10).Value 'Bereinigung_Bezugsrechte
i = Worksheets(Tabellenblatt).Cells(n, 11).Value 'Anfangsdatum
j = Worksheets(Tabellenblatt).Cells(n, 12).Value 'Enddatum
url = "http://www.ariva.de/" & b & "/historische_kurse"
Set browser = CreateObject("internetexplorer.application")
browser.Visible = False
browser.navigate url
Do Until browser.readyState = 4: DoEvents: Loop
'Auslesen des Aktiennamens aus der Überschrift 'Performance Adidas'
'Es wird zunächst der HTML Abschnitt gesucht, in dem diese Überschrift steht
'Das geht in diesem Fall über den zugewiesenen Namen der CSS Klasse class="arhead"
'Die Element, die diesen Klassennamen enthalten werden durchlaufen. Dabei wird
'für jedes geprüft, ob das Wort 'Performance' vorkommt.
'Die entsprechende Überschrift wird dann ohne das Wort 'Performance' in die
'Exceltabelle ausgegeben. Durch dieses Vorgehen werden auch Aktiennamen vollständig
'ausgegeben, die Leerzeichen enthalten
Set knotenAst = browser.document.getElementsByClassName("arhead")
If Not knotenAst Is Nothing Then
For Each knoten In knotenAst
If InStr(1, knoten.innertext, "Performance") > 0 Then
ActiveSheet.Cells(n, 2).Value = VBA.Trim(Right(VBA.Trim(knoten.innertext), Len( _
_
VBA.Trim(knoten.innertext)) - 11))
End If
Next knoten
Else
'Es wurden keine Seitenelemente gefunden, die den gesuchten Klassennamen enthalten
ActiveSheet.Cells(n, 2).Value = "Kein Aktienname gefunden"
End If
'Entscheidender HTML Abschnitt für SecuNr:
'Zunächst wird ein Array aus allen Tags mit dem Namen 'input' gebildet. Dieses
'Array wird dann durchlaufen, wobei nach dem Attribut 'name' mit dem Wert 'secu'
'gesucht wird. Wurde es gefunden, wird im entsprechenden Code Abschnitt direkt
'auf das Attribut value zugegriffen und der gewünschte Wert wird in die Tabelle
'eingetragen
Set knotenAst = browser.document.getElementsByTagName("input")
If Not knotenAst Is Nothing Then
For Each knoten In knotenAst
If knoten.getAttribute("name") = "secu" Then
ActiveSheet.Cells(n, 4).Value = knoten.getAttribute("value")
End If
Next knoten
Else
'Es wurden keine Seitenelemente gefunden, die den gesuchten Namen enthalten
ActiveSheet.Cells(n, 4).Value = "Keine SecuNr. gefunden"
End If
'Speicher aufräumen
browser.Quit
Set browser = Nothing
Set knotenAst = Nothing
Set knoten = Nothing
Next n
Exit Sub
Fehler:
MsgBox "Ein Fehler ist aufgetreten, bitte Makro bzw. Tabelle überprüfen!"
End Sub
Im obigen Makro habe ich den Code des Vorgängers angepasst auf meine Zwecke. Funktioniert gut.
Kurze Erklärung:
In einer Spalte schreibe ich die ISINs rein, füge die immer in den Link ein und mache dann die Auswertung über den Quelltext.
Sub Neue_Tabs_aus_Tabelle_erstellen()
Dim Spalte As Integer
Dim startzeile As Integer
Dim endzeile As Integer
Dim numberws As Integer
On Error GoTo Fehler
Tabellenblatt = "Startseite"
Spalte = 4
startzeile = InputBox("Startzeilenummer der Aktienkürzel")
endzeile = InputBox("Endzeile der Aktienkürzel")
For n = startzeile To endzeile
a = Worksheets(Tabellenblatt).Cells(n, 2).Value 'Aktientitel
b = Worksheets(Tabellenblatt).Cells(n, Spalte).Value 'ISIN
c = Worksheets(Tabellenblatt).Cells(n, 4).Value 'SECU-ID
d = Worksheets(Tabellenblatt).Cells(n, 6).Value 'Börsen ID
e = Worksheets(Tabellenblatt).Cells(n, 7).Value 'Währung
f = Worksheets(Tabellenblatt).Cells(n, 8).Value 'Bereinigung_Splits
g = Worksheets(Tabellenblatt).Cells(n, 9).Value 'Bereinigung_Dividenden
h = Worksheets(Tabellenblatt).Cells(n, 10).Value 'Bereinigung_Bezugsrechte
i = Worksheets(Tabellenblatt).Cells(n, 11).Value 'Anfangsdatum
j = Worksheets(Tabellenblatt).Cells(n, 12).Value 'Enddatum
ActiveWorkbook.Worksheets.Add After:=Worksheets(Worksheets.Count)
With ActiveSheet.QueryTables.Add(Connection:="TEXT;http://www.ariva.de/quote/historic/historic. _
csv?secu=" & c & "&boerse_id=" & d & "&currency=" & e & "&clean_split=" & f & "&clean_payout=" & g & "&clean_bezug=" & h & "&min_time=" & i & "&max_time=" & j & "" _
, Destination:=Range("$A$1"))
.Name = _
"Ariva_Kurse"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(4, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
ActiveSheet.Name = a
MsgBox "Die Kurse für " & a & " wurden erfolgreich in ein neues Tabellenblatt geladen."
Next n
Exit Sub
Fehler:
MsgBox "Ein Fehler ist aufgetreten, bitte Makro bzw. Tabelle überprüfen!"
End Sub
In diesem Makro habe ich einen Link, den ich mit verschiedenen Variablen aus meiner Tabelle füttere. Das Ergebnis ist ein neuer Tab mit den historischen Aktienwerten. Funktioniert auch gut.
Meine Fragen:
- In beiden Makros wiederholen sich ja Sachen, wie beispielsweise diese Inputbox von Start- und Endzeile. Kann ich das noch irgendwie vereinfachen, so dass ich das nur einmal eingebe?
- Kann allgemein was am Aufbau geändert werden, damit es später vielleicht schneller durchläuft? :)
- Später möchte ich in diesen neu erstellten Tabs noch Spalten mit Formeln einfügen, bspw. Durchschnitte errechnen und auf der Startseite dann anzeigen, ob da einer höher oder niedriger ist (grob gesagt). Was ist hier denn ein Schlagwort mit dem ich nach einer Vorlage googeln kann? :)
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Daten aus HTML in Excel importieren


Schritt-für-Schritt-Anleitung

Um Daten aus HTML in Excel zu importieren, kannst du die folgenden Schritte ausführen:

  1. VBA-Editor öffnen:

    • Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Neues Modul hinzufügen:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsm)" und wähle Einfügen > Modul.
  3. VBA-Code einfügen:

    • Kopiere den folgenden Code und füge ihn in das Modul ein:
    Option Explicit
    Sub AktienDatenHolen()
       Dim browser As Object
       Dim knotenAst As Object
       Dim knoten As Object
       Dim url As String
       url = "http://www.ariva.de/DE000A1EWWW0/historische_kurse"
       Set browser = CreateObject("internetexplorer.application")
       browser.Visible = False
       browser.navigate url
       Do Until browser.readyState = 4: DoEvents: Loop
       ' Aktienname aus der Überschrift holen
       Set knotenAst = browser.document.getElementsByClassName("arhead")
       If Not knotenAst Is Nothing Then
           For Each knoten In knotenAst
               If InStr(1, knoten.innertext, "Performance") > 0 Then
                   ActiveSheet.Cells(2, 2).Value = VBA.Trim(Right(VBA.Trim(knoten.innertext), Len(VBA.Trim(knoten.innertext)) - 11))
               End If
           Next knoten
       Else
           ActiveSheet.Cells(2, 2).Value = "Kein Aktienname gefunden"
       End If
       ' Secu-ID aus dem Quelltext holen
       Set knotenAst = browser.document.getElementsByTagName("input")
       If Not knotenAst Is Nothing Then
           For Each knoten In knotenAst
               If knoten.getAttribute("name") = "secu" Then
                   ActiveSheet.Cells(2, 3).Value = knoten.getAttribute("value")
               End If
           Next knoten
       Else
           ActiveSheet.Cells(2, 3).Value = "Keine SecuNr. gefunden"
       End If
       browser.Quit
       Set browser = Nothing
       Set knotenAst = Nothing
       Set knoten = Nothing
    End Sub
  4. Makro ausführen:

    • Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle AktienDatenHolen und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: „Kein Aktienname gefunden“

    • Überprüfe, ob die CSS-Klasse in der HTML-Datei korrekt ist. Manchmal kann sich die Struktur der Webseite ändern.
  • Fehler: „Keine SecuNr. gefunden“

    • Vergewissere dich, dass der HTML-Code das Input-Feld mit dem Namen "secu" enthält. Prüfe den Quelltext der Webseite.
  • Internet Explorer öffnet sich nicht

    • Stelle sicher, dass der Internet Explorer auf deinem System installiert und aktiviert ist. VBA verwendet diesen Browser für die Automatisierung.

Alternative Methoden

Wenn du keine VBA-Programmierung verwenden möchtest, kannst du auch die Funktion „Daten abrufen“ in Excel verwenden:

  1. Gehe zu Daten > Abrufen und transformieren > Aus dem Web.
  2. Gib die URL der Webseite ein und klicke auf OK.
  3. Wähle die benötigten Daten aus der Vorschau aus und lade sie in dein Arbeitsblatt.

Diese Methode ist einfacher, wenn du keine Programmierkenntnisse hast und funktioniert gut für statische Webseiten.


Praktische Beispiele

  1. Aktienname und SECU-ID abrufen:

    • Verwende den oben beschriebenen VBA-Code, um die Aktiennamen und SECU-IDs aus der angegebenen Webseite zu extrahieren.
  2. Daten aus einer anderen HTML-Datei importieren:

    • Du kannst den Code anpassen, um Daten von anderen URLs zu importieren. Ändere einfach die URL in der url-Variablen.
  3. Daten in mehreren Zellen speichern:

    • Modifiziere den Code, um die Daten in einer Schleife für mehrere Aktien abzurufen, indem du die URL dynamisch basierend auf einer Liste von Aktien erstellst.

Tipps für Profis

  • Fehlerbehandlung hinzufügen: Implementiere eine Fehlerbehandlung, um unerwartete Situationen elegant zu handhaben.

  • Daten automatisiert aktualisieren: Setze einen Zeitplan für die Ausführung des Makros, um die Daten regelmäßig zu aktualisieren.

  • Daten aus HTML in Excel importieren: Überlege, die QueryTables-Funktion von Excel zu verwenden, um Daten aus CSV-Dateien zu importieren, die von einer HTML-Seite bereitgestellt werden.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Daten aus einer HTML-Datei in Excel importieren? Du kannst mehrere Suchkriterien in deinem VBA-Code hinzufügen und die entsprechenden Zellen in Excel anpassen.

2. Was mache ich, wenn die Webseite nicht mehr verfügbar ist? Prüfe die URL und stelle sicher, dass die Webseite online ist. Manchmal ändern sich auch die Links.

3. Ist es möglich, Daten aus einer HTML-Datei ohne VBA zu importieren? Ja, du kannst die Excel-Funktion „Daten abrufen“ nutzen, um Daten aus einer HTML-Datei in Excel zu importieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige