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

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

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

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

マクロ

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

0回答

826閲覧

駅と駅の所要時間を返すVBA

natori

総合スコア19

VBA

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

マクロ

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

1グッド

1クリップ

投稿2022/01/27 09:20

駅すぱあとのAPIを使用して、駅から駅の所要時間を出すVBAを作ろうとしています。
シート上は、以下の通りです。
A列:出発駅
B列:出発駅コード
C列:到着駅
D列:到着駅コード
E列:駅すぱあと検索で、普通乗車券の賃金が一番低いルートの、合計乗車時間
A・C列はあらかじめ入力しておき、
B・D・E列は駅すぱあとから引っ張ってくるようにしたいのですが、うまくうごきません。
駅すぱあとのAPIはこちらを参考にしています。
https://docs.ekispert.com/v1/api/search/course/extreme.html

大変恐れ入りますが、修正方法をご教授いただけないでしょうか。

VBA

1Sub ボタン1_Click() 2 'TestWebService 3 4 Dim Row As Integer 5 Dim xmlDom As MSXML2.DOMDocument60 6 Set xmlDom = New MSXML2.DOMDocument60 7 Row = 4 8 While Cells(Row, 1) <> "" 9 ' 駅コード取得&書き込み 10 Dim StartCode As Integer, DestCode As Integer 11 xmlDom.LoadXML (KickWebService("station/light", "&name=" & Cells(Row, 1))) 12 StartCode = ParseStationCode(xmlDom) 13 Cells(Row, 2) = StartCode 14 xmlDom.LoadXML (KickWebService("station/light", "&name=" & Cells(Row, 3))) 15 DestCode = ParseStationCode(xmlDom) 16 Cells(Row, 4) = DestCode 17 ' 所要時間&書き込み 18 Dim Route As Integer 19 Route = 0 20 xmlDom.LoadXML (KickWebService("search/course", _ 21 "&from=" & CStr(StartCode) & "&to=" & CStr(DestCode))) 22 Call ParseCourseTimeOnBoard(xmlDom, Route) 23 Cells(Row, 5) = Route 24 ' 次の行へ 25 Row = Row + 1 26 Wend 27End Sub 28 29'Webサービス呼び出し 30Private Function KickWebService(ByVal Api As String, ByVal Param As String) As String 31 Dim ApiKey As String, Url As String 32 '駅すぱあとのAPIキーです 33 ApiKey = "test_aaaaaaa" 34 Url = "https://api.ekispert.jp/v1/xml/" & Api & "?key=" & ApiKey & Param 35 Dim http As Object 36 Set http = CreateObject("MSXML2.XMLHTTP") 37 With http 38 .Open "GET", Url, False 39 .send 40 KickWebService = .responseText 41 End With 42End Function 43 44'駅簡易情報から駅コードを取得 45Private Function ParseStationCode(xmlDom As MSXML2.DOMDocument60) As Integer 46 Dim ResultSet As MSXML2.IXMLDOMNode, Point As MSXML2.IXMLDOMNode, Station As MSXML2.IXMLDOMNode 47 Set ResultSet = xmlDom.ChildNodes(1) 48 Dim i As Integer, j As Integer, k As Integer, Code As Integer 49 Code = 0 50 For i = 0 To ResultSet.ChildNodes.Length - 1 51 Set Point = ResultSet.ChildNodes.Item(i) 52 For j = 0 To Point.ChildNodes.Length - 1 53 If Point.ChildNodes.Item(j).nodeName = "Station" Then 54 Set Station = Point.ChildNodes.Item(j) 55 For k = 0 To Station.ChildNodes.Length - 1 56 If Station.ChildNodes(k).nodeName = "Type" Then 57 If Station.ChildNodes(k).nodeTypedValue = "train" Then 58 Code = Val(Station.Attributes(0).Text) 59 Exit For 60 End If 61 End If 62 Next k 63 End If 64 Next j 65 Next i 66 ParseStationCode = Code 67End Function 68 69'経路探索結果から、所要時間(区間の乗車時間合計)を取得 70Private Sub ParseCourseFare(xmlDom As MSXML2.DOMDocument60, ByRef Route As Integer) 71 Dim ResultSet As MSXML2.IXMLDOMNode, Course As MSXML2.IXMLDOMNode, Time As MSXML2.IXMLDOMNode 72 Set ResultSet = xmlDom.ChildNodes(1) 73 Dim i As Integer, j As Integer, k As Integer 74 For i = 0 To ResultSet.ChildNodes.Length - 1 75 Set Course = ResultSet.ChildNodes.Item(i) 76 For j = 0 To Course.ChildNodes.Length - 1 77 If Course.ChildNodes.Item(j).nodeName = "Time" Then 78 Set Time = Course.ChildNodes.Item(j) 79 For k = 0 To Time.Attributes.Length - 1 80 If Time.Attributes.Item(k).nodeName = "kind" Then 81 If Time.Attributes.Item(k).nodeTypedValue = " TimeOnBoard" Then 82 Route = Val(Time.ChildNodes.Item(0).nodeTypedValue) 83 Exit For 84 End If 85 End If 86 Next k 87 End If 88 Next j 89 Next i 90End Sub 91 92
oftn👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問