-1

Nasdaq の Web サイト、Apple の URL ( http://www.nasdaq.com/symbol/aapl/dividend-history )から配当履歴の更新可能なクエリを作成したいと思います。

Excel のネイティブの「新しい Web クエリ」を実行しようとすると、配当履歴テーブルが選択可能なオプションのように見えません。この情報をスプレッドシートに抽出する最良の方法は何ですか?

可能であれば、特定のセルにあるティッカーを参照してクエリを実行できると、非常に役立ちます。

アドバイスをいただければ幸いです。

編集: 特に配当とその発表日を探していますが、この情報は Nasdaq の Web サイトにまとめられているものしか見つかりませんでした。よりExcelに適した代替手段が利用可能な場合は、それも役立ちます.

4

1 に答える 1

0

これを試してみてください - VBA Web スクレイピングは最も洗練された方法ではありませんが、目的を達成するためのすべてのツールが用意されています。

Option Explicit

Sub Test()
    Call PasteNasdaqTickerTableHtmlToSheet(ThisWorkbook.Sheets("Sheet4"), "aapl")
End Sub

Sub PasteNasdaqTickerTableHtmlToSheet(ByRef ws As Worksheet, ByVal strTicker As String)

    Dim strTableData As String
    Dim objDataObject As Object

    strTableData = GetTableHtmlFromUrl("http://www.nasdaq.com/symbol/" & strTicker & "/dividend-history", "quotes_content_left_dividendhistoryGrid")

    Set objDataObject = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")

    With objDataObject
        .SetText strTableData
        .PutInClipboard
    End With

    ws.PasteSpecial Format:="Text", link:=False, DisplayAsIcon:=False

End Sub


Function GetTableHtmlFromUrl(ByVal strUrl As String, ByVal strTableId As String) As String

    Dim objHtmlReader As Object
    Dim strDocumentHtml As String
    Dim objHtmlParser As Object
    Dim objHtmlTables As Object
    Dim strTableHtml As String
    Dim intTableCounter As Integer

    On Error GoTo ErrHandler

    'get document html
    Set objHtmlReader = CreateObject("MSXML2.XMLHTTP")
    With objHtmlReader
        .Open "GET", strUrl, False
        .Send
        strDocumentHtml = .ResponseText
    End With
    Set objHtmlReader = Nothing

    'return all html if no id supplied
    If strTableId = "" Then
        GetTableHtmlFromUrl = strDocumentHtml
        Exit Function
    End If

    'now parse html for tables
    Set objHtmlParser = CreateObject("htmlfile")
    objHtmlParser.body.innerHTML = strDocumentHtml
    Set objHtmlTables = objHtmlParser.getElementsByTagName("table")

    'iterate tables and check id against our input
    For intTableCounter = 1 To objHtmlTables.Length
        If objHtmlTables.Item(intTableCounter).getAttribute("id") = strTableId Then
            strTableHtml = objHtmlTables.Item(intTableCounter).outerHTML
            Exit For
        End If
    Next intTableCounter
    Set objHtmlTables = Nothing
    Set objHtmlParser = Nothing

    'return table html
    GetTableHtmlFromUrl = strTableHtml

    Exit Function

ErrHandler:
    Debug.Print Err.Number & " : " & Err.Description
    Set objHtmlReader = Nothing
    GetTableHtmlFromUrl = ""

End Function
于 2016-05-28T02:45:53.000 に答える