• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:「Excel VBA」 Webクエリ マクロ「実行時エラー"1004"」一時ファイル容量少、IE7で実行不可能)

Excel VBA Webクエリ マクロ 実行時エラー "1004" 一時ファイル容量少、IE7で実行不可能

このQ&Aのポイント
  • Excel VBAのWebクエリマクロを実行する際に、一時ファイル容量が少なくてIE7で実行不可能なエラー"1004"が発生する問題があります。
  • 株価取得時にも同様のエラーが発生し、一度に取得できる行数が制限されています。
  • IE7では一時ファイル容量が1024MBに制限されているため、10~20行ぐらいで容量オーバーになり、"1004"エラーが発生します。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.5

思い出しました。qa4107528.html この頃からの課題が解決してないのですね... 放置は好きではないですが、参考までに動くサンプルの提示をしておきます。 Option Explicit Sub try_2()   '"日付 始値 高値 安値 終値 出来高 調整後終値*" '列項目名   Const CX As Long = 7              '配列の列数(項目数)   Const PTN = ">([^<>\n]+)<"           'データ抜き出しパターン   Const CHK = "<small>調整後終値*</small></th>"  'テーブル判断項目htmlTEXT   Dim ws  As Worksheet   Dim xh  As Object 'MSXML2.ServerXMLHTTP   Dim re  As Object 'VBScript.RegExp   Dim mc  As Object 'RegExp.Match   Dim url As String 'URLアドレス   Dim ret As String 'XMLHTTP.responsetext   Dim n  As Long  'chk文字存在判定   Dim x  As Long  'HTML項目Loop用   Dim cnt As Long  'データCOUNT   Dim i  As Long   Dim j  As Long   Dim k  As Long   Dim rx  As Long   Dim v, cd      'データ格納用配列,Loopコード用配列      Dim t As Single   t = Timer        On Error Resume Next   Set xh = CreateObject("MSXML2.ServerXMLHTTP")   On Error GoTo 0   If xh Is Nothing Then Exit Sub   Set ws = Sheets.Add 'ActiveSheet   'ws.UsedRange.Clear   ws.Range("A2:A5").Value = [{1301;1332;1334;1376}] 'サンプル   'A2から下に連続で銘柄コードが配置されている場合。   cd = ws.Range("A2", ws.Cells(ws.Rows.Count, 1).End(xlUp)).Value   rx = UBound(cd)   ReDim v(0 To rx, 1 To 200)   For i = 1 To 200 Step 4     v(0, i + 0) = "日付"     v(0, i + 1) = "高値"     v(0, i + 2) = "安値"     v(0, i + 3) = "終値"   Next      Set re = CreateObject("VBScript.RegExp")   re.Pattern = PTN   re.Global = True 'CD Loop   For i = 1 To rx     cnt = 0     x = 0     url = "http://table.yahoo.co.jp/t?g=d&s=" & cd(i, 1)     xh.Open "GET", url, False     xh.Send     If (xh.Status >= 200) And (xh.Status < 300) Then       ret = xh.responsetext       n = InStr(ret, CHK)       If n > 0 Then         ret = Mid$(ret, n + Len(CHK))         Set mc = re.Execute(ret)         For j = 1 To 50           For k = 1 To CX             Select Case k             Case 1, 3, 4, 5               cnt = cnt + 1               v(i, cnt) = mc(x).submatches(0)               If k = 1 Then                 If Not IsDate(v(i, cnt)) Then                   j = 50                   Exit For                 End If               End If             End Select             x = x + 1           Next k         Next j       End If     End If   Next i      ws.Range("B1").Resize(rx + 1, 200).Value = v      Set mc = Nothing   Set re = Nothing   Set xh = Nothing   Set ws = Nothing   Debug.Print Timer - t '500件だと約70sec End Sub #[win2000/xl2000/ie6][vista/xl2007/ie7]検証済み。

abierto
質問者

お礼

そうなんです。その後IE6で頑張っていたんですが。。 これは速いです! 私も、検証できました。 これで、この手の問題で悩んでいる方々も解決できますね! 有難う御座いました!

その他の回答 (4)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

Internet Explorer 7 では、Webクエリの連続実行は不具合が発生します。 セキュリティホール対策の為だそうです。 http://www2s.biglobe.ne.jp/~iryo/kabu/info/QA/qindex.html (6.Yahooファイナンス取得不安定) ですのでXMLHTTP オブジェクトを使う方法に変更されてはどうでしょう。高速に取得できます。 (MSXML2.XMLHTTP もしくは MSXML2.ServerXMLHTTP) http://www.f3.dion.ne.jp/~element/msaccess/AcTipsVbaXMLHTTP.html 参考QNo./qa4201932.html(サンプルコードは現在ソースが変更になっているため修正が必要)

abierto
質問者

お礼

先の回答に、更なるお礼はつけられないのでこちらに書きます。 その後、色々勉強した結果、配列を使っているところが鮮やかでした。 データ量が多くなってくると、この方法がいいですね。

abierto
質問者

補足

セキュリティホール対策の為ですか。。。 IE8ベータも一時ファイルは、制限されているようなので、正規版では期待できないようですね。

  • CMLT
  • ベストアンサー率40% (143/357)
回答No.3

>そろそろ、xpもきつくなってきたので 何がどうきつくなって来たのでしょうか?同じスペックならVistaSP1よりXPSP3の方が軽くて早いですし、MSが既に繋ぎだったVistaを見限っていますし、サポートライフサイクルもXPは2014年まで、VistaHomeは2012年まで。なにより、 >win7を見越して、そろそろvistaに乗り替えたい win7を見越して…であれば余計にwin7までXP使ってた方が良いんじゃないんですか?おそらくIE8以上が標準搭載でしょうが。 そもそも実行エラー1004は色々な原因で出ますが、一時ファイルの容量に起因しているのでしょうか?一時ファイルは再表示の高速化であって、ダウンロードのプレースフォルダではありませんよ?メモリ、仮想メモリやアドインの問題、マクロの編集等はお考えになられないので?

  • 374649
  • ベストアンサー率38% (203/527)
回答No.2

1行に1銘柄、50日分の株価を取得し400銘柄の株価を取得するということは銘柄ごとの4本足でなく現在値(終値)の取得ということですか、これだと銘柄数*50日分の株価を常時読み込む必要があるので大きなメモリーを使います。 普通はこのようなとり方をしないと思いますが、人それぞれなのでなんとも言えませんが.....一列に一銘柄(昇順か、降順で)ならば必要なセルは一行だけで済みます。 Excel2007なら256の壁を超えているので銘柄数も多く取れると思いますが、この手のマクロは重くなるのでVistaよりXPのほうが快適に動いておりますが、参考になれば幸いです。

abierto
質問者

補足

銘柄毎に高値安値終値の3本をとっています。 なので、かなりメモリーを消費しています。 マクロは圧倒的にExcel2007のほうが早いですし、メモリも3G以上動作させたいので、vista64bit上で使いたいのです。

  • kata_san
  • ベストアンサー率33% (423/1261)
回答No.1

>xpでIE6 で問題がないのならそちらを使用するのが賢明な選択ではないでしょうか? 大事な取引を無駄にしたくないということならなおさらです。 でなければ、WinXPx64にするなどを考えたほうが良いでしょう。

abierto
質問者

補足

先の方にも補足しましたが、 マクロは圧倒的にExcel2007のほうが早いですし、メモリも3G以上動作させたいので、vista64bit上で使いたいのです。 xp64はドライバが充実していないので、ちょっと難しそうなのです。

関連するQ&A