2008-04-17

Webクエリ

前回の訂正。

ファイルを保存する時にはP:ドライブに保存してください。
すると、保存したパソコンとは別のパソコンでも、ファイルを使うことが出来ます。

今日の内容

エクセル:Webクエリ
VBA:While文、Until文

インターネットからのデータの取り込み

前回の講義を思い出しながら、次のプログラムを実行してみてください。書き写すと時間がかかるので、コピーしてください。

Sub 表の取り込み()
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://table.yahoo.co.jp/t?s=998405.t&g=d", Destination:=Range("$A$1"))
.Name = "t?s=998405.t&g=d"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "19"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub

これはYahoo!ファイナンスからTOPIXの日次データを取り込むためのプログラムです。そうは言っても、ここに書かれた言葉を全部覚える必要はありません。順を追って説明します。
Excelを立ち上げて「データ」の「Webクエリ」をクリックします。すると別の画面が開くので、アドレス欄にhttp://quote.yahoo.co.jp/と書きます。

右側の「TOPIX」をクリックして、次の画面中央の「時系列」をクリックします。

TOPIXの値の表の左上にチェックをつけて「取り込み」をクリックします。
ここですぐにOKを押さずに「プロパティ」を押します。


「既存のセルを新規データで上書きし、使用されていないセルはクリアする」に●をつけてOKを押し、前の画面に戻ったらもう一度OKを押します。
するとこのようにエクセルのシートに表がコピーされます。

ここまで出来たら、先週の「マクロの記録」を使って、この取り込む作業をマクロに記録すると、先ほどのプログラムが記録されます。
今後必要に応じて修正することにします。

While文とUntil文

読み込んだ表が何行あるか数えましょう。
最初の行からチェックし始めて、空白でなければ次の行をチェックする、空白なら終わり、というロジックで、行の数を数えます。空白でない限り次の行を見ることを繰り返すのですからWhile文を使います。

i=1
Do While cells(i,1) <> ""
  i = i + 1
Loop

MsgBox (i)

これで行数を正しく数えていますか?正しくない場合は理由を考えて、正しく数えるプログラムを書いてください。
出来た人は終値の平均を求めるプログラムを考えてください。

繰り返しには他の構文もありますので、まとめて紹介します。

  1. Do While 条件
      プログラム
    Loop
    最初に条件を判断し、条件が満たされている間(While)、Loopまでのプログラムを実行します。
  2. Do
      プログラム
    Loop While 条件
    まずプログラムを実行します。 その後条件が満たされている間(While)、Doに戻ってプログラムを実行します。
  3. Do Until 条件
      プログラム
    Loop
    最初に条件を判断し、条件が満たされるまで(Until)、Loopまでのプログラムを実行します。
  4. Do
      プログラム
    Loop Until 条件
    まずプログラムを実行します。 その後条件が満たされるまで(Until)、Doに戻ってプログラムを実行します。

今日の課題

Yahoo!ファイナンスから今度は日経平均株価の表を取り込み、そして取り込んだ表の行数を数えるプログラムを書いてメールで提出してください。「マクロの記録」を使って構いません。

0 件のコメント: