2017-10-31 7 views
1

JSONリクエストから以下の変数を表示したいと思います。 C、D、E、F、G、Hのそれぞれの「時間」、「開」、「高」、「低」、「閉」、「容積」、「容積」である。単一のJSONリクエストから複数のセルと値を解析する

要求: https://min-api.cryptocompare.com/data/histoday?fsym=BTC&tsym=USD&limit=60&aggregate=3&e=CCCAGG

したがって、私はC2:C51にある "open"の値を見たいと思います。

私は次のマクロを書いた:デバッグは次の行にエラーがあることを示しているよう

Sub OHLCdata()                
Dim strURL As String              
Dim strJSON As String              
Dim strCurrency As String             
Dim strLength As Integer             
Dim i As Integer         
Dim http As Object              

strURL = "https://min-api.cryptocompare.com/data/histoday?fsym=" & strTicker & "&tsym=" & strCurrency & "&limit=" & strLength & "&aggregate=3&e=CCCAGG" 
strTicker = Range("A2") 
strCurrency = Range("A3")           
strLength = Range("A4")             
Set http = CreateObject("MSXML2.XMLHTTP")       
http.Open "GET", strURL, False          
http.Send                
strJSON = http.responsetext            
Set JSON = JsonConverter.ParseJson(strJSON)         
i = 2                  

For Each Item In JSON("DATA") 
Sheets(1).Cells(i, 1).Value = Item("time") 
Sheets(1).Cells(i, 2).Value = Item("open") 
Sheets(1).Cells(i, 3).Value = Item("high") 
Sheets(1).Cells(i, 4).Value = Item("low") 
Sheets(1).Cells(i, 5).Value = Item("close") 
Sheets(1).Cells(i, 6).Value = Item("volumefrom") 
Sheets(1).Cells(i, 7).Value = Item("volumeto")        
i = i + 1                 
Next                  
End Sub 

残念ながら、マクロが動作しません:

For Each Item In JSON("DATA") 

はしかし、私はする必要がありデータ(「データ」)を参照してください。

{"Response":"Success","Type":100,"Aggregated":true,**"Data"**:[{"time":1493769600,"close":1507.77,"high":1609.84,"low":1424.05,"open":1445.93,"volumefrom":338807.89999999997,"volumeto":523652428.9200001}, 

誰も私が間違っていることを説明することはできますか?事前に感謝します。

+0

'Tools/References'でオプションを' Require Variable Declaration'に設定してください。あなたのモジュールの始めに、 'Option Explicit'行を入力してください。これにより、他のエラーを見つけるのに役立ちます。 'Json.Converter'はネイティブのVBAの一部ではないので、より多くの情報がなければ、私たちは貧弱な推測しかできません。 –

+0

お返事ありがとうございます。次のエラーメッセージが表示されます。 "コンパイルエラー:プロシージャ内で無効です。"情報の不足について申し訳ありません。私は、次のgithubからJsonConverter.basをダウンロードします:https://github.com/VBA-tools/VBA-JSON/blob/master/JsonConverter.bas。また、Microsoft Scriptime Runningを有効にしました。どのように私はマクロを改善することができますか?ありがとうございました! – HJA24

+0

エラーを示す行は何ですか?あなたの投稿されたコードにはそれを行うべきことは何もありません。 –

答えて

0

誰もが私が間違っているのものを私に説明できますか?

あなたが近づいている:

  1. 私はあなたがおそらく*.basファイルをダウンロードし、それをインポートするのではなく、JSONパーサのコピー/貼り付けをした疑い。ファイルをコピーしてモジュールに貼り付けると、.basファイルでは有効ですが、モジュールには含まれていないため、*コンパイルエラー:内部プロシージャーが無効です。 * エラーメッセージ。
  2. 含まれる変数を定義する前にstrURLを作成します。したがって、変数は空白になります
  3. 結果を書き込むときに列番号がオフになるため、Bではなく列Aから開始されます。
  4. 変数の一部を宣言できません。
  5. JSONは辞書型のオブジェクトなので、キーは大文字と小文字が区別されます(別の方法で宣言しない限り)。したがって、DATADataは2つの異なるキーです。 Dataを使用する必要があります。

ここにあなたのコードが変更されています。 .basファイルをインポートすることを忘れずにコピー&ペーストしないでください。

Option Explicit 
Sub OHLCdata() 
Dim strURL As String 
Dim strJSON As String 
Dim strCurrency As String 
Dim strLength As Integer 
Dim strTicker As String 
Dim i As Integer 
Dim http As Object 

Dim JSON As Dictionary, Item As Dictionary 


strTicker = Range("A2") 
strCurrency = Range("A3") 
strLength = Range("A4") 

strURL = "https://min-api.cryptocompare.com/data/histoday?fsym=" & strTicker & "&tsym=" & strCurrency & "&limit=" & strLength & "&aggregate=3&e=CCCAGG" 

Set http = CreateObject("MSXML2.XMLHTTP") 
http.Open "GET", strURL, False 
http.Send 
strJSON = http.responsetext 
Set JSON = JsonConverter.ParseJson(strJSON) 
i = 2 

For Each Item In JSON("Data") 
Sheets(1).Cells(i, 2).Value = Item("time") 
Sheets(1).Cells(i, 3).Value = Item("open") 
Sheets(1).Cells(i, 4).Value = Item("high") 
Sheets(1).Cells(i, 5).Value = Item("low") 
Sheets(1).Cells(i, 6).Value = Item("close") 
Sheets(1).Cells(i, 7).Value = Item("volumefrom") 
Sheets(1).Cells(i, 8).Value = Item("volumeto") 
i = i + 1 
Next 
End Sub 

:BASファイルに表示Attributeラインに関しては、テキストエディタで開くと、あなたはCode Attributes For The VBA Object Browser上のチップピアソンの記事を参照してもよいです。一般的に、外部リンクを参照するのは悪い形式であると考えられています。しかし、私はここで良い議論を見つけることができませんでした。もし私がそれを逃したなら、誰かがコメントしてください、私はこれを編集します。

0

JSONデータを配列に取得し、次のサンプルコードに示すように出力することがあります。 JSON.basモジュールをVBAプロジェクトにインポートしてJSON処理を行います。ここで

Option Explicit 

Sub OHLCdata() 

    Dim sJSONString As String 
    Dim vJSON As Variant 
    Dim sState As String 
    Dim aData() 
    Dim aHeader() 

    With CreateObject("MSXML2.XMLHTTP") 
     .Open "GET", "https://min-api.cryptocompare.com/data/histoday?fsym=BTC&tsym=USD&limit=60&aggregate=3&e=CCCAGG", False 
     .send 
     sJSONString = .responseText 
    End With 
    JSON.Parse sJSONString, vJSON, sState 
    vJSON = vJSON("Data") 
    JSON.ToArray vJSON, aData, aHeader 
    With Sheets(1) 
     .Cells.Delete 
     .Cells.WrapText = False 
     OutputArray .Cells(1, 1), aHeader 
     Output2DArray .Cells(2, 1), aData 
     .Columns.AutoFit 
    End With 

End Sub 

Sub OutputArray(oDstRng As Range, aCells As Variant) 

    With oDstRng 
     .Parent.Select 
     With .Resize(1, UBound(aCells) - LBound(aCells) + 1) 
      .NumberFormat = "@" 
      .Value = aCells 
     End With 
    End With 

End Sub 

Sub Output2DArray(oDstRng As Range, aCells As Variant) 

    With oDstRng 
     .Parent.Select 
     With .Resize(_ 
       UBound(aCells, 1) - LBound(aCells, 1) + 1, _ 
       UBound(aCells, 2) - LBound(aCells, 2) + 1) 
      .NumberFormat = "@" 
      .Value = aCells 
     End With 
    End With 

End Sub 

私のために出力されます:

output

関連する問題