VBA35_気象庁CSVファイルで読込実戦(後編)

20160327b.png
おはようございます。Benです。今日は前回の続きのCSVファイルを読み込み、条件に合ったものだけを使用する方法の後編です。読み込むデータはご覧のフォーマットです。

  • 気象庁の東京の気温をCSVでGET
  • それをVBAを使って読み込む
  • その中の毎日9時の値だけ使用
前回の復習では、データのダウンロードまでをやったのですがそれをそのままグラフにしても一日の気温の変動が大きすぎて季節変化がわからなかったです。今回は、毎日の午前9時の気温だけを抽出してデータにするというものです。

 Dim i As Integer '書き込むセルの行番号
 Dim Dum As String 'ダミーデータ格納用
 Dim Dstr As String '年月日時データ格納用
 Dim D As Date '年月日時
 Dim T As Single '気温
まずは変数の定義部分です。今回はグラフにする元データをシートに出力するので、iは出力する行番号です。出力するたびに1増やして下の行に移るようにしています。次のDumはダミー。順番に読み込んでいくので、不要なところを読み飛ばすために、この変数で読み込んでそれは何にも使用していません。Dstrは年月日時を読み込み、格納する変数ですが、いきなり日付型に格納するのは抵抗があったので、まずは文字列型に、ということです。そしてそれをCDateで日付に変換してD関数に格納します。Tは気温です。

 i = 2 '書き込みは2行目から 
 Open "d:\data.csv" For Input As #1 'ファイルを開く
 Do 'ヘッダ等不要部分飛ばし
  Input #1, Dum
 Loop Until Dum = "均質番号"
変数i、つまりデータを出力する行は、1行目が項目名なので2行目から、というのが1行目。ファイルを読み込みモードでオープン後、ヘッダを読み飛ばすために、ヘッダの最後の文字である均質番号になるまで繰り返します。均質番号のあとからデータの羅列があるのでそこまで読み飛ばしています。

 Do Until EOF(1) 'ファイルの終わりまで繰り返す
  Input #1, Dstr '年月日時を文字列として読み込む
  Input #1, T '気温を読み込む
  D = CDate(Dstr) '年月日時を日付型に変換
  If Hour(D) = 9 Then 'もし時刻が9時だったら
   Worksheets("data").Cells(i, 1) = D 'i行1列に年月日時
   Worksheets("data").Cells(i, 2) = T 'i行2列に気温を入力
   i = i + 1 '行を次に移す
  End If
  Input #1, Dum 'ダミー(品質情報)読み込み
  Input #1, Dum 'ダミー(均質番号)読み込み
 Loop 'Doに戻る
 Close #1 'ファイルを閉じる
データ読み込み部です。1行目のEOF(1)はEnd Of Fileの略と思われる関数で、ファイルの終わりに来るとTrueになります。(1)はファイル番号です。なので行全体の意味はファイル番号1のデータがなくなるまで繰り返すというものです。2,3行目で年月日時と気温を読み取って、4行目で日付に変換。5行目で9時かどうか判定し、9時だったらシートに情報を書き出しています。その後10,11行目でダミー情報を読み飛ばしてループでDoに戻ります。そして、ファイルをすべて読み終えたらファイルを閉じます。

Sub GMA_Temp_Reader()
 Dim i As Integer '書き込むセルの行番号
 Dim Dum As String 'ダミーデータ格納用
 Dim Dstr As String '年月日時データ格納用
 Dim D As Date '年月日時
 Dim T As Single '気温
 
 i = 2 '書き込みは2行目から
 
 Open "d:\data.csv" For Input As #1 'ファイルを開く
 
 Do 'ヘッダ等不要部分飛ばし
  Input #1, Dum
 Loop Until Dum = "均質番号"
 
 Do Until EOF(1) 'ファイルの終わりまで繰り返す
  Input #1, Dstr '年月日時を文字列として読み込む
  Input #1, T '気温を読み込む
  D = CDate(Dstr) '年月日時を日付型に変換
  If Hour(D) = 9 Then 'もし時刻が9時だったら
   Worksheets("data").Cells(i, 1) = D 'i行1列に年月日時
   Worksheets("data").Cells(i, 2) = T 'i行2列に気温を入力
   i = i + 1 '行を次に移す
  End If
  Input #1, Dum 'ダミー(品質情報)読み込み
  Input #1, Dum 'ダミー(均質番号)読み込み
 Loop 'Doに戻る
 Close #1 'ファイルを閉じる
End Sub
全コードはご覧のようになります。

20160328a.png
その結果をグラフにしたのがこちらです。前回掲載した処理前の上の図に比べ、9時のみを抽出した下の図は特徴がわかりやすくなっています。東京の夏は午前9時でも33度近い日もあるんですね。温暖化の影響かなあ。

この記事へのコメント


この記事へのトラックバック