VBA化する部分の作業手順
上記の手順のうち、1と5については、一度Excelを保存したら、そのまま再利用できますが、その他の手順は毎回繰り返す必要がありますので、この部分をVBA化しましょう。ただ、天気予報は頻繁に更新されるデータではありませんので、Excelを開いた時だけ自動実行されるようにします。
Excelを開いた時の自動実行
[Alt]+[F11]キーでVBエディタを開き、左ペインで[ThisWorkbook]を選択し、コードウィンドウの上部で、[Workbook]、[Open]を選択します。「Private Sub Workbook_Open()」は開いた時に自動実行されますので、この中にVBAを記述します(図11)。
以下では、細かなコードの説明について解説していきます(完全なコードは、ここ【著註:サンプルへのリンクをお願いします】からダウンロードしてください)。
Webサイトのデータの読み込み
「ActiveWorkbook.RefreshAll」の1行だけでOKで、データが更新されます。
広告表示行の削除
PRで始まる広告の行を行削除する部分は、リスト1のようなコードになります。
[リスト1]広告表示行の削除
'広告表示行の削除
Range("テーブル1").Select '(1)
firstRow = Selection.Cells(1, 1).Row '(2)
For i = 1 To Selection.Rows.Count '(3)
If Left(Cells(firstRow + i - 1, 1).Value, 2) = "PR" Then '(4)
Rows(firstRow + i - 1).Delete '(5)
End If
Next
手作業の手順1で作成された「テーブル1」という名前を利用して、データ部分を選択します(1)。選択範囲の最上行の絶対行番号をfirstRow変数に格納します(2)。セルの内容を探索するため、上から順に選択範囲の行数だけ繰り返します(3)。当該行の1列目のセルの最初2文字が「PR」だったら(4)、その行を削除します(5)。
日付、天気、気温の列の分割
1列にまとまっている日付、天気、気温を列に分ける部分は、リスト2のようなコードになります。
[リスト2]日付、天気、気温の列の分割
Range("テーブル1").Select '(1)
Selection.Resize(ColumnSize:=1).Select '(2)
Application.DisplayAlerts = False '(3)
Selection.TextToColumns DataType:=xlDelimited, Space:=True '(4)
Application.DisplayAlerts = True
「区切り位置」を利用する範囲は1列である必要があります。手作業の時は、元々「テーブル1」範囲が1列でしたが、今はデータ分割により3列に広がっています。そこで、データ部分を選択し(1)、Resizeメソッドを使って、列幅(ColumnSize)を1に狭めます(2)。
この後、「区切り位置」操作を利用するため、(4)TextToColumnsメソッドを利用します。指定文字で区切るので、DataType引数にはxlDelimitedを指定します(固定幅で区切る場合はxlFixedWidth)。また、スペースを指定文字とするため、Space引数をTrueにします(4)。なお、第2、3列に前回のデータが残っているため、上書き確認メッセージで止まらないよう、Application.DisplayAlertsをFalseに設定しておきます(3)。
列幅の修正
「Cells.Select」で表全体を選択して、「Cells.EntireColumn.Autofit」で列幅を自動調整しています。
まとめ
今回は、東京地方の例で説明しましたが、XMLとの対応付けを行う手順でURLを変更すれば、みなさんの自宅、職場、旅行先についても同様に向こう1週間の天気予報が作れます。ぜひ、一度お試しください。
WINGSプロジェクト 遠藤 存著/山田祥寛監修
WINGS プロジェクトについて
テクニカル執筆プロジェクト(代表山田祥寛)。海外記事の翻訳から、主にWeb開発分野の書籍・雑誌/Web記事の執筆、講演等を幅広く手がける。2011年5月時点での登録メンバは35名で、現在も一緒に執筆をできる有志を募集中。