電子書籍の厳選無料作品が豊富!

いつもいつもお世話になっております。
直接VBAの内容ではない質問かもわかりませんが、ここが一番識者の方が多く
いつもお世話になっているので、質問させていただきます。

Google Mapで
出発点と到着点を指定して電車を利用して所要時間を得るVBAに挑戦しております。

電車利用はあらゆるサイトでdirflg=tと記述するように説明されており、試してみ
ましたが、どうしても自動車による所要時間となってしまいます。

時間をかけて試してみてdirflg=rでやっと電車を選択することができました。
自分の環境だけの問題なのか、Google Mapの仕様変更なのか、釈然としません。

もし関連するサイトや、詳細な内容をご存じの方がいらっしゃいましたらご教示願
いたいと思い投稿させていただきました。何卒よろしくお願します。

*** 環境はWindows10 64Bit Excel 2016 IE Ver11.0.46です。***

Sub Main()
Dim URL As String
Dim A As String
Dim B As String
Dim IE As Object

A = "東京都千代田区丸の内1丁目"
B = "東京都千代田区永田町1丁目7-1"

'=== 経路パラメータ dirflg=t ==================================
URL = "https://maps.google.co.jp/maps?hl=ja&dirflg=t&sa … & EncodeURL(A) _
& "&daddr=" & EncodeURL(B)

'=== 経路パラメータ dirflg=r ==================================
'URL = "https://maps.google.co.jp/maps?hl=ja&dirflg=r&sa … & EncodeURL(A) _
& "&daddr=" & EncodeURL(B)
'====================================================

Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate (URL)
IE.Visible = True
End Sub
'###### URL エンコード 64Bit
Private Function EncodeURL(ByVal sWord As String) As String
Dim d As Object
Dim elm As Object

sWord = Replace(sWord, "\", "\\")
sWord = Replace(sWord, "'", "\'")
Set d = CreateObject("htmlfile")
Set elm = d.createElement("span")
elm.setAttribute "id", "result"
d.appendChild elm
d.parentWindow.execScript "document.getElementById('result').innerText" & _
"= encodeURIComponent('" & sWord & "');", "JScript"
EncodeURL = elm.innerText
End Function

A 回答 (2件)

こんにちは。



ご質問内容は、VBAの内容ではなく、オプションスイッチ(URL バラメータ)の内容ですから、然るべきサイトを探し当てればよいだけだと思います。

http://www.erichstauffer.com/technology/google-m …

dirflg=h Switches on “Avoid Highways” route finding mode.
dirflg=t Switches on “Avoid Tolls” route finding mode.
dirflg=r Switches on “Public Transit” – only works in some areas.
dirflg=w Switches to walking directions

英文ですと、dirflg =r は、公共交通を意味しているようです。

下記によれば
https://lovelog.eternal-tears.com/web/google-map …

•dirflg=d 車 'driving
•dirflg=r 電車 'Public transit
•dirflg=w 徒歩 'worlking
•dirflg=b 自転車 'bycicle
•dirflg=h 高速道路を避ける 'Avoid to high ways
•dirflg=t 有料道路を避ける 'Avoid to tolls

だそうです。

なお、二点間は、ある程度の距離がなければ、公共交通が使えませんね。
A = "東京都千代田区丸の内1丁目"
B = "長野県諏訪市ヤマト3-3-5"
 'エプソンの工場のあるところで試してみました。

なお、私が使っている EngcodeURL は、以下のようなものです。
Function EncodeURL(ByVal sWord As String) As String
  With CreateObject("ScriptControl")
   .Language = "JScript"
   EncodeURL = .CodeObject.encodeURIComponent(sWord)
  End With
End Function
    • good
    • 1
この回答へのお礼

WindFaller様
本当に、いつもいつもご教示いただき、ありがとうございます。

'https://lovelog.eternal-tears.com/web/google-map
は私もたどり着きましたが

PC
dirflg=d 車
dirflg=t 電車(デフォルト)
dirflg=w 徒歩

スマホ
dirflg=d 車(デフォルト)
dirflg=r 電車
dirflg=w 徒歩
Mapwiki(すでにドメイン失効している)によると、下記の通りになっている。
dirflg=d 車
dirflg=r 電車
dirflg=w 徒歩
dirflg=b 自転車
dirflg=h 高速道路を避ける
dirflg=t 有料道路を避ける

となっておりPC用では、dirflg=t 電車(デフォルト)なっていたので釈然としない
感じを受けたものです。
(たしかにスマホ用では、dirflg=r 電車となっていますが・・・)

またEngcodeURLについては、私も以前WindFaller様がご提示された方法を使用して
いた記録は残っているのですが、今あらためて使用してみると次のエラーとなりました。

*******************************
実行時エラー 429
ActiveXコンポーネントは
オブジェクトを作成できません。
*******************************

なので、どこから見つけてきたのかは、忘れてしまったのですが、今の方法で対応して
おります。
たぶん自宅PCがWindows10(64Bit)に成ってからだと思うのですが、記憶がさだかではあ
りません。なにしろ物好きな64歳のじいさんなもので・・・(笑)

いずれにしてもWindFaller様にまたまたお世話になりました。ありがとうございます。
情報収集のため、もう少し開けておきます。

お礼日時:2017/09/30 13:18

今みましたが、


>With CreateObject("ScriptControl")
>実行時エラー 429
>ActiveXコンポーネントは

C:\Windows\System32\msscript.ocx
だから、32bit版しかありませんから、64 bit版のmsscrip.ocx を探しだしイントールするか、
http://www.eonet.ne.jp/~gakana/tablacus/scriptco …
こんな方法を取るか、私も考えなくてはならないです。

64bit の件については、近々、PCを新しくするつもりですので、その時に分かるものだとは思います。相当、直さなくてはならない部分が出て来るかと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!