• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAでWEBデータを取り込む)

エクセルVBAでWEBデータを取り込む方法

このQ&Aのポイント
  • エクセルVBAを使ってWEBからデータを取り込む方法を教えてください。
  • 日付を入力することで指定したWEBページからデータを取得できるようにするためのVBAの書き方を教えてください。
  • 指定したURLに日付を可変にしてデータを取り込む方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

最初のコードは、 > http://***/0062/00620110.htmlとなるようです。 とするなら、以下になるのではありませんか?ただし、CDate(myDate)というのは、荒っぽい書き方です。 Sub Tes1() myDate = InputBox("オープンする日付を「月/日」のように入力してください。", "日付の入力", Format(Date, "m/d")) '本来は、エラー処理をここでする myURL = "0062/0062" & Format(CDate(myDate), "MMdd") Connection_URL = " http://***/" & myURL & ".html" End Sub > http://***/guid/?datest=2011-01-10&ch=109 109というのは何か分かりませんが、他が、定数なら、以下のようになるはずです。 こちらは、最低限のエラー処理はされています。 Sub Tes2() Dim myDate As Variant Const T As String = "109" myDate = Application.InputBox("オープンする日付を「月/日」のように入力してください。", "日付の入力", Format(Date, "m/d"), Type:=2) If IsDate(myDate) = False Then Exit Sub Connection_URL = " http://***/guid/?datest=" & Format(myDate, "yyyy-MM-dd") & "&ch=" & T & ".html" End Sub それから、「オープンする日付を「月/日」のように入力してください。」でなくても、yyyy/mm/dd スタイルでも可能なはずです。

noro6857
質問者

お礼

ありがとうございました。 表示様式を指定して記述すればいいのですね。 myURL = "0062/0062" & Format(Split(myDate, "/")(0) * 1, "00") & _   Format(Split(myDate, "/")(1) * 1, "00") を生かさねばと思って""などでつないでいました。 一応urlの表示はうまくいっている用なのですが、「http://**」は開けません。 インターネットに接続できません」とメッセージが出ちゃうんです。 WEBクリエで呼び出すとちゃんと張り付けることができるんですけどね。 なお、上記VBAのうち後段が抜けていました。 --html"のあと Columns(1).ClearContents  With ActiveSheet.QueryTables.Add(Connection:= _   "URL;" & Connection_URL, Destination:=Range("A1"))   .WebFormatting = xlWebFormattingNone   .WebTables = "9"   .Refresh BackgroundQuery:=False  End With End Sub これでエクセルに張り付けています。

すると、全ての回答が全文表示されます。

その他の回答 (11)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

>一応urlの表示はうまくいっている用なのですが、「 http://**」は開けません。 >インターネットに接続できません」とメッセージが出ちゃうんです。 たぶん、URLが、間違っているには違いないとは思います。 http://***/guid/?datest=2011-01-09&ch=109.html 例えば、貼りつけた後に、自動的に別のコードに変わっているとか、確認してください。 たぶん、どこかの放送の番組表のようですが、こちらでは、今のところ、調べようがありません。自己解決を望みますが、試せれば、こちらでチェックします。 お勧めしませんが、Google の短縮URLを使えば、後で消えてしまいますから、それを使ってもよいと思います。(たぶん、クレームがついた時には、もうURLは役に立たなくなっています。) Google URL Shortener http://goo.gl/ そこで生成されたを貼り付けてもよいです。2時間から、1日、1週間、ひと月、また恒久的なものがあります。 教えて!goo のURL http://goo.gl/qz5H7 (11/02/09 まで有効) なお、#1のお礼欄で書かれたマクロに関しては、はっきりと明言できませんが、こういうスタイルにしたほうがよいです。   ActiveSheet.QueryTables(1).Delete  ActiveSheet.Range("A1").CurrentRegion.ClearContents  With ActiveSheet.QueryTables.Add(Connection:= _   "URL;" & Connection_URL, Destination:=Range("A1"))   .WebFormatting = xlWebFormattingNone   .WebTables = "9"   .Refresh BackgroundQuery:=False End With #6129006 昨年の8月のご質問をひと通りざっと読みましたが、ずいぶん長く続いたようで、今回の流れの一部は、そこからのようです。そのスレのNo.29は同意しますが、私は、あまり質問者さんのレベルには斟酌を加えずに、フリーで許される範囲でコードを書きます。しかし私は、せいぜい数回程度の返事で、最近は元気はありません。特に、こちらのカテゴリでは、トラブルが多発したせいで、あまり書きません。

noro6857
質問者

お礼

もう一度最初から整理させていただきます。 下記は現在使用しているVBAです ※別のurlから取り込みたいために それに適した記述に変更したいと考えています。 下記のurlはhttp://www.***/0062/00620109.html です。 直したい別のurlは http://www.***/?datest=2011-01-11&ch=109 のような記述になります。 ------------------- Sub Using_Web_query30A() Dim arrMenu As Variant Dim myDate As String Dim myURL As String Dim Connection_URL As String arrMenu = Array(70, 80, 32, 62, 101, 102, 90, 120, 40, 22, 31) myDate = InputBox("オープンする日付を「月/日」のように入力してください。", _ "日付の入力", Format(Date, "m/d")) myURL = "0062/0062" & Format(Split(myDate, "/")(0) * 1, "00") & _ Format(Split(myDate, "/")(1) * 1, "00") Connection_URL = "http://***/" & myURL & ".html" Columns(1).ClearContents With ActiveSheet.QueryTables.Add(Connection:= _ "URL;" & Connection_URL, Destination:=Range("A1")) .WebFormatting = xlWebFormattingNone .WebTables = "9" .Refresh BackgroundQuery:=False End With End Sub ※arrMenu = Array…は不要なものです。 ------------------------ ご指示いただいたVBAで発生した、エラーメッセージをじっくり見る限り URLはしっかりと組成されていました。 WebTables = "9"というのは数字の持つ意味がよくわかりませんが 新URLだと変える必要があるかと思います。 gooのショートアドレスってなかなかいいですね。 早速2時間のアドレスを作りました よろしくお願いいたします

すると、全ての回答が全文表示されます。

関連するQ&A