Puede que VBA no sea la mejor herramienta. De todos modos, solo por diversión, escribí un código muy contundente
Option Explicit
Public Sub Download()
' Declaraciones.
Dim xmlhttp As New MSXML2.XMLHTTP60
Dim StrURL As String
Dim StrResult As String
Dim StrMessageTitle As String
Dim StrMessageContent As String
Dim VarResult() As Variant
Dim RngResult As Range
Dim DblCounter As Double
' Configuración.
Set RngResult = Range("A1") ' Cambia esto si quieres colocar los resultados en otra celda
' Establecer la URL de la página.
StrURL = "https://finance.yahoo.com/quote/VOO?p=VOO&.tsrc=fin-srch"
' Limpiar la columna de RngResult.
RngResult. EntireColumn. ClearContents
' Configuración de la solicitud.
xmlhttp.Open "GET", StrURL, False
' Enviar la solicitud.
xmlhttp.send
' Comprobación de la respuesta.
If xmlhttp.responseText <> "" Then
' Extracción del título.
StrMessageTitle = Split(xmlhttp.responseText, "<title>")(1)
StrMessageTitle = Split(StrMessageTitle, "</title>")(0)
StrMessageTitle = HtmlDecode(StrMessageTitle)
' Extracción del precio usando un split. Asegúrate de que el HTML coincida con esta estructura.
StrMessageContent = Split(xmlhttp.responseText, "class=""Fw(b) Fz(36px) Mb(-4px) D(ib)""")(1)
StrMessageContent = Split(StrMessageContent, "</fin-streamer>")(0)
StrMessageContent = Split(StrMessageContent, ">")(1)
' Colocar el valor del precio en una celda en lugar de MsgBox.
RngResult.Offset(0, 1).Value = StrMessageContent
' Si quieres ver el contenido completo de la respuesta en la hoja de Excel.
StrResult = xmlhttp.responseText
ReDim VarResult(1 To UBound(Split(StrResult, ">")), 1 To 1)
For DblCounter = 0 To UBound(Split(StrResult, ">")) - 1
VarResult(DblCounter + 1, 1) = Split(StrResult, ">")(DblCounter) & ">"
Next
Application.ScreenUpdating = False
' Colocar todo el contenido en la columna A.
For DblCounter = 1 To UBound(VarResult)
RngResult.Offset(DblCounter - 1, 0).Value2 = VarResult(DblCounter, 1)
Next
Application.ScreenUpdating = True
End If
End Sub
Function HtmlDecode(str As String) As String
' Decodificación básica de caracteres HTML.
Dim dom As Object
Set dom = CreateObject("htmlfile")
dom.Open
dom.Write str
dom.Close
HtmlDecode = dom.body.innerText
End Function
Fuente:
https://stackoverflow-com.translate.goog/questions/76499653/extract-financial-data-from-webpage-to-excel?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc