VBAの勉強を始めたばかりの初心者です。
マクロを用いて、WebAPIに接続して郵便番号検索を行うプログラムを実装しました。
セルのD2に郵便番号を記述して、真横のE2に結果が表示されるというものです。
それをD3,D4,D5…と下のセルも同じようにコピーをしたいのですが、プログラムの記述方法が分かりません。
【調べたこと】
まず、セルの行番号の取得関数を調べて実装してみましたが、行番号の取得は出来ましたが、うまく動作しませんでした。
あとは、マクロを行全体にかける方法など思いつく検索キーワードで検索しましたが、実現できませんでした。
お詳しい方いらっしゃいましたら、検索キーワードやヒントをいただけましたら幸いです。
【実現したいことイメージ】
D2 E2
105-0000 東京都港区
120-0000 東京都足立区
…続く
VBA
1Private Sub Worksheet_Change(ByVal Target As Range) 2'D2のセル値が変更されたときに処理を実行 3 4 If Target.Address = "$D$2" Then 5 MsgBox "住所を取得します。" 6 Call 郵便番号を取得 7 End If 8 9End Sub
VBA
1Option Explicit 2 3 4' HTTPにGETメソッドを送信して結果を得る 5Function GetHttp(url) As String 6 Dim httpObj As Object, s As String 7 ' URLのページを開く 8 Set httpObj = CreateObject("MSXML2.XMLHTTP") 9 httpObj.Open "GET", url 10 httpObj.setRequestHeader "Content-Type", "text/plain" 11 httpObj.send 12 ' 終了まで待機 13 Do While httpObj.readyState <> 4 14 DoEvents 15 Loop 16 ' HTTPのステータスコードが200ならば成功 17 If (httpObj.Status = 200) Then 18 s = httpObj.responseText 19 GetHttp = "" & s 20 Else 21 GetHttp = "" 22 Debug.Print "エラー:" & httpObj.statusCode 23 End If 24End Function 25 26 27Sub 郵便番号を取得() 28 Dim api As String, zip As String 29 Dim json As String, result As String 30 31 ' APIのURL --- (*1) 32 api = "https://api~" 33 ' シートから郵便番号の値を取得 --- (*2) 34 zip = Sheet1.Range("D2").Value 35 ' URLにアクセス --- (*3) 36 json = GetHttp(api & zip) 37 ' JSONから"result"のキーを抽出 --- (*4) 38 result = GetJsonKey(json, "result", False) 39 ' シートに設定 --- (*5) 40 Sheet1.Range("E2").Value = result 41End Sub 42 43' JSON文字列からキーkeyを取り出す --- (*6) 44Function GetJsonKey(JsonStr, key, enc) As String 45 Dim d As Object 46 If JsonStr = "" Then 47 GetJsonKey = "" 48 Exit Function 49 End If 50 Set d = CreateObject("htmlfile") 51 d.Write "<meta http-equiv='X-UA-Compatible' content='IE=8' />" 52 ' JavaScriptの関数を定義 --- (*7) 53 d.Write "<script>" & _ 54 "document.getjson = function(s, key, enc){" & _ 55 "var vals = eval('('+s+')');" & _ 56 "if (enc) { return JSON.stringify(vals[key]);}" & _ 57 "else { return vals[key] }}" & _ 58 "</script>" 59 ' JavaScriptの関数を呼び出す --- (*8) 60 GetJsonKey = d.getjson(JsonStr, key, enc) 61End Function
何卒よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー