質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.80%

excel VBA 取得済みのクエリデータを更新したい

解決済

回答 2

投稿 編集

  • 評価 0
  • クリップ 0
  • VIEW 6,308

score 13

エクセル上に、HPから天気の情報を取得したクエリテーブルがあります
そのクエリテーブルをVBAを使って更新したいのですが、やり方がわかりません

シート名 天気データ
クエリテーブルは1つ。ほかのシートにもありません

【追記】
目的は最新の天気データを取得すること
方法はVBAでの更新です。上書きでもデータ更新でもかまいません

URL
https://tenki.jp/week/3/
クエリテーブル名で取得するべきなのかと思いましたが、更新毎にに名前が変更するために難しいと思いました。
以下の内容でクエリテーブルを更新できるかと思いましたが、クエリテーブルが存在しないと判別されてしまいます

Sub Macro1()
    Dim a As QueryTable
    Sheets("天気データ").QueryTables(1).Refresh BackgroundQuery:=False
End Sub
  • クリップを取り消します

  • 質問の評価を上げたことを取り消します

  • 質問の評価を下げたことを取り消します

質問への追記・修正、ベストアンサー選択の依頼

回答 2

checkベストアンサー

+1

イメージ説明

データを上の図のようにデータを取得しているのであれば、
データの更新のVBAは、

    ActiveWorkbook.Connections("クエリ - 関東・甲信地方の10日間天気26日08:00発表").Refresh


で、動くと思います。

ただ、下図のようなことも可能です。
開くたびに更新するとか、1分が最小値ですが、時間経過で自動更新の機能のあります。
マクロを作る必要はないと思います。
イメージ説明

どうしてもマクロにこだわるのなら、こうですね。

WEBの結果(表全体)を 変数 strResult に代入しています。
結果は、複雑なテキストです。
加工が必要になりますね。

Public Sub GetClassNameH2()

    Dim IE As InternetExplorer
    Dim Doc As HTMLDocument
    Dim ieElement As IHTMLElement
    Dim strResult As String
    Dim strURL As String

    strURL = "https://tenki.jp/week/3/"

    Set IE = CreateObject("Internetexplorer.Application")
    IE.Visible = True
    IE.Navigate strURL
    Do While IE.Busy = True Or IE.ReadyState < READYSTATE_COMPLETE
        DoEvents
    Loop

    Set Doc = IE.Document
    Set ieElement = Doc.getElementById("main-column")

    strResult = ieElement.innerText
    Sheet1.Range("A1").Value = strResult

    IE.Quit

    Set ieElement = Nothing
    Set Doc = Nothing
    Set IE = Nothing

End Sub

投稿

編集

kai_keitai

score 334

  • show0

    show0

    2020/06/26 15:53

    ありがとうございます!無事更新できました
    VBAに拘る必要なかったですね。勉強不足でした

0

PowerQueryで遣られる様でしたらMの数式言語も確認された方が良いかも知れません。
イメージ説明
固定値が勝手にセットされますので確認必要です。
イメージ説明

投稿

編集

tosi

score 541

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る