Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4644 / 13644 ツリー ←次へ | 前へ→

【55423】WEB上の表の参照方法 KEI 08/5/3(土) 15:21 質問[未読]
【55426】Re:WEB上の表の参照方法 かみちゃん 08/5/3(土) 16:48 発言[未読]
【55433】Re:WEB上の表の参照方法 KEI 08/5/4(日) 0:54 お礼[未読]
【55434】Re:WEB上の表の参照方法 かみちゃん 08/5/4(日) 8:04 発言[未読]
【55439】Re:WEB上の表の参照方法 KEI 08/5/4(日) 11:18 お礼[未読]

【55423】WEB上の表の参照方法
質問  KEI  - 08/5/3(土) 15:21 -

引用なし
パスワード
   YAHOOファイナンス→株・投資→例:コード6301→時系列の表を現在、エクセルにいったん取り込んでから、A1を選択させて貼り付けまして、A1が”日付”ならば、情報取得成功それ以外なら取得失敗と判断せています。
これでも目的の結果は得られるのですが、回数が多くなると、張り付けという動作が処理速度を低下させてしまします。
今回、お聞きしたい事なのですが、WEB上の表の特定の場所をエクセルに貼り付けずにWEB上で参照して条件判断する事は可能でしょうか?
いろいろ調べたのですが、どうしても方法が見つかりませんでした。
もし、ご存知の方がいれば、どうかよろしくお願いします。

以下のコードは現在使用しているマクロです。何かの参考になればと思います。
↓ここで、取得して、エクセルに貼り付けています。
Sub 取得()
With ActiveSheet.QueryTables.Add(Connection:=urlweb _
    , Destination:=Cells(END, 1))
  .AdjustColumnWidth = False
  .WebSelectionType = xlSpecifiedTables
  .WebFormatting = xlWebFormattingNone
  .WebTables = tableno
  .Refresh BackgroundQuery:=False
End With
End Sub

↓貼り付けた後、日付 の文字があるかで、合否を判断させています。
If Cells(END, 1) = "日付" Then
この後、取得成功ならデータの処理をします。

【55426】Re:WEB上の表の参照方法
発言  かみちゃん E-MAIL  - 08/5/3(土) 16:48 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>YAHOOファイナンス→株・投資→例:コード6301→時系列の表を現在、エクセルに
>いったん取り込んでから、A1を選択させて貼り付けまして、A1が”日付”なら
>ば、情報取得成功それ以外なら取得失敗と判断せています。
>これでも目的の結果は得られるのですが、回数が多くなると、張り付けという動
>作が処理速度を低下させてしまします。
>今回、お聞きしたい事なのですが、WEB上の表の特定の場所をエクセルに貼り付け>ずにWEB上で参照して条件判断する事は可能でしょうか?

Yahoo!ファイナンスからのデータ取得は、私もしているのですが、
WebQueryを使わずにInternetExplorer(IE)との連携による処理にすると、
シート上に展開する必要はなく、判断できます。

Sub Sample()
 Dim myIE As Object
 Dim myURL As String
 Dim lngPos As Long
 
 Const strFindString As String = "日付始値高値安値終値出来高調整後終値*"
 
 Set myIE = CreateObject("InternetExplorer.application")

 '次の行のxxxxは、httpを半角にしたものにしてください。
 myURL = "xxxx://table.yahoo.co.jp/t?s=6301.t&g=d"
 myIE.Navigate2 myURL
 '表示終了まで待つ
 Do While myIE.Busy = True
  DoEvents '特に何もしないで.Busyの状態が変わるまで待つ
 Loop
 Do While myIE.ReadyState <> 4
  DoEvents '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
 Loop
 
 strWebTextData = myIE.Document.body.innerText
 lngPos = InStr(strWebTextData, strFindString)
 If lngPos > 0 Then
  strWebTextData = Mid(strWebTextData, lngPos + Len(strFindString) + 2)
  lngPos = InStr(strWebTextData, "日")
  strWebTextData = Mid(strWebTextData, 1, lngPos)
  If IsDate(strWebTextData) Then
   MsgBox "時系列データの情報取得に成功しました" & vbCrLf & _
    strWebTextData
  Else
   MsgBox "時系列データの情報取得に失敗しました" & vbCrLf & _
    strWebTextData
  End If
 Else
  MsgBox "時系列データは取得できません"
 End If

End Sub

IE連携については、以下のURLあたりも参考にしてみてください。
http://www.ken3.org/cgi-bin/group/vba_ie.asp

【55433】Re:WEB上の表の参照方法
お礼  KEI  - 08/5/4(日) 0:54 -

引用なし
パスワード
   ご返事ありがとうございます。
IEを起動させて、時系列を読み込むのですね。
今まで、そのような発想は思いつきませんでした。
この場合、IEを使ってアクセスする方法と、IEを起動せず、時系列をエクセルに落とす時間を比較した場合どちらのが早いのでしょうか?
現在、日経採用銘柄の225社の100日分ほどのデータを取得させて、お手製の計算式に通しています。
この用に、データの取得をして計算を行えれば、方法は問わないのですが、より早い方法はあるのでしょうか? もしご存知でしたら教えていただけないでしょうか?

【55434】Re:WEB上の表の参照方法
発言  かみちゃん  - 08/5/4(日) 8:04 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>この場合、IEを使ってアクセスする方法と、IEを起動せず、時系列をエクセルに
>落とす時間を比較した場合どちらのが早いのでしょうか?

今回の質問は、
> WEB上の表の特定の場所をエクセルに貼り付けずにWEB上で参照して条件判断する
> 事は可能でしょうか?
にお答えしたつもりです。

ただし、これには、HTMLの内容を理解しておく必要がありますし、ページレイアウトが変更
になると、修正対応が必要になる場合もあります。

処理速度向上とコード作成の効率化を考えると、どちらがよいかはご自身で判断
してください。
私は、後者のことがあるので、WebQueryですべてのページを読み込んで(テーブルNoを指定せずに)
処理していますが、処理速度は、比較するほど気になりません。

なお、紹介した方法以外に以下のような方法もあるようです。
Web ページをダウンロードする方法〜 MSXML 編〜
http://www.f3.dion.ne.jp/~element/msaccess/AcTipsVbaXMLHTTP.html
Web ページをダウンロードする方法〜 MSHTML 編〜
http://www.f3.dion.ne.jp/~element/msaccess/AcTipsMSHTML.html

【55439】Re:WEB上の表の参照方法
お礼  KEI  - 08/5/4(日) 11:18 -

引用なし
パスワード
   すいません、当初の質問と少し論点がずれてるのはわかってましたが、もしかしてご存知かと思いまして質問してしまいました。
すべてのページを読み込むのですね。
確かにこれなら、他にも使えそうです。リンク先でちょっと勉強してみようと思います。 ありがとうございます。

4644 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free