goo blog サービス終了のお知らせ 

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

Excel VBAで、REST(JSON)データ取得

2014-12-18 12:45:25 | Officeソフト&VBA
Excelのマクロ(VBA)を使って、
RESTでJSON形式で返ってくるサイトにアクセスして、
結果を表示したいということって、ありませんか?
(ないって・・・あると思ってください)

例えば、今、ある検索を、RESTでサーバー側で実行させていて、検索結果をJSON
で返して、ブラウザに表示しているんだけど、実は、Excelでも見たいんだよねえ~
というケース。


VBAでJSONを扱う
http://javascript.dohow.jp/advance/jsonvba.shtml


に、そのやり方が書いてあったので、やってみました。




■例

今、以下のJSONデータ
{
  "mytablename":"user",
  "mytable":[
    {"myid":"1","myname":"family1 last1","mydate":"2014/12/10"},
    {"myid":"2","myname":"family2 last2","mydate":"2014/12/10"},
    {"myid":"3","myname":"family2 last3","mydate":"2014/12/10"},
    {"myid":"4","myname":"family3 last4","mydate":"2014/12/10"}
   ]
}

が、jsontestdata.phpにアクセスすると、得られるとする。
(JSONでのレコードの書き方は
Javascript|JSONでの、レコードの表現方法(配列、連想配列)→{}と[]の違い
を参照)
これを取得する

■ソースコード

Sub ボタン1_Click()

'#########################################
'# JSON操作:VBAでJSONを扱う
'# http://javascript.dohow.jp/advance/jsonvba.shtml
'# から引用
'#########################################
Dim objSC As Object 'Script Control
Dim strFunc As String '関数文字列
Dim strJSON As String 'JSONデータ(文字列)
Dim objJSON As Object 'JSONファイルをパースしたもの

'# JSONの為の設定
Set objSC = CreateObject("ScriptControl")
objSC.Language = "JScript"
strFunc = "function jsonParse(s) { return eval('(' + s + ')'); }"
objSC.AddCode strFunc


'# jsontestdata.phpアクセス
target_url = "http://localhost/jsontestdata.php"
sendData = ""

' POSTで飛ばします
Set httpObj = CreateObject("MSXML2.XMLHTTP")
httpObj.Open "POST", target_url, False
Call httpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
httpObj.send (sendData)

strJSON = httpObj.ResponseText
Set objJSON = objSC.CodeObject.jsonParse(httpObj.ResponseText)

'# 結果表示
recno = 1
For Each rec In objJSON.mytable
Cells(recno, 1) = rec.myid
Cells(recno, 2) = rec.myname
Cells(recno, 3) = rec.mydate
recno = recno + 1
Next

End Sub



■実行してみた



■注意点

名前がmytable,mynameなど、myをつけている理由。

これをtableとしてしまうと、VBAはTable,Nameなどのように、
1文字目を大文字にしてしまう(VBAにそういうプロパティ等があるため)
ところが、大文字にしてしまうと、当然、違うものなので、エラーに
なってしまったりする。

それが面倒なので、全てにmyをつけている。

この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ExcelからマクロでPHPにアク... | トップ | IEの互換性の修正・テストを... »
最新の画像もっと見る

Officeソフト&VBA」カテゴリの最新記事