2

EveOnlineというゲームで使用するExcelスプレッドシートを作成しています。私のスプレッドシートは、eve-marketdata.comというデータプロバイダーのWebサイトからデータを自動的に取得する必要があります。eve-marketdataの開発者ページ:http ://eve-marketdata.com/developers/item_history2.phpに、httpを介して「post」リクエストを送信することでデータをリクエストする方法についての説明があります。

例:市場履歴リクエストに使用されるURLは次のようになります:http: //api.eve-marketdata.com/api/item_history2.xml?char_name = venoushka patel次に、アイテムの45日間のデータを取得するとします。 id 34、リージョン10000002から。URLの最後に次のように配置します:item_id = 34、days = 45、region_ids = 10000022それぞれ、完成品の&記号で区切られます:api.eve-marketdata.com/api/ item_history2.xml?char_name = venoushka patel&type_ids = 34&region_ids = 1000002&days = 45(このサイトへの投稿規制によりhttp://を削除しました)

そのため、アイテムID、リージョンIDなどのスプレッドシートの情報を使用して、適切なURLを解析し、URLをサイトに送信してから、探している情報のみを取得して配置するための特定のセルが必要です。セルに。これは現在、xpathを利用する「importxml」機能のため、ExcelではなくGoogleドキュメントではるかに簡単です。ただし、Googleドキュメントではスプレッドシートあたりのxml呼び出しの数が50に制限されており、スプレッドシートには数千が含まれるため、Excelを使用する必要があります。

いいえ、「Webからのインポート」または「マップxml」をExcelのセル機能に使用するつもりはありません。これは、時間やリソースの効率が悪く、スプレッドシートで何千もの機能を実行できるためです。

これは、次のvbaコードを使用して実行できると言われています。

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URL = "http://www.somedomain.com"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")

問題は、Excelスプレッドシートのプログラミングは非常に得意ですが、これまでVBAを使用したことがないことです。Visual Basic Editorを開く方法は知っていますが、それだけです。最初に:

これをvbaエディターに貼り付けてから、ブックで呼び出すにはどうすればよいですか?関数()のようなものを最初に置き、最後に関数を置く必要があると思いますよね?

ワークシートでこの関数を呼び出して、必要なことを実行するにはどうすればよいですか?

誰かが上記のコードが何をするのか、そして私のタスクを実行するためにそれをどのように変更する必要があるのか​​説明できますか?

事前に、私はこれに関して受けたどんな助けにも本当に感謝します、そしてこれをする方法を必要とするコミュニティの大部分(そこに何千もあります)があります!

4

1 に答える 1

2

あなたはそれをそのように全くしないでしょう。まず、リクエストはPOSTではなくGETであるため、状況が変わります。次のようなものを使用できます。

    Function ImportData(sUrl As String) As Variant
        Dim oDoc As Object
        Dim oAttr As Object
        Dim oRow As Object
        Dim x As Long: x = 1
        Dim y As Long: y = 1
        Dim vData() As Variant

        Set oDoc = CreateObject("MSXML2.DOMDocument")
        With oDoc
            .Load sUrl
            Do: DoEvents: Loop Until .readystate = 4
            ReDim vData(1 To .getElementsByTagName("row").Length, 1 To 8)
            For Each oRow In .getElementsByTagName("row")
                For Each oAttr In oRow.Attributes
                    vData(x, y) = oAttr.Text
                    y = y + 1
                Next oAttr
                y = 1
                x = x + 1
            Next oRow
        End With

        ImportData = vData

    End Function


    Public Sub Test()
        Dim g
        'g = ImportData("http://api.eve-marketdata.com/api/item_history2.xml?char_name=venoushka%20patel&type_ids=34&region_ids=10000002&days=45")
        'or
        g = ImportData(Sheets(1).range("a1").Value)
        Sheets(1).Cells(2, 1).Resize(UBound(g), UBound(g, 2)).Value = g
    End Sub

通常のモジュールに配置してからマクロTestを実行することでテストでき、URLを配置する場所を確認できます。ただし、これを使用すると、学習曲線が急になる可能性があります。VBAの歯を切るのに最も簡単なプロジェクトにはなりません。

于 2012-11-27T07:56:46.203 に答える