VBAマクロで複数月に渡る過去の天気の取得方法

最近の書き込み件数: 今日 0件、昨日 0件
未読分:5件

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)


Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

Message#5 2015年1月22日(木)23時10分
From: Dell
返事 削除 変更
問題点などご指摘頂きありがとうございます。また、各項目も対応するようにして頂き、非常に見やすくなりました。
やりたいことが出来ており、現状きれいに動いているようですが、問題がでたら確認していきたいと思います。
ありがとうございました。

Message#4 2015年1月22日(木)23時02分
From: みらん
返事 削除 変更
こんばんは。

このご質問は、以前にもここで出ていた覚えがあります。
少し、手直ししてみましたが、テーブルの部分で値が取得できていない部分があるようですから、手直しするべき部分がありそうです。

FirstDay = .Range("C1").Value '始めの日
EndDay = .Range("D1").Value  '終わりの日
ですが、これは、現在のコードは月単位の取得しかありませんから、日付を指定しても、意味ありませんね。(^^;

'//
Dim a As Long 'モジュール変数
Sub Main()
 Dim FirstDay As Variant
 Dim EndDay As Variant
 Dim mTitle As Variant
 Dim n As Integer, i As Long, j As Long
 Dim yy As Long, mo As Long, da As Long
 Dim mDate As Date
 Dim ws As Worksheet
 Dim wsCount As Integer
 n = 3 '開始Sheet番号
 a = 0 '初期化
 'IEを開いて非表示
 Set ws = Worksheets(n)
 With ws
  .UsedRange.Offset(1).ClearFormats '画面の初期化
  FirstDay = .Range("C1").Value 'yy/mm/dd
  EndDay = .Range("D1").Value 'yy/mm/dd
  j = DateDiff("m", FirstDay, EndDay)
  .Range("A3").Resize(1, 21).Value = Split(",,,,,,,,,,,,,,,,,雪,,天気概況,", ",")
  .Range("A4").Resize(1, 21).Value = Split(",気圧,,降水量,,,気温(℃),,,湿度(%),,,最大風速,,最大瞬間風速,,日照時間,降雪,最深積雪,昼,夜,", ",")
  .Range("A5").Resize(1, 21).Value = Split("日,現地(平均),海面(平均),合計,1時間,10分間,平均,最高,最低,平均,最小,平均風速,風速,風向,風速,風向,,合計,値,(06:00-18:00),(18:00-翌日06:00)", ",")
 If j <= 0 Then Exit Sub
  yy = Year(FirstDay)
  mo = Month(FirstDay)
  da = Day(FirstDay)
 For i = 0 To j
  mDate = DateSerial(yy, mo + i, da)
  yy = Year(mDate)
  mo = Month(mDate)
  da = Day(mDate)
  .Cells(3 + a + i, 1).Value = yy & "年" & mo & "月"
  Call sGetData(yy, mo, da, ws)
 Next i
 End With
End Sub
Sub sGetData(yy As Long, mo As Long, da As Long, ws As Worksheet)
  Dim x As Long '列の管理
  Dim y As Long '行の管理
  
  Dim objIE As Object
   Set objIE = CreateObject("InternetExplorer.Application")
   objIE.Visible = False
   Application.ScreenUpdating = False '画面更新禁止
  '指定URLへ移動する
  objIE.Navigate " http://www.data.jma.go.jp/obd/stats/etrn/view/daily_s1.php?prec_no=74&block_no=47893&year=" & yy & "&month=" & mo & "&day=" & da & "&view="
  'Debug.Print "http://www.data.jma.go.jp/obd/stats/etrn/view/daily_s1.php?prec_no=74&block_no=47893&year=" & yy & "&month=" & mo & "&day=" & da & "&view="
  '表示完了を待つ .readyState と .Busy を見る
  While objIE.readyState <> 4 Or objIE.Busy = True 'IEがBusyの間 待つ
    DoEvents
  Wend
  DoEvents
  '表示待ちここまで
    'Tableタグを抜き出す
  Dim objT As Object 'テーブルオブジェクトの格納用
  Set objT = objIE.document.All("tablefix1") '.all("id名前")でテーブルタグを抜く
  If objT Is Nothing Then '↑上で見つかったか?
    MsgBox "err 表が見つかりません、 IDを確認してください。"
    End 'エラーなので抜ける。 '**変更
  End If
  For y = 0 To objT.Rows.Length - 1 '行のループ
    For x = 0 To objT.Rows(y).Cells.Length - 1 '列数分ループ
      If IsNumeric(objT.Rows(y).Cells(x).innertext) Then
      ws.Cells(a + y + 2, x + 1) = objT.Rows(y).Cells(x).innertext
      '↑y+1 1行目から書き出す、11行目にするには y+1+10に変更する
      End If
    Next
  Next
  a = a + y + 2 - 4 '連続
  'objIE.ExecWB 17, 0 'OLECMDID_SELECTALL = 17 全てを選択
  'objIE.ExecWB 12, 0 'OLECMDID_COPY = 12 コピー
  'Range("A1").Select
  'ActiveSheet.PasteSpecial Format:="HTML" 'HTML形式で貼り付ける
    objIE.Quit '.QuitでIEを閉じる
  '使用したオブジェクト変数を空に。
  Set objT = Nothing
  Set objIE = Nothing '一旦オブジェクトを開放しないといけない模様
  Application.ScreenUpdating = True '画面更新
End Sub
'//

Message#3 2015年1月22日(木)22時58分
From: Dell
返事 削除 変更
シーモアのメッセージ(#2)への返事

> HPの作りが1ヶ月単位でしか表示できないようになっているので、翌月を指定して再度取り込みを実施するしかないですね

ご回答ありがとうございます。
2ヶ月、3ヶ月を別のセルで指定して指定月まで繰り返すような形にしたいという思いがあったのですが、言葉足らずで説明不足でした。
貴重なお時間をありがとうございました。

Message#2 2015年1月22日(木)22時55分
From: シーモア
返事 削除 変更
HPの作りが1ヶ月単位でしか表示できないようになっているので、翌月を指定して再度取り込みを実施するしかないですね

Message#1 2015年1月22日(木)22時53分
From: Dell
返事 削除 変更
現在、各サイトを参考にしながら、下記のコードで一ヶ月分は取得できていますが、複数月を取得する場合、どのようにすればいいでしょうか。
 たとえば2014年12月1日〜2015年1月17日の期間
Excel2013を使用していますが、外部データの取り込みではエラーが出るため、使用していません。

Sub Main()
Application.ScreenUpdating = False '画面更新禁止

Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.Application")
'IEを開いて非表示
objIE.Visible = False
yy = Range("a1").Value
mo = Range("B1").Value
da = Range("C1").Value
'指定URLへ移動する
objIE.Navigate "http://www.data.jma.go.jp/obd/stats/etrn/view/daily_s1.php?prec_no=74&block_no=47893&year=" & yy & "&month=" & mo & "&day=" & da & "&view="

'表示完了を待つ .readyState と .Busy を見る
While objIE.readyState <> 4 Or objIE.Busy = True 'IEがBusyの間 待つ
DoEvents
Wend
DoEvents
'表示待ちここまで

'Tableタグを抜き出す
Dim objT As Object 'テーブルオブジェクトの格納用
Set objT = objIE.document.all("tablefix1") '.all("id名前")でテーブルタグを抜く

If objT Is Nothing Then '↑上で見つかったか?
MsgBox "err 表が見つかりません、 IDを確認してください。"
Exit Sub 'エラーなので抜ける。
End If

Dim x As Integer '列の管理
Dim y As Integer '行の管理
'Worksheets(3).Select
'Webの表をシートへ転記(代入する)
For y = 0 To objT.Rows.Length - 1 '行のループ
For x = 0 To objT.Rows(y).Cells.Length - 1 '列数分ループ
Worksheets(3).Cells(y + 2, x + 1) = objT.Rows(y).Cells(x).innertext
'↑y+1 1行目から書き出す、11行目にするには y+1+10に変更する
Next
Next

'objIE.ExecWB 17, 0 'OLECMDID_SELECTALL = 17 全てを選択
'objIE.ExecWB 12, 0 'OLECMDID_COPY = 12 コピー
'Range("A1").Select
'ActiveSheet.PasteSpecial Format:="HTML" 'HTML形式で貼り付ける

objIE.Quit '.QuitでIEを閉じる

'使用したオブジェクト変数を空に。
Set objT = Nothing
Set objIE = Nothing
Worksheets(2).Select
Application.ScreenUpdating = True '画面更新
End Sub

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降

VBAのIE制御についてのQ&A掲示板

↑エクセルVBAのIE(InternetExplorer)操作で分からない事があればこちらの掲示板よりご質問ください^^

ExcelのVBA初心者入門

↑こちらはExcelのVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

VBAでIE(InternetExplorer)制御の準備

エクセルVBAでIE制御の応用編

こちらでは、エクセルVBAで実際に作成したIE(InternetExplorer)制御ツールをまとめています。自動ログインや情報収集など具体的に解説しています。IE(InternetExplorer)制御をされる方は参考にしてください。

【ダウンロード】IE操作に便利なツール

こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。

IEオブジェクトのメソッド・プロパティ

こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。

IE操作に利用されているVBA関数

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。

IE操作に利用されているステートメント

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。

IE(InternetExplorer)制御のVBAコード

こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。

ExcelのVBAで作成した役立つVBAコード

こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。

dmb.cgi Ver. 1.068
Copyright(C) 1997-2014, hidekik.com