質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

解決済

VBAの行への繰り返し方法について教えてくださいm(__)m

ekitabi
ekitabi

総合スコア12

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

2回答

0評価

0クリップ

330閲覧

投稿2022/06/16 13:46

編集2022/06/17 15:19

VBAの勉強を始めたばかりの初心者です。

マクロを用いて、WebAPIに接続して郵便番号検索を行うプログラムを実装しました。
セルのD2に郵便番号を記述して、真横のE2に結果が表示されるというものです。

それをD3,D4,D5…と下のセルも同じようにコピーをしたいのですが、プログラムの記述方法が分かりません。

【調べたこと】
まず、セルの行番号の取得関数を調べて実装してみましたが、行番号の取得は出来ましたが、うまく動作しませんでした。
あとは、マクロを行全体にかける方法など思いつく検索キーワードで検索しましたが、実現できませんでした。

お詳しい方いらっしゃいましたら、検索キーワードやヒントをいただけましたら幸いです。

【実現したいことイメージ】
D2       E2
105-0000  東京都港区
120-0000 東京都足立区
…続く

VBA

Private Sub Worksheet_Change(ByVal Target As Range) 'D2のセル値が変更されたときに処理を実行 If Target.Address = "$D$2" Then MsgBox "住所を取得します。" Call 郵便番号を取得 End If End Sub

VBA

Option Explicit ' HTTPにGETメソッドを送信して結果を得る Function GetHttp(url) As String Dim httpObj As Object, s As String ' URLのページを開く Set httpObj = CreateObject("MSXML2.XMLHTTP") httpObj.Open "GET", url httpObj.setRequestHeader "Content-Type", "text/plain" httpObj.send ' 終了まで待機 Do While httpObj.readyState <> 4 DoEvents Loop ' HTTPのステータスコードが200ならば成功 If (httpObj.Status = 200) Then s = httpObj.responseText GetHttp = "" & s Else GetHttp = "" Debug.Print "エラー:" & httpObj.statusCode End If End Function Sub 郵便番号を取得() Dim api As String, zip As String Dim json As String, result As String ' APIのURL --- (*1) api = "https://api~" ' シートから郵便番号の値を取得 --- (*2) zip = Sheet1.Range("D2").Value ' URLにアクセス --- (*3) json = GetHttp(api & zip) ' JSONから"result"のキーを抽出 --- (*4) result = GetJsonKey(json, "result", False) ' シートに設定 --- (*5) Sheet1.Range("E2").Value = result End Sub ' JSON文字列からキーkeyを取り出す --- (*6) Function GetJsonKey(JsonStr, key, enc) As String Dim d As Object If JsonStr = "" Then GetJsonKey = "" Exit Function End If Set d = CreateObject("htmlfile") d.Write "<meta http-equiv='X-UA-Compatible' content='IE=8' />" ' JavaScriptの関数を定義 --- (*7) d.Write "<script>" & _ "document.getjson = function(s, key, enc){" & _ "var vals = eval('('+s+')');" & _ "if (enc) { return JSON.stringify(vals[key]);}" & _ "else { return vals[key] }}" & _ "</script>" ' JavaScriptの関数を呼び出す --- (*8) GetJsonKey = d.getjson(JsonStr, key, enc) End Function

何卒よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

meg_

2022/06/16 14:15

> セルのD2に郵便番号を記述して、真横のE2に結果が表示されるというものです。 質問のコードがそのコードですか? > うまく動作しませんでした。 どんなコードを書いてどうなったのでしょうか? エラーが発生したならその内容を追記しましょう。
ekitabi

2022/06/17 06:10

書籍独自のapiを参照しており、apiURLの掲載を控えておりました。 情報不足で大変申し訳ございませんでした。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。