![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
仕様
windows7
EXCEL2007
@ニフティで3300銘柄の株価を取得していたのですが、急に取得できなくなりました。
@ニフティ http://stocks.nifty.com/cgi-bin/quote/q?c=1301&h …
今までのコード
UrlWeb = URL & code(i + 1, 1) & "&h=3m"
With Xhtp
.Open "GET", UrlWeb, False
.send
With objstm
.Open
.Type = adTypeBinary
.write Xhtp.responsebody
.Position = 0
.Type = adTypeText
.Charset = "EUC-JP"
dthtml = objstm.readText()
.Close
Mystr1 = InStr(dthtml, "日付")
Mystr2 = InStr(Mystr1, dthtml, "表示期間")
dthtml = Mid$(dthtml, Mystr1, Mystr2 - Mystr1)
With Reg
.Global = True
.Pattern = ""
dthtml = .Replace(dthtml, "")
.Pattern = "<tr bgcolor=""#FFFFFF"">"
dthtml = .Replace(dthtml, "")
.Pattern = ">([^\S]*)<"
dthtml = .Replace(dthtml, "")
.Pattern = ">([^<>]*)<"
dat = .Execute(dthtml).Count
ReDim dat1(dat)
With .Execute(dthtml)
For j = 1 To dat - 1
dat1(j) = .Item(j).SubMatches(0)
Next j
End With
End With
End With
End With
今まではこれで問題なく取得できてました。
しかし、エラーが2種類出るようになりました。
1.出たり出なかったりの2147483638 (8000000a)この操作を完了するのに必要なデータは、まだ利用できません。
以前は一銘柄平均400ミリ秒ぐらいでした。最大650最少200ぐらい。(画像参照(1))
2-1.インデックスエラー(画像参照(2))
htmlのソースと異なった値を取得している。たぶん、3つ上の値を取得しているのだと思いますが。
実際は前日始値を当日出来高、前日高値を当日前日比率を取得しています。
こちらは、今のところ銘柄コード1308で出ます。その他は検証出来てません。
2-2.2-1を無視してマクロを続行させても
通常、配列数が406が正常に取得できる値なのですが
日付・終値・・などの項目名だけを取得し配列数が6になりエラーが出ることもあります。
(画像参照。dat1(1~6)の部分のみ取得で配列数が6になります)
このエラーに関してはYAHOO時系列&(http://japan.marketnewsline.com/market/historica …)でも出ます。
上記2-2は出たり出なかったりします。再起動してマクロを実行しても
同じ銘柄ではなく、ランダムにエラーが出ます。
なんとか修正したいのですが、どうしたらいいか分かりません。
解決策を教えて下さい。
![「VBA WEB株価取得」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/0/803610_5497c0062f569/M.jpg)
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
WithステートメントのくくりとReplaceメソッドには改善の余地があるものの
コード自体は問題があるようには思えません。
もし私だったら、と考えると、
原因の究明と対策に注力するよりも
もう少し安定して取得できるサイトに切り替えるような気がします。
浅く試しただけですけど、http://japan.marketnewsline.com/のほうが堅そうな感じです。
あるいはWebBrowserを使う手法を試してみたりとか。
(サイト仕様上の問題だったら同じ結果かも)
#3300銘柄というのは想像つきませんが
#効率考えるとXMLHTTPオブジェクトは捨てがたいですね。
#普段から株やってるわけではないのであくまで参考意見として。
No.1
- 回答日時:
1、2-2のエラーについてはサイトの状態によるのではないでしょうか。
エラー時には手動でも時系列データが表示されないようです。
何かのタイミングの所為なのか、アクセス過多の対策なのかは定かではありませんが。
(深く突っ込んで検証してないです)
2-1については銘柄コード1308でも確認できません。確実な再現性がありますか?
この回答への補足
どうもありがとうございます。
やはり、サイトの状態によるのですね。
今は取得出来たり出来なかったりが続いています。
2-1については、確実な再現ができません。
取得できる状態の時に試してみましたが、前回のようなエラーが出ませんでした。
一時的とはいえ、エラーが出た以上は気になります。
サイトによってはアクセス過多の対策などされるんでしょうね。
if dat1() = などで6なら5秒ほどおき、再度取得を試みましたが駄目ですね。
どういうきっかけでなってるのか分かれば対策も考えられるのですが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロとシートの保護について教えてください。 1 2022/10/18 08:36
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/11 08:33
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Visual Basic(VBA) 追記する列を増やしたい 2つのデータを検索・照合して元データにないデータを下記マクロで商品名を追記し 9 2022/10/05 10:50
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) マクロで最終行を取得したい 4 2023/05/28 12:14
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Outlook.ApplicationをCreateOb...
-
マクロについて教えてください...
-
実行時エラー 438になった時の...
-
Exce2007でBorder クラスの Lin...
-
実行時エラー3001「引数が間違...
-
エクセルVBA、フリーフォームで...
-
エクセルエラー13型が一致しま...
-
VBAがブレークモードになっ...
-
プロシージャ名の取得
-
ASP.NET OleDbConnectionが定義...
-
Application.ActiveInspectorで...
-
エクセルVBA autofilterでエラー
-
VBSで変数の宣言はできないので...
-
VBA 新しいフォルダを作成する方法
-
テキストボックスに記述した数...
-
ExcelVBA Range クラスの Page...
-
Excel2003でworksheetクラスのC...
-
excel vbaでvlooupの変数がわか...
-
'Speak'メソッドは失敗しました
-
VBAのChrome操作のエラーについ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
【Excel VBA】マクロをボタンに...
-
なぜこんな初歩的なVBAのIf文で...
-
マクロについて教えてください...
-
実行時エラー3001「引数が間違...
-
VBAがブレークモードになっ...
-
ExcelVBA Range クラスの Page...
-
VBSで変数の宣言はできないので...
-
VBS実行時エラー オブジェクト...
-
OLEDB.NETで接続できない
-
プロシージャ名の取得
-
EXCEL VBAマクロ中断でデバッグ...
-
ADODB.Streamを使用してUTF-8を...
-
VBAでのエラー
-
実行時エラー48発生時のDLL特定...
-
Outlook.ApplicationをCreateOb...
-
VB6+SQL サーバー 2000 で 実行...
-
実行時エラー -'-2147417848
-
「コンパイルエラー:プロシー...
おすすめ情報