出産前後の痔にはご注意!

EXCELのwebクエリ機能を使ってリアルタイムの為替情報を表に反映させたく、以下のページをみながらやってみました。
参照:http://www.hello-pc.net/howto-excel/exc_rate/
ですが、表が反映されません。(https://gyazo.com/fab14a26e303fdde0f25fd74ae332055
その際に図のようなエラー表示がされました。

どうすれば反映されるようになりますでしょうか?
ご助言いただければ幸いです。

「EXCELのwebクエリが反映されない。」の質問画像

このQ&Aに関連する最新のQ&A

A 回答 (3件)

スクリプトエラーは、以前は、IEのオプションで修正できたのですが、今は、それをやっても無理のようです。

もうここの書き込みは、顧みられることもないかもしれませんが、#2で書いたものが中途半端ですから、完成形を作っておきます。

http://nikkei225jp.com/fx/
(VBAコード内で文字化けする可能性がありますので、再度、登録しなおしてください strURL = http://nikkei225jp.com/fx/  "URL"をコーテーションマークで囲んでください。)

取得先は、『日経の為替チャート』(他も試みましたが、失敗しました。)
このマクロは、サーバーに負担を掛けるようなものではありませんが、ループして使うのは問題が残ると思います。なるべく、PC自体にも負担を掛けないためには、参照設定をしたほうがよいと思います。(その意味が分かる方のみに限ります)

なお、サイトが更新されれば、取得できなくなる可能性がありますから、このコードは、2016/5/25のタイム・スタンプということにしておきます。

'//
Sub OnTimeGetExRates()
  Dim objIE As Object ''As InternetExplorer 'Microsoft Internet Control:参照設定
  Dim ChgRates As Variant
  Dim Countries As Variant
  Dim strURL As String
  Dim i As Long, j As Long, k As Long
  Dim buf As Variant
  Dim arBuf(5) As Variant
  Dim Kinds As Variant
  Dim StCell As Range
  '20160525 
  '最初の書き出しセルの場所
  Set StCell = Range("A2")
  
  Set objIE = CreateObject("InternetExplorer.Application")
  'Set objIE = New InternetExplorer '事前バインディングの場合
  On Error GoTo ErrHandler
  ''**************
  ''取得先 at May 25,2016/ no guarantee after the future.
  strURL = "http://nikkei225jp.com/fx/"
  ''*************
  Countries = Array("ドル円", "ユーロ円", "ポンド円", "スイスフラン円", _
                 "豪ドル円", "ニュージーランド円", "ユーロドル", "ドルインデックス")
  ChgRates = Array("511", "514", "515", "513", "516", "517", "523", "501") '"V518" 不明
  Kinds = Array("V", "H", "L", "C", "Z", "T")
  
  objIE.Navigate2 strURL
  j = 1
  Do While objIE.Busy Or objIE.readyState <> 4: DoEvents: Loop
  With objIE.document
        For i = 1 To UBound(ChgRates) + 1
         On Error Resume Next
         buf = ""
         buf = .getElementByID("V" & ChgRates(i - 1)).InnerText
         For k = 0 To 5
          arBuf(k) = .getElementByID(Kinds(k) & ChgRates(i - 1)).InnerText
         Next k
         If StCell.Cells(i, 1).Value = "" Then
             StCell.Cells(i, 1).Value = Countries(i - 1)
         End If
         For k = 0 To 5
           StCell.Cells(i, k + 2).Value = arBuf(k)
         Next k
         On Error Resume Next
        Next i
    End With
ErrHandler:
If Err.Number <> 0 Then
     MsgBox Err.Number & " :" & Err.Description
End If
objIE.Quit
Set objIE = Nothing
Beep
End Sub

'//
「EXCELのwebクエリが反映されない。」の回答画像3
    • good
    • 0
この回答へのお礼

ありがとうございます。
すみません、マクロやVBAについての知識が全く無く、それらを調べておりベストアンサーを選択するのを忘れてしまっておりました。。大変申し訳ありませんでした。。
ご相談なのですが、もし可能であれば、これらを反映したエクセルデータをお送りいただくことはできないでしょうか・・。firestorage等にアップいただけると大変助かります。。
あつかましいお願いをしてしまい申し訳ありません。何卒ご検討の程、よろしくお願いいたします。

お礼日時:2016/05/25 21:44

私が見た限りでは、サイトが常に更新を続けているので、Webクエリでは、取れないような仕組みになっていると思うです。

IE を立ち上げて、その日経の為替のページの為替欄を右クリックしてみると、「要素の検査(分析)」の、マウスメニュー(コンテクスト)が出てきません。

おまけに、今、私がしばらく開発のために開けていたら、自動更新が停止されてしまいました。それで、Refreshコマンドをかけたら、IEがハングしてしまいました。

それで、いろいろ考えた挙句、マクロのIEオブジェクトで取得する方法しか思いつきませんでした。他の為替のページで試したらいかがでしょうか。ただ、こちらのマクロは、繰り返しを頻繁にすれば別かもしれまんせが、決して、サーバーの負担など掛けはしていないはずです。

これは、為替の大きな文字の部分(中心レート?)だけです。


'// 標準モジュール

Sub OnTimeGetExRates()
 Dim objIE As Object ''InternetExplorer   'Microsoft Internet Control
 Dim ChgRates As Variant
 Dim Countries As Variant
 Dim strURL As String
 Dim i As Long
 Dim buf As Variant
'Set objIE = New InternetExplorer
 Set objIE = CreateObject("InternetExplorer.Application")
 On Error GoTo ErrHandler
 strURL = "http://nikkei225jp.com/fx/"
 Countries = Array("ドル円", "ユーロ円", "ポンド円", "スイスフラン円", _
         "豪ドル円", "ニュージーランド円", "ユーロドル", "ドルインデックス")
 ChgRates = Array("V511", "V514", "V515", "V513", "V516", "V517", "V523", "V501") '"V518" 不明
 objIE.Navigate2 strURL
 Do While objIE.Busy Or objIE.readyState <> 4: DoEvents: Loop
 With objIE.document
    For i = 1 To UBound(ChgRates) + 1
     On Error Resume Next
     buf = ""
     buf = .getElementById(ChgRates(i - 1)).innerText
     If Cells(i, 1).Value = "" Then
       Cells(i, 1).Value = Countries(i - 1)
     End If
     Cells(i, 2).Value = buf
     On Error Resume Next
    Next i
  End With
ErrHandler:
''objIE.Refresh ''これは、一応禁止にしておきます。
If Err.Number <> 0 Then
   MsgBox Err.Number & " :" & Err.Description
End If
objIE.Quit
Set objIE = Nothing
Beep
End Sub
'//
取得後の画面
「EXCELのwebクエリが反映されない。」の回答画像2
    • good
    • 1

提示されたリンク先で「Webクエリで取り込めないもの」の中に


「スクリプトエラー」が出るWebサイト
とあるので取り込めないのでは?
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q株価関連情報を取得できるAPIを知りたい

株価関連の、自分用のソフトウエアを作りたいと思っています。
そこで、株価関連情報を取得できるAPIを知りたいです。

速報性はあまり気にしません。20分ディレイとか、1日ディレイとかでもいいです。

自分なりに探してみたのですが、現時点で使えるAPIはほとんど無いように思いましたので、細かいことは言いません。
xmlとか、CSVとか、rssとか、それなりにシステム的に処理できる形で
何らかの株価関連情報を取得できるAPIをご存知でしたら、何でも良いので教えて下さい!!

Aベストアンサー

楽天RSS http://marketspeed.jp/feature/rss/index.html
岡三RSS http://www.okasan-online.co.jp/ont/function/okasan_rss/
↑この2つはリアルタイムに株価を取得するものです。

株価データダウンロードサイト http://k-db.com/site/default.aspx
↑これは日足相当のデーターをCSVでダウンロードできるサイトです。

あるいは、普通のWebサイトの情報を、自分でHTMLを解析して情報を取得したりします。これはいわゆるスクレイピングと呼ばれるやりかたです。

QWebクエリで取り込みができないページというのはあるのでしょうか?

Excel2003にてWebクエリで下記のページを取り込みを行うと、取得ができませんでした といった趣旨のメッセージが出てきてしまい取り込みができない状態です。
(対象取込先 : http://finance.livedoor.com/quote/ranking?p=1&t=daily&k=price&m=sum)
Webクエリで取り込みができないページというのはあるのでしょうか。
それとも、何か設定の問題なのでしょうか。


とりあえず、他のサイトなどでは問題なく使用出来ています。

このあたりお詳しいかた、ご教授いただけたらと思います。よろしくお願いします。

Aベストアンサー

試してみたところ403エラーが返ってきているようですね。
これはおそらく相手サーバー側の方で弾いている可能性が高いかと思います。どうやって弾いているのかは推測でしかありませんが、例えばrefererの対応一つでそうやって弾くことは簡単にできますのでエクセルのwebクエリでは取込できないサイトということになるかと思います。

Q自分のEXCELに株価を自動的に取り込みたい!

パソコンを使って趣味の株取引をしています
EXCELでプログラムを作り売買を決めていますが、対象は30銘柄です

その銘柄の時価を手入力でセルにインプットしています
この手入力が大変煩わしいのです

株価が変わった時、もしくは一定時間ごとに私のシートの指定したセルに株価を自動的に入力してくれるプログラム、またはサービスはありませんか?


目的】時価入力が頻繁で大変だから自動化したいのです  シート内のセルではなくファイルの中に書き込んでおいてくれても結構です

Aベストアンサー

http://oshiete.goo.ne.jp/qa/5677546.html

Q為替データをエクセルにダウンロード出来るサイト

為替データをリアルタイムで取得して、エクセルに
ダウンロードして処理したいのですが、
そのような事の出来るサイトは無いでしょうか。

Aベストアンサー

システムに関しては全く無知です。

株価のリアルタイムダウンロードの質問は時々あり、次が参考になっているようです。為替も同じじゃないでしょうか?

Excelで株投資
http://www2s.biglobe.ne.jp/~iryo/kabu/index.html
このなかの、右下のほうで、
■ 解析ツール関連VBAの解説
┣[1]-1Webから株価データ取得マクロ(Yahoo)
 ┣[1]-2Webから株価データ取得マクロ(Infoseek)

参考URL:http://www2s.biglobe.ne.jp/~iryo/kabu/index.html

Qエクセル ログインが必要なページのwebクエリ

エクセル ログインが必要なページのwebクエリ

XP microsoft visual basic 6.0 です
可能かどうかもわからず頑張りましたができませんでした

やりたいこと
VBAを使い yahooメール に ID と pass を入力してログイン
ログイン後 yahooメール受信箱 のアドレスをエクセル webクエリ に登録
webクエリ の設定で自動更新
yahooメールにメールを受信したらエクセルに自動で表示

よろしくお願いします

Aベストアンサー

ログインは出来ている、ということですね?

私が書いたコードで説明すると
変数lctURLにログインしたページのURLを取得しています。
そこで、QueryTables.AddメソッドのConnectionを
Connection:="URL;" & lctURL
とすればどうでしょうか。

QExcel VBAでWebクエリ更新

VBA初心者です。

Excel VBAで、Webクエリを更新させ、取得したデータを同じBook内の別のSheetに
コピーさせたうえで、データのソート等を行いたいと考えています。

上記の操作をマクロで記録し、走らせてみると、Webクエリのデータ更新(取得)が
完了する前に、それ以降の操作に進んでしまいます。

Webクエリのデータ更新(取得)が完了してから、次の操作に進ませるためには、
どのようにすれば良いでしょうか?
よろしくお願いします。

Aベストアンサー

WEBクエリを「更新する」マクロをキチンと書いていますね?
(しばしば更新じゃなく「毎回WEBクエリをイチから埋め込み直す」マクロを書いてる初心者さんが多いので)

で、通常は
sub macro1()
 activesheet.querytables(1).refresh backgroundquery:=false
’以下続きの作業
 msgbox "DONE"
end sub

とかで十分です。


#シートにこれまでに何度も何度もWEBクエリを埋め込み直していて、収拾がつかない状態になっていないよう気を付けてください。まっさらのシートに一つWEBクエリを埋めた状態から作業してみて下さい。

QWEBクエリが使えない場合のHPデータの取り込み方

ホームページにexcel形式で保存をされているデータを自動的に取り込みたいです。Webクエリを使用して取り込もうと思ったのですが
上手くいかず、取り込みができません。
オフィスは2003を使っています。取り込みたいデータは
http://alic.lin.go.jp/livestock/index.html の統計にある
データです。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

ご質問の意義がわかってないのかもしれませんが、Excel ファイルが既に
サイトで用意されてますので、そのまま素直にファイルをダウンロード
すれば良いだけなのでは?

  リンク上でIE の右クリックメニュー「対象をファイルに保存」

何らかの事情があって、IE を使いたくない...という事でしょうか?

ならば、Html 版も用意されているようですから、そちらを使えば Web
クエリで取り込めると思いますよ。

また、その Excel ファイル名(パスも含め)が既知ならば、

  1. Excel のファイルを開くコマンド
  2. ファイル名欄に http:// で始まる Excel ファイルのパス
    を入力、またはコピペ

で直接 Excel 上に開くこともできます。VBA で表現すれば、

Sub sample()
  Dim wb As Workbook
  Set wb = Workbooks.Open("http://lin.lin.go.jp/alic/statis/dome/data2/j_excel/1010a.xls")
  ' // 必要な処理
End Sub

ですね。このように Excel で開いてしまえば好きなように加工できます。

こんにちは。

ご質問の意義がわかってないのかもしれませんが、Excel ファイルが既に
サイトで用意されてますので、そのまま素直にファイルをダウンロード
すれば良いだけなのでは?

  リンク上でIE の右クリックメニュー「対象をファイルに保存」

何らかの事情があって、IE を使いたくない...という事でしょうか?

ならば、Html 版も用意されているようですから、そちらを使えば Web
クエリで取り込めると思いますよ。

また、その Excel ファイル名(パスも含め)が既知ならば、

  1....続きを読む

QエクセルのWEBクエリで取り込めないデータ(続)

QNo6887062で教えていただいたWEBからデータを取り出すVBA(A15)で対象URLのレイアウトが変更になってしまいました。そこで引き続き活用したいため修正方法を教えていただければと思います。
URLの変更については一部対応できたのですが、取り出す範囲、除去する方法です。
具体的にはQ&Aの中で書きますので、上記VBAを修正できる方でお願いします。

Excel2010/WinXP

Aベストアンサー

こんにちわ

>>あと、もし曜日に関係ない従来のアドレスが使えるとしたら、・・・
>これは忘れたほうがいいです。
これは、言葉足らずでした。ここで算出した日付を今週の日付として使用しています。
これを無くしますと、サイトの中から探す必要があります。

あなたの提示されたマクロでうまくいかなかった原因は
一部のサイトで、"4:00~"のデータが欠落していたからです。

URLを一部を変えている理由
大勢の人が、一斉にアクセスしないようにするためと、
MSXML2使ったダウンロードを喜ばないサイトもあります。

金曜日の17時前後のテスト、土日のテストもしてください。

Sub use_XMLHTTP()
Dim myList As Range
Dim myRge As Range
Dim objHttp As Object
Dim strURL As String
Dim myTp1, myTp2, myTp3
Dim i As Long, j As Long, k As Long
Dim 月曜日日付 As Date
Dim myStr As String

Application.ScreenUpdating = False

If Format(Date, "aaa") = "日" And Time > TimeValue("23:50:00") Then
MsgBox "いまの時間帯は、実行できません。"
Exit Sub
ElseIf Format(Date, "aaa") = "月" And Time < TimeValue("00:10:00") Then
MsgBox "いまの時間帯は、実行できません。"
Exit Sub
ElseIf Format(Date, "aaa") = "金" And _
(Time > TimeValue("16:50:00") And Time < TimeValue("17:10:00")) Then
MsgBox "いまの時間帯は、実行できません。"
Exit Sub
End If

Select Case Weekday(Date, vbMonday)
Case Is <= 4 '月、火、水、木
月曜日日付 = Date - Weekday(Date, vbMonday) + 1
Case 5 '金
If Time < TimeValue("17:00:00") Then
月曜日日付 = Date - 4
Else
月曜日日付 = Date + 3
End If
Case Else '土、日
月曜日日付 = Date - Weekday(Date, vbMonday) + 8
End Select

With Sheets("Sheet2")
Set myList = .Range(.Range("A1"), .Range("A" & Rows.Count).End(xlUp))
End With


Set objHttp = CreateObject("MSXML2.XMLHTTP")

With objHttp
For Each myRge In myList

strURL = "http://www.st●●●igio.com/program/list/prg/prgid/" & myRge.Value & _
"/" & Format(月曜日日付, "yyyy/mm/dd") & "/"

'Debug.Print strURL
.Open "GET", strURL, False
.Send

If (.Status < 200 Or .Status >= 300) Then
MsgBox strURL & " のページは見つかりませんでした。"
Else
myTp1 = .responseText
Sheets("Sheet1").Columns("A:B").ClearContents
Sheets("Sheet1").Cells(1, 1).Value = "■" & Format(月曜日日付, "yymmdd") & _
"SD" & myRge.Value
myTp1 = Split(myTp1, "<h3>")

For k = 1 To UBound(myTp1)
j = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("Sheet1").Cells(j, 1).Value = "■" & Left$(myTp1(k), InStr(myTp1(k), "<") - 1)

myTp2 = Split(myTp1(k), "<td class=""title"">")
For i = 1 To UBound(myTp2)
myTp3 = Split(myTp2(i), "</td><td>")
j = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("Sheet1").Cells(j, 1).Value = myTp3(0)
Sheets("Sheet1").Cells(j, 2).Value = Left$(myTp3(1), InStr(myTp3(1), "<") - 1)
Next i
Next k

'2003まで2007以降は未チェック
'myStr = Dir(ThisWorkbook.Path & "\" & Sheets("Sheet1").Range("A1").Value & ".xls")
myStr = Dir(ThisWorkbook.Path & "\" & Sheets("Sheet1").Range("A1").Value & ".xlsx")
If myStr <> "" Then myStr = Format(Date, "_mmdd")
Sheets("Sheet1").Copy
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Range("A1").Value & myStr
ActiveWorkbook.Close
End If

Next myRge
End With
Set objHttp = Nothing
Application.ScreenUpdating = True

End Sub

こんにちわ

>>あと、もし曜日に関係ない従来のアドレスが使えるとしたら、・・・
>これは忘れたほうがいいです。
これは、言葉足らずでした。ここで算出した日付を今週の日付として使用しています。
これを無くしますと、サイトの中から探す必要があります。

あなたの提示されたマクロでうまくいかなかった原因は
一部のサイトで、"4:00~"のデータが欠落していたからです。

URLを一部を変えている理由
大勢の人が、一斉にアクセスしないようにするためと、
MSXML2使ったダウンロードを喜ばないサイトもあり...続きを読む

QExcel 「webクエリ」の接続失敗アラートダイアログを出させない方法は?

Excel2000で一定時間おきに あるサイトをwebクエリで見に行き、その結果をテキストファイルで吐き出すマクロを作成しています。
webクエリ機能は普通、ネットワークエラー等の理由でweb参照が出来なかった場合、「サーバーが見つかりませんでした」という
エラーダイアログが出ますが、vbaの記述でこのアラートを表示しないようにする方法はありませんでしょうか?
(ダイアログが出てしまうとその時点で処理が停止し、ひいては定期更新がストップしてしまうので、これを回避したいです)

ちなみに、
Application.DisplayAlerts = False
では回避できませんでした。

何卒お知恵をお貸しください。

Aベストアンサー

On Errorステートメントで対応できませんでしょうか?

参考URL:http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_140_02.html

Qセル番号を返す関数

エクセルで、セル番号を返す関数はありますか??
セルの内容ではなくて、番号です。(A1、B3など)
調べてみましたがなかなか見つからなかったので、
わかる方教えてください。
宜しくお願い致します。

Aベストアンサー

文字として"C4"を返す。
=ADDRESS(ROW(C4),COLUMN(C4),4)

式を入力したセルの位置を文字列で返す。
=ADDRESS(ROW(),COLUMN(),4)

ADDRESSの3つ目の引数を変えると
$C$4
$C4
C$4
C4
の4つの形に出来ます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング