Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1720to1724
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Werte einer Internetseite ins Excel übertragen

Werte einer Internetseite ins Excel übertragen
31.10.2019 10:47:39
Andi
Hallo zusammen,
Ich hoffe mir kann jemand mit dem folgenden Thema weiterhelfen. Leider kenne ich mich damit noch nicht so gut aus.
Ich möchte Werte von einer Internetseite ins Excel übertragen. Das mache ich wie folgt:
Ich schaue mir den xpath des Wertes z.B. im Google Chrome an (rechte Maustaste auf entsprechenden Wert, Option: „Untersuchen“, rechte Maustaste auf Eintrag, Option: xpath)
Dieser sieht z.B. wie folgt aus:
//*[@id="NAME1"]/div[1]/div[1]/div[1]/article/article/div/table[1]/tbody/tr[3]/td[2]
Nun möchte ich den Wert wie folgt ins Excel übertragen:
Dim XPfad As Object
Set XPfad = IE.Document. _
getelementbyid("NAME1"). _
getElementsByTagName("div")(0). _
getElementsByTagName("div")(0). _
getElementsByTagName("div")(0). _
getElementsByTagName("article")(0). _
getElementsByTagName("article")(0). _
getElementsByTagName("div")(0). _
getElementsByTagName("table")(0). _
getElementsByTagName("tbody")(0). _
getElementsByTagName("tr")(2). _
getElementsByTagName("td")(1)
cells(y,x).value= XPfad.outertext
Das funktioniert leider nicht!
Fehler: Laufzeitfehler 91 - Objektvariable oder With-Blockvariable nicht festgelegt.
Gehe ich in der xpath-Struktur weiter nach unten funktioniert es (siehe unten). Woran liegt das?
Dim XPfad As Object
Set Pfad = IE.Document. _
getElementsByClassName("NAME2")(0). _
getElementsByTagName("article")(0). _
getElementsByTagName("article")(0). _
getElementsByTagName("div")(0). _
getElementsByTagName("table")(0). _
getElementsByTagName("tbody")(0). _
getElementsByTagName("tr")(2). _
getElementsByTagName("td")(1)
cells(y,x).value= XPfad.outertext

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: URL und Wunschlösung?
31.10.2019 10:54:02
Fennek
Hallo,
zum Ausprobieren wäre es nötig die URL und die gewünschten Info's zu kennen.
mfg
AW: Lösung?
31.10.2019 11:23:18
Fennek
Hallo,
dieser Powershell-Code

$userAgent = "Mozilla/4.0 (Windows NT 10.0; rv:70.0) Gecko/20100101 Firefox/35.0"
$url = 'https://www.onvista.de/aktien/fundamental/Adidas-Aktie-DE000A1EWWW0'
$ret = iwr $url -UserAgent $userAgent -DisableKeepAlive
$Bd1 = $ret.ParsedHtml.getElementsByTagName('tbody')[1]
$Bd2 = $ret.ParsedHtml.getElementsByTagName('tbody')[2]
$Bd3 = $ret.ParsedHtml.getElementsByTagName('tbody')[3]
$Bd4 = $ret.ParsedHtml.getElementsByTagName('tbody')[4]
$Bd5 = $ret.ParsedHtml.getElementsByTagName('tbody')[5]
$Bd6 = $ret.ParsedHtml.getElementsByTagName('tbody')[6]
$Bd7 = $ret.ParsedHtml.getElementsByTagName('tbody')[7]
$Bd8 = $ret.ParsedHtml.getElementsByTagName('tbody')[8]
$Bd1.outerText
$Bd2.outerText
$Bd3.outerText
$Bd4.outerText
$Bd5.outerText
$Bd6.outerText
$Bd7.outerText
$Bd8.outerText
liefert

Gewinn pro Aktie in EUR12,77 11,06 9,77 8,44 5,42 5,08 3,15
KGV21,60 24,94 28,24 21,61 30,83 29,55 28,54
Gewinnwachstum- - - - - - -
PEG1,31 1,61 2,13 1,36 0,55 4,41 0,46
Dividende (netto) in EUR5,08 4,38 3,81 3,35 2,60 2,00 1,60
Dividendenrendite1,84 1,58 1,38 1,83 1,55 1,33 1,77
Cashflow pro Aktie in EUR15,76 14,23 12,71 13,29 8,08 6,69 5,44
Kurs-Cashflow Verhältnis (KCV)17,50 19,38 21,70 13,72 20,68 22,44 16,52
Umsatz in Mio. EUR      - - - -
Umsatzwachstum      - - - -
Umsatz pro Mitarbeiter in EUR      384.365,79 372.978,48 318.244,05 304.473,04
Buchwert pro Aktie in EUR      32,02 31,64 32,12 28,30
Kurs-Buchwert-Verhältnis      5,69 5,28 4,67 3,17
Bilanzsumme in Mio. EUR      - - - -
Eigenkapitalquote      +40,76% +44,31% +42,53% +42,32%
Verschuldungsgrad      +145,31% +125,67% +135,10% +136,24%
dynam. Verschuldungsgrad      +349,50% +490,71% +646,95% +705,96%
Bilanzierungsmethode      - - - -
Marktkapitalisierung in Mio. EUR      36.328,79 34.075,36 30.253,57 17.999,71
Marktkapitalisierung/Umsatz      1,65 1,60 1,56 1,06
Marktkapitalisierung/Mitarbeiter in EUR      637.168,34 598.990,40 499.093,87 323.998,06
Marktkapitalisierung/EBITDA      12,71 13,34 16,03 12,38
Cashflow-Marge      +12,07% +7,76% +6,98% +6,44%
EBIT-Marge      +10,80% +9,75% +7,72% +6,26%
EBITDA-Marge      +13,04% +12,03% +9,78% +8,59%
Eigenkapitalrendite      +26,74% +17,04% +15,75% +11,22%
Gesamtkapitalrendite      +11,20% +8,19% +7,18% +5,25%
Cashflow Return on Investment      +16,94% +11,34% +8,88% +8,16%
Steuerquote      +28,13% +33,02% +29,50% +33,97%
Bis auf die Überschriften passt es.
mfg
Anzeige
AW: Lösung?
31.10.2019 12:20:35
Andi
Vielen Dank erstmal Fennek, dass du dir die Zeit nimmst.
Wie muss das ganze als Excel Makro aussehen?
AW: ähnlich
31.10.2019 12:46:40
Fennek
in VBA gehen die selben .getElementsByTagName('tbody')[1].outerText
mit 1..8
AW: Werte einer Internetseite ins Excel übertragen
31.10.2019 12:31:52
Günther
Moin,
installiere dir das kostenlose MS Add-In Power Query und du brauchst keine einzige Zeile VBA-Code.
Gruß
Günther
AW: Werte einer Internetseite ins Excel übertragen
31.10.2019 14:18:27
Andi
Vielen Dank Günther, ich hatte mir das schon mal angeschaut, aber ich meine damit bin ich zu unflexibel. Ich wüsste gerne, wie es als Makro funktioniert.
Als Excel Makro
31.10.2019 16:40:08
Zwenn
Hallo Andi,
mit dem Makro unten bekommst Du alle Kennzahlen mit Kopfzeilen in die Tabelle geschrieben, von der aus das Makro gestartet wird. Es beginnt in Zelle A1. Ich habe da jetzt nix kommentiert, aber sprechende Variablennamen gewählt. Anhand derer solltest Du mit Deinem VBA-Lvl nachvollziehen können, was das macht.
Ich habe gleich die Sonderfälle abgefangen, die ich gesehen habe (Text oder Zahl, Prozentzahlen, nur ein -) Alle Zahlen werden als Zahlen eingetragen, alle Prozentzahlen also solche. Die positiven Prozentzahlen mit führendem +, wie auf der Webseite. Negative Prozentzahlen werden entsprechend behandelt. Text wird rechtsbündig formatiert, damit die Tabelle nicht unruhig aussieht.
Vor dem ersten Aufruf die Onvista Seite manuell im IE öffnen und die Coockie Meldung wegklicken

Sub OnvistaKennzahlen()
Dim browser As Object
Dim url As String
Dim knotenKennzahlContainer As Object
Dim knotenTabellen As Object
Dim knotenEinzelTabelle As Object
Dim knotenKopfZeile As Object
Dim knotenKopfZellen As Object
Dim knotenEinzelKopfZelle As Object
Dim knotenDatenBereich As Object
Dim knotenDatenZeilen As Object
Dim knotenEinzelDatenZeile As Object
Dim knotenDatenZellen As Object
Dim knotenEinzelDatenZelle As Object
Dim aktuelleZeile As Long
Dim aktuelleSpalte As Long
Dim zeilenUmbruchIndex As Long
Dim zwischenErgebnis As String
'url = "https://www.onvista.de/aktien/fundamental/Infineon-Aktie-DE0006231004"
url = "https://www.onvista.de/aktien/fundamental/Adidas-Aktie-DE000A1EWWW0"
aktuelleZeile = 1
aktuelleSpalte = 1
'Internet Explorer initialisieren, Sichtbarkeit festlegen,
'URL aufrufen und warten bis Seite vollständig geladen wurde
Set browser = CreateObject("internetexplorer.application")
browser.Visible = False
browser.navigate url
Do Until browser.ReadyState = 4: DoEvents: Loop
Set knotenKennzahlContainer = browser.document.getElementsByClassName("KENNZAHLEN")(0)
If Not knotenKennzahlContainer Is Nothing Then
Set knotenTabellen = knotenKennzahlContainer.getElementsByTagName("table")
For Each knotenEinzelTabelle In knotenTabellen
Set knotenKopfZeile = knotenEinzelTabelle.getElementsByTagName("thead")(0)
Set knotenKopfZellen = knotenKopfZeile.getElementsByTagName("th")
For Each knotenEinzelKopfZelle In knotenKopfZellen
If aktuelleSpalte = 1 Then
zeilenUmbruchIndex = InStr(1, Trim(knotenEinzelKopfZelle.innertext), Chr(13))
Cells(aktuelleZeile, aktuelleSpalte).Value = Trim(Left(knotenEinzelKopfZelle. _
innertext, zeilenUmbruchIndex - 1))
Else
Cells(aktuelleZeile, aktuelleSpalte).NumberFormat = "@"
Cells(aktuelleZeile, aktuelleSpalte).HorizontalAlignment = xlRight
Cells(aktuelleZeile, aktuelleSpalte).Value = Trim(knotenEinzelKopfZelle.innertext)
End If
aktuelleSpalte = aktuelleSpalte + 1
Next knotenEinzelKopfZelle
aktuelleZeile = aktuelleZeile + 1
aktuelleSpalte = 1
Set knotenDatenBereich = knotenEinzelTabelle.getElementsByTagName("tbody")(0)
Set knotenDatenZeilen = knotenDatenBereich.getElementsByTagName("tr")
For Each knotenEinzelDatenZeile In knotenDatenZeilen
Set knotenDatenZellen = knotenEinzelDatenZeile.getElementsByTagName("td")
For Each knotenEinzelDatenZelle In knotenDatenZellen
If aktuelleSpalte = 1 Then
Cells(aktuelleZeile, aktuelleSpalte).Value = Trim(knotenEinzelDatenZelle. _
innertext)
Else
If Trim(knotenEinzelDatenZelle.innertext)  "" Then
If IsNumeric(Trim(knotenEinzelDatenZelle.innertext)) Then
Cells(aktuelleZeile, aktuelleSpalte).NumberFormat = "#,##0.00"
Cells(aktuelleZeile, aktuelleSpalte).Value = CDbl(Trim _
(knotenEinzelDatenZelle.innertext)) _
Else
Select Case Left(Trim(knotenEinzelDatenZelle.innertext), 1)
Case "+"
Cells(aktuelleZeile, aktuelleSpalte).NumberFormat = """+""0.00%"
zwischenErgebnis = Trim(knotenEinzelDatenZelle.innertext)
zwischenErgebnis = Right(zwischenErgebnis, Len(zwischenErgebnis) - 1)
zwischenErgebnis = Left(zwischenErgebnis, Len(zwischenErgebnis) - 1)
Cells(aktuelleZeile, aktuelleSpalte).Value = zwischenErgebnis / 100
Case "-"
If Len(Trim(knotenEinzelDatenZelle.innertext)) > 1 Then
Cells(aktuelleZeile, aktuelleSpalte).NumberFormat = "0.00%"
zwischenErgebnis = Trim(knotenEinzelDatenZelle.innertext)
zwischenErgebnis = Left(zwischenErgebnis, Len(zwischenErgebnis) - 1)
Cells(aktuelleZeile, aktuelleSpalte).Value = zwischenErgebnis / 100
Else
Cells(aktuelleZeile, aktuelleSpalte).NumberFormat = "@"
Cells(aktuelleZeile, aktuelleSpalte).HorizontalAlignment = xlRight
Cells(aktuelleZeile, aktuelleSpalte).Value = _
Trim(knotenEinzelDatenZelle.innertext)
End If
Case Else
Cells(aktuelleZeile, aktuelleSpalte).NumberFormat = "@"
Cells(aktuelleZeile, aktuelleSpalte).HorizontalAlignment = xlRight
Cells(aktuelleZeile, aktuelleSpalte).Value = Trim(knotenEinzelDatenZelle. _
innertext)
End Select
End If
End If
End If
aktuelleSpalte = aktuelleSpalte + 1
Next knotenEinzelDatenZelle
aktuelleZeile = aktuelleZeile + 1
aktuelleSpalte = 1
Next knotenEinzelDatenZeile
aktuelleZeile = aktuelleZeile + 1
aktuelleSpalte = 1
Next knotenEinzelTabelle
Columns("A:A").EntireColumn.AutoFit
Else
MsgBox "Keine Kennzahlen gefunden"
End If
'Aufräumen
browser.Quit
Set browser = Nothing
Set knotenKennzahlContainer = Nothing
Set knotenTabellen = Nothing
Set knotenEinzelTabelle = Nothing
Set knotenKopfZeile = Nothing
Set knotenKopfZellen = Nothing
Set knotenEinzelKopfZelle = Nothing
Set knotenDatenBereich = Nothing
Set knotenDatenZeilen = Nothing
Set knotenEinzelDatenZeile = Nothing
Set knotenDatenZellen = Nothing
Set knotenEinzelDatenZelle = Nothing
End Sub
Wenn Du die Kennzahlen flexiebler brauchst, kannst Du die statt in die Tabelle z.B. auch in Dictionaries schreiben und anschließend machen was Du willst.
Viele Grüße,
Zwenn
Anzeige
AW: Als Excel Makro
31.10.2019 19:11:32
Andi
Hallo Zwenn,
super, vielen Dank!
Ich habe das Makro gerade ausprobiert. Es funktioniert!
Ich schaue es mir morgen genauer an.
Grüße
Andi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige