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

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

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

6435閲覧

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

show0

総合スコア13

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/06/25 13:29

編集2020/06/26 00:55

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

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

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

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

vba

1Sub Macro1() 2 Dim a As QueryTable 3 Sheets("天気データ").QueryTables(1).Refresh BackgroundQuery:=False 4End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YT0014

2020/06/25 17:23

やりたいことがよくわかりません。 天気データシートに、URLで示されたHPの天気情報テーブルのデータを、上書きで取り込みたい、ということでしょうか? それとも、取込済みの状態から、なんらかのルールか、誰かの操作によって、天気データシートのデータを更新したいということでしょうか? また、「名前で取得するべき~」となっていますが、この名前とは何を示しているのでしょうか? 質問を編集して、やりたいことを具体的にご提示ください。
show0

2020/06/26 00:56

すみません内容修正しました。 まだ分かりづらいでしょうか。
YT0014

2020/06/26 01:05

ありがとうございます。状況は理解できたと思います。 続けの要望で申し訳ないのですが、「クエリテーブルが存在しないと判別」と判断されたのは、エラーが発生したからでしょうか? そうであるなら、エラーメッセージのご提示をお願いします。 他の理由での判別なら、どういう経緯で判断したかをご提示ください。
guest

回答2

0

ベストアンサー

イメージ説明

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

VBA

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

で、動くと思います。

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

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

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

VBA

1Public Sub GetClassNameH2() 2 3 Dim IE As InternetExplorer 4 Dim Doc As HTMLDocument 5 Dim ieElement As IHTMLElement 6 Dim strResult As String 7 Dim strURL As String 8 9 strURL = "https://tenki.jp/week/3/" 10 11 Set IE = CreateObject("Internetexplorer.Application") 12 IE.Visible = True 13 IE.Navigate strURL 14 Do While IE.Busy = True Or IE.ReadyState < READYSTATE_COMPLETE 15 DoEvents 16 Loop 17 18 Set Doc = IE.Document 19 Set ieElement = Doc.getElementById("main-column") 20 21 strResult = ieElement.innerText 22 Sheet1.Range("A1").Value = strResult 23 24 IE.Quit 25 26 Set ieElement = Nothing 27 Set Doc = Nothing 28 Set IE = Nothing 29 30End Sub 31

投稿2020/06/26 02:40

編集2020/06/26 04:18
kai_keitai

総合スコア344

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

show0

2020/06/26 06:53

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

0

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

投稿2020/06/26 06:18

編集2020/06/26 07:09
tosi

総合スコア553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問