VBA化する部分の作業手順

上記の手順のうち、1と5については、一度Excelを保存したら、そのまま再利用できますが、その他の手順は毎回繰り返す必要がありますので、この部分をVBA化しましょう。ただ、天気予報は頻繁に更新されるデータではありませんので、Excelを開いた時だけ自動実行されるようにします。

Excelを開いた時の自動実行

[Alt]+[F11]キーでVBエディタを開き、左ペインで[ThisWorkbook]を選択し、コードウィンドウの上部で、[Workbook]、[Open]を選択します。「Private Sub Workbook_Open()」は開いた時に自動実行されますので、この中にVBAを記述します(図11)。

図11 VBAのコード

以下では、細かなコードの説明について解説していきます(完全なコードは、ここ【著註:サンプルへのリンクをお願いします】からダウンロードしてください)。

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名で、現在も一緒に執筆をできる有志を募集中。