MENU  □ MANUAL  □ 新着記事  □ 新規トピック追加  □ トピック一覧  □ SEARCH  □ 過去ログ
ログ内検索
・ キーワードを複数指定する場合は 半角スペース で区切ってください。
・ 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
・ 過去ログから探す場合は過去ログをチェック。
・ 過去ログは番号が大きいほど新しいログです。

キーワード/
検索条件/ (AND) (OR)
検索範囲(現在のログ)
(過去ログ1) (過去ログ2) (過去ログ3) (過去ログ4) (過去ログ5)
(過去ログ6) (過去ログ7) (過去ログ8) (過去ログ9) (過去ログ10)
(過去ログ11) (過去ログ12) (過去ログ13) (過去ログ14) (過去ログ15)
(過去ログ16) (過去ログ17) (過去ログ18) (過去ログ19) (過去ログ20)
(過去ログ21) (過去ログ22) (過去ログ23) (過去ログ24) (過去ログ25)
(過去ログ26) (過去ログ27) (過去ログ28) (過去ログ29) (過去ログ30)
(過去ログ31) (過去ログ32) (過去ログ33) (過去ログ34) (過去ログ35)

過去ログ13 を検索

HIT数 / 27件
NO.105209  Webクエリで落としたデータの転記の高速化
■投稿者/ もも
■投稿日/ 2008/01/11(17:06)
□URL/

お世話になります。

 売買履歴を管理するために、あらかじめ入力してある
 銘柄コードを参照して、銘柄名と終値を入力するマクロ
 を作成いてみたく、まず、クエリで株価データを作業
 スペースに落してそこから、銘柄名と終値を転記する
 マクロを作成いたしましたが、少しでも高速化したい
 と思い質問させていただきました。

  じーっと、作成したマクロを見つめていて、落とした
 銘柄名データから、不要な(株)や、(アップ)、(ダウン)
 といった文言を削除するとき、一度、クエリのデータを
 変数にいれて、その変数に数回、replaceをかければと
 も思いましたが、何もエラーが出ず入力はできましたが
 入力内容が一致しないという問題に直面したりと苦戦し
 ましたが、なんとか動くものができたような状態です。

  ステップアップしたく思いコメントいただけましたら
 幸いです。

   コード 銘柄名 終値
 1 2929
 2 3434
 3 6767
 4 7878
 5 1414


Sub action()

Dim k(1) As String
Dim n As Integer
Dim l As Integer
Dim i As Integer
Dim code As String
Dim ws As Worksheet


Set ws = Worksheets("Home")

Application.ScreenUpdating = False
Application.CutCopyMode = False

On Error Resume Next
ws.ShowAllData
On Error GoTo 0

n = ws.Range("C20000").End(xlUp).Row
l = ws.Range("D20000").End(xlUp).Row

For i = n To l Step -1

code = ws.Range("C" & i).Value


With ws.QueryTables.Add(Connection:= _
"URL ;http://quote.yahoo.co.jp/q?s=" _
+ code + "&d=v1", Destination:=Range("X1"))

.RefreshStyle = xlOverwriteCells
.AdjustColumnWidth = False
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "13"
.Refresh BackgroundQuery:=False

End With

k(0) = ws.Range("X1").Offset(1, 2).Value: ws.Range("D" & i).Value = k(0)





With ws.Range("D" & i)

.Replace What:="アップ", Replacement:=""
.Replace What:="ダウン", Replacement:=""
.Replace What:="変わらず", Replacement:=""
.Replace What:="(株)", Replacement:=""

End With

If ws.Range("Q" & i) = "" Then _
k(1) = ws.Range("X1").Offset(1, 4).Value: ws.Range("O" & i).Value = k(1)

Next

Application.ScreenUpdating = True
Application.CutCopyMode = True

Set ws = Nothing

End Sub

 
 


この記事にはVBAのコードが含まれています。

緑の太文字→注釈
茶色の太文字→条件分岐
赤の太文字→ループ
青の太文字→その他



++++++++++++++++++++
OS      ⇒Windows XP
Version⇒Excel 2003
++++++++++++++++++++
親記事
削除チェック/

NO.105218  Re[1]: Webクエリで落としたデータの転記の高速化
■投稿者/ n
■投稿日/ 2008/01/11(20:36)
□URL/

こんにちは。
Webクエリを毎回作成し直す必要はありますか?
そうでなければ、予め作成しておいて、マクロ内では

With ws.QueryTables(1)
.Connection = "URL ;http://quote.yahoo.co.jp/q?s=" & code & "&d=v1"
.Refresh BackgroundQuery:=False
End With

これでいいはず。
そのほうが、余分な[名前定義]が増えません。
[名前定義]は定期的に削除してますか?
一度、
MsgBox ActiveWorkbook.Names.Count
で確認してみてください。あまり多いと不具合の元にもなります。

>その変数に数回、replaceをかければと
>も思いましたが、何もエラーが出ず入力はできましたが
>入力内容が一致しないという問題
k(0) = ws.Range("X1").Offset(1, 2).Value
k(0) = Replace(k(0), "アップ", "")
k(0) = Replace(k(0), "ダウン", "")
k(0) = Replace(k(0), "変わらず", "")
k(0) = Replace(k(0), "(株)", "")
ws.Range("D" & i).Value = k(0)
これでは問題があるという事でしょうか?

もしくは、セル範囲に対してReplaceメソッドを使うなら、Loopの外で
C列のl(L)行からn行までの範囲に対してまとめて使えば良いと思います。
(l→n ではなく n To l Step -1 なのは何か意図が?)


この記事にはVBAのコードが含まれています。

緑の太文字→注釈
茶色の太文字→条件分岐
赤の太文字→ループ
青の太文字→その他
記事NO.105209 のレス /
削除チェック/

NO.105224  Re[2]: Webクエリで落としたデータの転記の高速化
■投稿者/ もも
■投稿日/ 2008/01/11(22:47)
□URL/

nさま 回答ありがとうございます。

 これまで、ひとのプログラムを借文して、マクロを
動かしていましたが、とても勉強になりました。

>Webクエリを毎回作成し直す必要はありますか?

 いえ、毎日、10行ほどの入力して追加していくだけなので
 作成しなおさずに処理できるなら一番です。

 ただ、繰り返し処理に入る前に、クエリが所定の位置
 (上記では、range("X1")にクエリが存在しているかを
 確認するとしたらどのようにするのがスマートでしょう
 か?

 >[名前定義]は定期的に削除してますか?
  いえ^^;;
数を確認したところ、539にもなっていました。

  そこで、
   
   Sub try()
  Dim n As Name
  
  With ActiveWorkbook
    For Each n In .Names
      n.Delete
    Next
    MsgBox .Names.Count
  End With
End Sub

  として、名前定義をまとめて削除後、修正したマクロを
 実行すると、銘柄名が入らないので、

  If ws.Range("X1")="" then _
ws.QueryTables.Add(Connection:= _
"URL ;http://quote.yahoo.co.jp/q?s=" _
+ code + "&d=v1", Destination:=Range("X1"))

  として、クエリを繰り返し前にクエリが存在しなければ
  作成するマクロを考えてみましたが、ここでつまづいて
  しまいました。

  名前定義 クエリ 削除でググってみたところnさまの同様の
 問題への解答を参考にさせていただきました(勘違いでしたら
 ごめんなさい)

  同様に、
  
   .Parent.Names(.Name).Delete
    .Delete

  を追加するタイミングも考え中です。

  >l→n ではなく n To l Step -1 なのは何か意図が?

  なんだかくせのようなものでしょうか^^;;
 初めて、最終行の取得の仕方を覚えたときとても新鮮で
  それいらいいつも最終行から入っているようです。
  





この記事にはVBAのコードが含まれています。

緑の太文字→注釈
茶色の太文字→条件分岐
赤の太文字→ループ
青の太文字→その他



++++++++++++++++++++
OS      ⇒Windows XP
Version⇒Excel 2003
++++++++++++++++++++
記事NO.105209 のレス /
削除チェック/

NO.105229  Re[3]: Webクエリで落としたデータの転記の高速化
■投稿者/ もも
■投稿日/ 2008/01/11(23:16)
□URL/

追伸

 先ほどの名前定義を削除し、再度、当初のマクロとクエリを
 作成しないマクロを実行したところ、ところどころ、同じ名前
 の銘柄が入ってしまうという現象が^^;;

  作業スペースにクエリがひとつ入っていれば、足りると
 思っていましたが、また、ご指導いただけましたら幸いです。
記事NO.105209 のレス /
削除チェック/

NO.105228  Re[3]: Webクエリで落としたデータの転記の高速化
■投稿者/ n
■投稿日/ 2008/01/11(23:06)
□URL/

>ただ、繰り返し処理に入る前に、クエリが所定の位置
> (上記では、range("X1")にクエリが存在しているかを
> 確認するとしたらどのようにするのがスマートでしょう
> か?
これは、range("X1")にクエリが存在...というより、
そのwsにQueryTablesがあるかどうかで判定すれば充分だと思います。
If ws.QueryTables.Count = 0 Then ...など。



Dim ws As Worksheet
Dim code As String
Dim k As String
Dim n As Long
Dim L As Long
Dim i As Long

Set ws = ActiveSheet 'Worksheets("Home")
Application.ScreenUpdating = False
On Error Resume Next
ws.ShowAllData
On Error GoTo 0

n = ws.Range("C20000").End(xlUp).Row
L = ws.Range("D20000").End(xlUp).Row + 1
If ws.QueryTables.Count = 0 Then
With ws.QueryTables.Add(Connection:="URL ;http://quote.yahoo.co.jp/q?s=2929&d=v1", _
Destination:=ws.Range("X1"))
.RefreshStyle = xlOverwriteCells
.AdjustColumnWidth = False
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "13"
.Refresh BackgroundQuery:=False
End With
End If
For i = L To n
code = ws.Range("C" & i).Value
With ws.QueryTables(1)
.Connection = "URL ;http://quote.yahoo.co.jp/q?s=" & code & "&d=v1"
.Refresh BackgroundQuery:=False
End With
k = ws.Range("X1").Offset(1, 2).Value
k = Replace(k, "アップ", "")
k = Replace(k, "ダウン", "")
k = Replace(k, "変わらず", "")
k = Replace(k, "(株)", "")
ws.Range("D" & i).Value = k
If ws.Range("Q" & i) = "" Then ws.Range("O" & i).Value = ws.Range("X1").Offset(1, 4).Value
Next
Application.ScreenUpdating = True

Set ws = Nothing


この記事にはVBAのコードが含まれています。

緑の太文字→注釈
茶色の太文字→条件分岐
赤の太文字→ループ
青の太文字→その他
記事NO.105209 のレス /
削除チェック/

NO.105231  Re[4]: Webクエリで落としたデータの転記の高速化
■投稿者/ n
■投稿日/ 2008/01/11(23:18)
□URL/

>Sub try()
>  Dim n As Name
>  
>  With ActiveWorkbook
>    For Each n In .Names
>      n.Delete
>    Next
>    MsgBox .Names.Count
>  End With
>End Sub
>
>  として、名前定義をまとめて削除後、
vbalab.netのレスのやつですね。
名前定義だけを削除すると、QueryTableは残るけど(多分)
関連付けされないからQueryがうまくいかなくなります。
一度きれいにしておいたほうが良いでしょう。

Sub try2()
Dim qt As QueryTable

For Each qt In ActiveSheet.QueryTables 'Worksheets("Home").QueryTables
qt.Delete
Next qt
End Sub

で、先ほど提示したコードの、QueryTableがなければ追加し、あればURLを変更して更新するという考え方でいくと
>.Parent.Names(.Name).Delete
>.Delete
は不要です。


この記事にはVBAのコードが含まれています。

緑の太文字→注釈
茶色の太文字→条件分岐
赤の太文字→ループ
青の太文字→その他
記事NO.105209 のレス /
削除チェック/

NO.105233  Re[5]: Webクエリで落としたデータの転記の高速化
■投稿者/ もも
■投稿日/ 2008/01/11(23:32)
□URL/

ごめんなさい


 で、try2を実行後、いただいたマクロを実行すると、
 すべての行で、同じ銘柄が入ってしまっています。


 いただいた、マクロの実行しようとしている趣旨
 は理解できるんですが・・・、やはり関連付けが
 うまくいっていないということでしょうか?


++++++++++++++++++++
OS      ⇒Windows XP
Version⇒Excel 2003
++++++++++++++++++++
記事NO.105209 のレス /
削除チェック/

NO.105232  Re[5]: Webクエリで落としたデータの転記の高速化
■投稿者/ かみちゃん
■投稿日/ 2008/01/11(23:26)
□URL/

こんにちは。かみちゃん です。

横から失礼します。

> 売買履歴を管理するために、あらかじめ入力してある
> 銘柄コードを参照して、銘柄名と終値を入力するマクロ
> を作成いてみたく、まず、クエリで株価データを作業
> スペースに落してそこから、銘柄名と終値を転記する
> マクロを作成いたしましたが、少しでも高速化したい

普段から、同様のことをしているのですが、
高速化とは、具体的にとれくらい高速化したいのでしょうか?

本題は、nさんが対応されているので、触れませんが、気になるところがあります。

.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "13"

このコード、URLのレイアウト変更があっても大丈夫ですか?
13番目のテーブルを取得するという部分が気になります。
今はそれでもいいでしょうけど、私は、全体を取り込んで、必要な部分のみ
抜き出しています。
それが高速化に逆効果かもしれませんが。

>> そのほうが、余分な[名前定義]が増えません。
>> [名前定義]は定期的に削除してますか?

これは、勉強になりました。
今後、順次見直してみたいと思いました。
普段、名前定義をほとんど使わないので、大変なことになっているのかもしれませんね。


この記事にはVBAのコードが含まれています。

緑の太文字→注釈
茶色の太文字→条件分岐
赤の太文字→ループ
青の太文字→その他
記事NO.105209 のレス /
削除チェック/

NO.105240  Re[6]: Webクエリで落としたデータの転記の高速化
■投稿者/ もも
■投稿日/ 2008/01/12(00:08)
□URL/

かみちゃんさん こんばんは

 >高速化とは、具体的にとれくらい高速化したいのでしょうか?

  はやければ、はやいほど望ましいのですが、私のレベルでは
  なにか完成された形のようなものを想定することができなかった
  ので、スキルの高い方の高速と考えられる状態に近いものを
  勉強の目標もかねて考えておりました。

 >このコード、URLのレイアウト変更があっても大丈夫ですか?
 >13番目のテーブルを取得するという部分が気になります。
 >今はそれでもいいでしょうけど、私は、全体を取り込んで、
 >必要な部分のみ抜き出しています。
  
  銘柄名と終値のみ、作業領域を用意してマクロを実行していた
 ので、余分な部分をおとして、必要な部部のみ残していました。
 あとは、自動記録したままでした。
 xlEntirePageとするのと、どのような違いがおきるのでしょう?
 
  具体的なところの理解が浅くて、先ほどからしらべていました。

 それから、時系列データなどは、MSXML2.XMLHTTPを利用して落して
 いますが、まだ、勉強がたりなくて・・・しっかり理解しようと
 するととっても難しいです。
記事NO.105209 のレス /
削除チェック/

NO.105234  Re[6]: Webクエリで落としたデータの転記の高速化
■投稿者/ かみちゃん
■投稿日/ 2008/01/11(23:42)
□URL/

こんにちは。かみちゃん です。

横から失礼します。

> try2を実行後、いただいたマクロを実行すると、
> すべての行で、同じ銘柄が入ってしまっています。

新規ブックで試すことはできませんか?
同じ銘柄が入るような事象は確認できません。
終値は反映されないようですが。

Homeシートは、以下のようなシートレイアウトになっていますよね?
A B C D E F
1   コード 銘柄名 終値
2 2929
3  3434
4  6767
5  7878
6 1414
記事NO.105209 のレス /
削除チェック/

NO.105237  Re[7]: Webクエリで落としたデータの転記の高速化
■投稿者/ n
■投稿日/ 2008/01/11(23:52)
□URL/

一度確認してみたほうが良いかもしれませんね。

Sub test()
Dim i As Long
Dim qt As QueryTable

With ActiveSheet 'Worksheets("Home")
Debug.Print .QueryTables.Count, "(Count)"
For Each qt In .QueryTables
i = i + 1
Debug.Print i, qt.Name, qt.Destination.Address
Next qt
End With
End Sub

#イミディエイトウィンドウ(VBE画面で[Ctrl]+[g])はわかりますね?


この記事にはVBAのコードが含まれています。

緑の太文字→注釈
茶色の太文字→条件分岐
赤の太文字→ループ
青の太文字→その他
記事NO.105209 のレス /
削除チェック/

NO.105243  Re[8]: Webクエリで落としたデータの転記の高速化
■投稿者/ かみちゃん
■投稿日/ 2008/01/12(00:22)
□URL/

こんにちは。かみちゃん です。

>> 高速化とは、具体的にとれくらい高速化したいのでしょうか?
>
>  はやければ、はやいほど望ましい

現状のコードだと、どれくらいの速度なのかは提示されたほうがいいのでは?
その前に、コードのインデントをきちんと整理するとか、変数を最小限にするとか
いろいろすべきことはあると思います。
そういう点でも、nさんの記述は、見習われたほうがいいと思います。

> スキルの高い方の高速と考えられる状態に近いものを

配列に格納して処理するのも高速化のひとつだと思います。

> xlEntirePageとするのと、どのような違いがおきるのでしょう?

経験してみてください、としかいいようがないです。
突然ホームページのレイアウトが変わったら・・・
13番目のテーブルでなくなったら、どうするのか。
ただ、全体を取り込んだとしても、切り取る部分が変わったら一緒なのですが。

> 時系列データなどは、MSXML2.XMLHTTPを利用して落しています

それは、速いらしいですね。
私も勉強不足で、未知の領域ですが。
記事NO.105209 のレス /
削除チェック/

NO.105242  Re[8]: Webクエリで落としたデータの転記の高速化
■投稿者/ もも
■投稿日/ 2008/01/12(00:20)
□URL/

nさま

 ありがとうございます

 新しいブックに、コードのみだして、先ほどいただいた
 マクロを実行したところ、繰り返し処理ないの
 .Refresh BackgroundQuery:=False
 で、止まってしまいます。

 イミディエイトウィンドウは、先ほど勉強しました。
 
 それから、質問時から、エクセルのバージョンを2007
 としてから、投稿しておりましたが、2003と記載されて
 しまっています。

 バージョンの違いなども関係ありそうでしょうか?

 これから、testマクロをイミディエイト画面を見ながら実行
 してみたいと思います。
記事NO.105209 のレス /
削除チェック/

NO.105246  Re[9]: Webクエリで落としたデータの転記の高速化
■投稿者/ もも
■投稿日/ 2008/01/12(00:34)
□URL/

かみちゃんさん

 ありがとうございます。

 おっしゃるとおりですね。
 頭がいっぱいになっておりました。

 インデント、マクロを初めて習ったとき一番最初に注意されたことでした。
 変数は、どれを減らしたら効果的なのか考えたいとおもいます。

 それから、配列、落したデータを放り込んで、今変数で処理しているとこ
 ろを、書き換えたらどうなるか勉強してみたいと思います。

 あと、レイアウトの件は、テーブルナンバーの変更を念頭においてのこと
 だったんですね。Yahooの株価データは、その日の株価データだけであれば
 テーブルナンバーの変更で今のところ対応できるので、いまのところ
 これでしのいでいます。時系列データはランダムになってしまったので
 かみちゃんさんのおっしゃってるとおりですね。

  この点は、MSXML2.XMLHTTPを利用して対応していますが、正規表現自体
 難しいせかいです^^;;

記事NO.105209 のレス /
削除チェック/

NO.105245  Re[9]: Webクエリで落としたデータの転記の高速化
■投稿者/ かみちゃん
■投稿日/ 2008/01/12(00:28)
□URL/

こんにちは。かみちゃん です。

> 新しいブックに、コードのみだして、先ほどいただいた
> マクロを実行したところ、繰り返し処理ないの
> .Refresh BackgroundQuery:=False
> で、止まってしまいます。

nさんのコードは、新規ブックで試した場合、うまく処理されることを確認しています。
(Excel2002 SP3)

止まってしまいうのは、
If ws.QueryTables.Count = 0 Then
'〜省略〜
.WebTables = "13"
.Refresh BackgroundQuery:=False
End With
Else
MsgBox "QueryTablesの数は" & ws.QueryTables.Count
End If
For i = L To n
'〜省略〜
としてみてください。

新規ブックで実行しているのに、「QueryTablesの数は〜」と表示されるのでは?
もう一度別の新規ブックで試してみてください。

> それから、質問時から、エクセルのバージョンを2007
> としてから、投稿しておりましたが、2003と記載されて
> しまっています。

本当ですね。これは掲示板の不具合か何かでしょうか。
私は、Excel2007は持っていないし、まわりに環境がないので、わかりません。


この記事にはVBAのコードが含まれています。

緑の太文字→注釈
茶色の太文字→条件分岐
赤の太文字→ループ
青の太文字→その他
記事NO.105209 のレス /
削除チェック/

NO.105249  Re[10]: Webクエリで落としたデータの転記の高速化
■投稿者/ もも
■投稿日/ 2008/01/12(00:47)
□URL/

かみちゃんさん

 ありがとうございます

 先ほど、既存のシートで実行したところ、おっしゃるとおり
 QueryTablesの数は1と表示されました。
 
 そこで、新しいブックで試したところ、その表示はでず。
 
 For i = L To n
'〜省略〜

  .Refresh BackgroundQuery:=False ←ここで止まる
End With

  シート上では、10行中、7行目までが入っていました。


  8行目の矢印の箇所で止まってしまっていました。




この記事にはVBAのコードが含まれています。

緑の太文字→注釈
茶色の太文字→条件分岐
赤の太文字→ループ
青の太文字→その他
記事NO.105209 のレス /
削除チェック/

NO.105247  Re[10]: Webクエリで落としたデータの転記の高速化
■投稿者/ かみちゃん
■投稿日/ 2008/01/12(00:41)
□URL/

こんにちは。かみちゃん です。

> それから、配列、落したデータを放り込んで、今変数で処理しているとこ
> ろを、書き換えたらどうなるか勉強してみたいと思います。

高速化をしたいならば、私は、配列で扱うことを考えます。
私なら、この部分を配列にして、
If ws.Range("Q" & i) = "" Then ws.Range("O" & i).Value = ws.Range("X1").Offset(1, 4).Value
セルへ書き込みは、最後に一回だけするような感じにします。

配列の扱いは、慣れないとちょっと難しいですし、一度にたくさんのことを
言っても混乱するもとなので、今は、やめておきますね。
まずは、nさんのコードが動くようになって、高速化されたのかどうかを比較
されることが先決かと思います。

その後で、必要であれば、配列の扱いを検討されてもいいと思います。

> 時系列データはランダムになってしまったので

ランダムというのがよくわかりませんが、私は、時系列データもWebQueryで取得
しています。
その部分も、今回のnさんのアドバイスを参考にして修正してみたいと思いますが。


この記事にはVBAのコードが含まれています。

緑の太文字→注釈
茶色の太文字→条件分岐
赤の太文字→ループ
青の太文字→その他
記事NO.105209 のレス /
削除チェック/

NO.105250  Re[11]: Webクエリで落としたデータの転記の高速化
■投稿者/ もも
■投稿日/ 2008/01/12(00:54)
□URL/

かみちゃんさん

 失礼しました。

 >ランダムというのがよくわかりませんが、

 時系列データのテーブルナンバーが、ランダムに変更されて
 いる点のお話でした。今は変わっているのでしょうか?

 配列 はい いま、イミディエイトの使い方であたまが
 いっぱいになっています。

 なぜ、止まってしまうのか・・・、nさま、かみちゃんさまの
 ところと、なにが違うのか・・・、順序だてて配列までたどり
 つきたいです^^;;

それから、さきほど、かみちゃんさまから、使用セルの範囲
 につきましての図入りでの確認をいただきましたが、そのとおりで
 ございます。

  失礼いたしました。
記事NO.105209 のレス /
削除チェック/

NO.105252  Re[12]: Webクエリで落としたデータの転記の高速化
■投稿者/ かみちゃん
■投稿日/ 2008/01/12(01:45)
□URL/

こんにちは。かみちゃん です。

> 先ほど、既存のシートで実行したところ、おっしゃるとおり
> QueryTablesの数は1と表示されました。
> そこで、新しいブックで試したところ、その表示はでず。
> 
> For i = L To n
> '〜省略〜
>
>  .Refresh BackgroundQuery:=False ←ここで止まる
> End With

よくわかりませんね。

> 新しいブックに、コードのみだして、先ほどいただいた
> マクロを実行したところ、繰り返し処理ないの
> .Refresh BackgroundQuery:=False
> で、止まってしまいます。

ではないのでしょうか?

> シート上では、10行中、7行目までが入っていました。
> 8行目の矢印の箇所で止まってしまっていました。

8行目というのは、「銘柄コード」の7個目という意味ですか?
もう一度確認させてください。

Homeシートは、以下のシートレイアウトだけにして、動くのですか?動かないのですか?
A B C D E F
1   コード 銘柄名 終値
2 2929
3  3434
4  6767
5  7878
6 1414
このシートレイアウトには、8行目はありません。
あくまで、新規ブックで試してみてください。

>>ランダムというのがよくわかりませんが、
>
> 時系列データのテーブルナンバーが、ランダムに変更されている点のお話でした。
> 今は変わっているのでしょうか?

わかりません。
そういうことがあるので、めったに、テーブル番号を使いません。


この記事にはVBAのコードが含まれています。

緑の太文字→注釈
茶色の太文字→条件分岐
赤の太文字→ループ
青の太文字→その他
記事NO.105209 のレス /
削除チェック/

NO.105254  Re[13]: Webクエリで落としたデータの転記の高速化
■投稿者/ もも
■投稿日/ 2008/01/12(02:54)
□URL/

かみちゃんさん



 実行時エラー1004が、前述の位置で発生します。
 (前述の位置:繰り返し処理内の.Refresh BackgroundQuery:=False)


 いただいた指示どおりにしておりますが、明日もう一度
 はじめからやり直してみたくおもいます。


 少し、頭がつかれているのかもしれません^^;;

  
記事NO.105209 のレス /
削除チェック/

NO.105253  Re[13]: Webクエリで落としたデータの転記の高速化
■投稿者/ n
■投稿日/ 2008/01/12(02:29)
□URL/

ぅーん......
自宅がVISTA/2007の環境なのでさっきから試してるのですが
どうもうまくいきませんね...
手作業でもエラーがでます。
IE7も影響してるかなぁ...
銘柄コードによってエラーが出たり出なかったり。
一度エラーが出ると頻発します。
デバッグで少し間をおくと通る時もあるんですが...
ちょっと今ハマってます(泣

参考情報
http://www2.moug.net/bbs/exvba/20070703000035.htm


++++++++++++++++++++
OS      ⇒Windows Vista
Version⇒Excel 2003
++++++++++++++++++++
記事NO.105209 のレス /
削除チェック/

NO.105256  Re[14]: Webクエリで落としたデータの転記の高速化
■投稿者/ もも
■投稿日/ 2008/01/12(03:05)
□URL/

nさま 

 申し訳ありません。
 先ほどから、こつこつ繰り返しているのですが・・・。

 こちらの環境は、XP pro sp2+excel2007で、先日の
 Excelのアップデートは適用済みです。
 
  エラーの件は、同じ場所ででるんですが、銘柄によって
 でたりでなかったり、一度でると出っぱなしで、同じよう
 な状況です。

  明日、もう一度、PCにエラーがないかチェックしてみたい
 と思います。

  遅くまでありがとうございます。
記事NO.105209 のレス /
削除チェック/

NO.105255  Re[14]: Webクエリで落としたデータの転記の高速化
■投稿者/ n
■投稿日/ 2008/01/12(02:59)
□URL/

これと一緒か...
http://okwave.jp/qa3501069.html

とりあえず私の環境では連続処理するとエラーが頻発し、
一時ファイル、履歴ファイルを削除しないと復旧しないようです。

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=53033;id=excel
これも一緒の現象だったんですね......orz
記事NO.105209 のレス /
削除チェック/

NO.105275  Re[15]: Webクエリで落としたデータの転記の高速化
■投稿者/ もも
■投稿日/ 2008/01/12(21:26)
□URL/

nさま、かみちゃんさま 回答ありがとうございました。

 この件は、Excel2007,IE7の環境で、Webクエリに不具合がでる
ことを確認できたという意味で解決とさせていただきます。

 cf .http://www2.moug.net/bbs/exvba/20070703000035.htm

なお、Excel2002,IE6にても不具合が確認されましたが
 数回に一度確認できる現象のようで、原因は未確認です。

 最後に、かみちゃんさんにご指摘いただきました計測時間は
(かみちゃんさんから指定していただきました、レイアウトで
 銘柄数を30銘柄にて計測、PC:Pen m 3、1.8)

  最初のマクロ:平均23秒
  クエリを重ねて作成しないマクロ:平均20秒
オブジェクトを作成するマクロ:平均5秒
  
 以上、今回勉強できた範囲内で、クエリでテーブルナンバーを
 指定して取得する方法の速度上の限界・安定性を結果的に確認
 でき勉強になりました。
 
記事NO.105209 のレス / END
削除チェック/

NO.105277  (削除)
■投稿者/ /
■投稿日/ 2008/01/12(21:43)
□URL/

この記事は削除されました
記事NO.105209 のレス /
削除チェック/

NO.105276  Re[16]: Webクエリで落としたデータの転記の高速化
■投稿者/ かみちゃん
■投稿日/ 2008/01/12(21:33)
□URL/

こんにちは。かみちゃん です。

解決されたということですが、

>Excel2002,IE6にても不具合が確認されました

WindowsXP Pro SP2 + Excel2002 SP3 + InternetExplorer Ver6.0 SP2
の環境では、不具合は今まで一度も確認されていません。

> オブジェクトを作成するマクロ:平均5秒

随分速くなりりましたね。
参考にどのようにしたら、速くなったのかご紹介いただけるとよかったのですが・・・

> クエリでテーブルナンバーを指定して取得する

nさんが紹介されているリンク先でも、この不安定さは指摘されているみたいですね。
記事NO.105209 のレス /
削除チェック/

NO.105278  Re[17]: Webクエリで落としたデータの転記の高速化
■投稿者/ n
■投稿日/ 2008/01/12(21:52)
□URL/

とりあえず解決(?)のようで良かったですね。
IE7のWebクエリの不具合情報としては結構多いみたいです。
http://www2s.biglobe.ne.jp/~iryo/kabu/info/QA/q3.html

これを機会に私もXMLHTTPをちょっと勉強してみました。
http://www.f3.dion.ne.jp/~element/msaccess/AcTipsVbaXMLHTTP.html
ここはたいへん参考になりますね。

それで試しに簡易版(エラー処理甘いのであくまでサンプルですが)を書いてみました。

Option Explicit

Sub 簡易try()
Const URL As String = "http://quote.yahoo.co.jp/q?s="
' ↓ほんとは半角です。
Const CHK As String = "<td nowrap align=left><a href=””/q?s="
Const PTN As String = ">([^<>]+)<"<br> <B><FONT COLOR="BLUE">Dim</FONT></B> xh <B><FONT COLOR="BLUE">As</FONT></B><B><FONT COLOR="BLUE"> Object</FONT></B><br> <B><FONT COLOR="BLUE">Dim</FONT></B> re <B><FONT COLOR="BLUE">As</FONT></B><B><FONT COLOR="BLUE"> Object</FONT></B><br> <B><FONT COLOR="BLUE">Dim</FONT></B> mc <B><FONT COLOR="BLUE">As</FONT></B><B><FONT COLOR="BLUE"> Object</FONT></B><br> <B><FONT COLOR="BLUE">Dim</FONT></B> ret <B><FONT COLOR="BLUE">As</FONT></B> <B><FONT COLOR="BLUE">String</FONT></B><br> <B><FONT COLOR="BLUE">Dim</FONT></B> cnt <B><FONT COLOR="BLUE">As</FONT></B> <B><FONT COLOR="BLUE">Long</FONT></B><br> <B><FONT COLOR="BLUE">Dim</FONT></B> i <B><FONT COLOR="BLUE">As</FONT></B> <B><FONT COLOR="BLUE">Long</FONT></B><br> <B><FONT COLOR="BLUE">Dim</FONT></B> v<br> <br> <B><FONT COLOR="BLUE">With </FONT></B>ActiveSheet <b><font color="green">'Sheets("home")</font></b><br> cnt = .Range("C65536").End(xlUp).Row - 1<br> <B><FONT COLOR="brown">If </FONT></B>cnt = 0 <B><FONT COLOR="brown">Then</FONT></B> <B><FONT COLOR="BLUE">Exit</FONT></B> Sub<br> <br> <B><FONT COLOR="BLUE">On Error</FONT></B> Resume <B><FONT COLOR="red">Next</FONT></B><br> <B><FONT COLOR="BLUE">Set</FONT></B> xh = CreateObject("MSXML2.XMLHTTP")<br> <B><FONT COLOR="BLUE">On Error</FONT></B> <B><FONT COLOR="BLUE">GoTo</FONT></B> 0<br> <B><FONT COLOR="brown">If </FONT></B>xh Is Nothing <B><FONT COLOR="brown">Then</FONT></B> <B><FONT COLOR="BLUE">Exit</FONT></B> Sub<br><br> <B><FONT COLOR="BLUE">Set</FONT></B> re = CreateObject("VBScript.RegExp")<br> re.Pattern = PTN<br> re.Global = True<br><br> <B><FONT COLOR="BLUE">Re<B><FONT COLOR="BLUE">Dim</FONT></B></FONT></B> z(1<B><FONT COLOR="red"> To </FONT></B>cnt, 1<B><FONT COLOR="red"> To </FONT></B>1)<br><br> <B><FONT COLOR="red">For </FONT></B><B><FONT COLOR="red">Each</FONT></B> v<B><FONT COLOR="red"> In </FONT></B>.Range("C2").Resize(cnt).Value<br> i = i + 1<br> xh.Open "GET", URL & v, False<br> xh.Send<br> <B><FONT COLOR="brown">If </FONT></B>(xh.Status >= 200) And (xh.Status < 300) <B><FONT COLOR="brown">Then</FONT></B><br> ret = xh.responsetext<br> ret = Mid$(ret, InStr(ret, CHK & v))<br> <B><FONT COLOR="BLUE">Set</FONT></B> mc = re.Execute(ret)<br> z(i, 1) = mc(4).SubMatches(0)<br> <B><FONT COLOR="brown">End If</FONT></B><br> <B><FONT COLOR="red">Next</FONT></B> v<br><br> .Range("O2").Resize(cnt, 1).Value = z<br> <B><FONT COLOR="BLUE">End With</FONT></B><br> <br> <B><FONT COLOR="BLUE">Set</FONT></B> mc = Nothing<br> <B><FONT COLOR="BLUE">Set</FONT></B> re = Nothing<br> <B><FONT COLOR="BLUE">Set</FONT></B> xh = Nothing<br><B><FONT COLOR="BLUE">End Sub</FONT></B><br><br><B><FONT COLOR="BLUE">Sub </FONT></B>確認用() <b><font color="green">' イミディエイトウィンドウ出力</font></b><br> <B><FONT COLOR="BLUE">Dim</FONT></B> xh <B><FONT COLOR="BLUE">As</FONT></B><B><FONT COLOR="BLUE"> Object</FONT></B><br> <B><FONT COLOR="BLUE">Dim</FONT></B> ret <B><FONT COLOR="BLUE">As</FONT></B> <B><FONT COLOR="BLUE">String</FONT></B><br> <B><FONT COLOR="BLUE">Dim</FONT></B> j <B><FONT COLOR="BLUE">As</FONT></B> <B><FONT COLOR="BLUE">Long</FONT></B><br> <B><FONT COLOR="BLUE">Dim</FONT></B> v<br><br> <B><FONT COLOR="BLUE">On Error</FONT></B> Resume <B><FONT COLOR="red">Next</FONT></B><br> <B><FONT COLOR="BLUE">Set</FONT></B> xh = CreateObject("MSXML2.XMLHTTP")<br> <B><FONT COLOR="BLUE">On Error</FONT></B> <B><FONT COLOR="BLUE">GoTo</FONT></B> 0<br> <B><FONT COLOR="brown">If </FONT></B>xh Is Nothing <B><FONT COLOR="brown">Then</FONT></B> <B><FONT COLOR="BLUE">Exit</FONT></B> Sub<br><br> <B><FONT COLOR="BLUE">With </FONT></B>CreateObject("VBScript.RegExp")<br> .Pattern = ">([^<>]+)
記事NO.105209 のレス /
削除チェック/


パスワード/

- Child SEARCH -