「Webから株価データ取得(Yahoo)」とほぼ同じツールは、 (←←クリックでアマゾンのページを表示)この本に ツール名「tp01-ダウンロード(Yahoo)」で、マクロの説明付きでソースを公開しています。 マクロを改善して、自分専用の更に儲かるツール作成を考えている方はこの本を参考にして下さい。 |
'================================================================================== Sub Macro1() ' マクロ記録日 : 2004/7/18 ユーザー名 : iryo ' With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://table.yahoo.co.jp/t?c=2004&a=6&b=1&f=2004&d=7&e=18&g=d&s=1301.t&y=0&z=1301.t" _ , Destination:=Range("A1")) .Name = "t?c=2004&a=6&b=1&f=2004&d=7&e=18&g=d&s=1301.t&y=0&z=1301.t" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "10" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .Refresh BackgroundQuery:=False End With End Sub '==================================================================================これでマクロ完成です。簡単でしょう!!
取込み方法の指定 | 説明 |
FieldNames = True | データの列見出し:True→表示、False→非表示 |
RowNumbers = False | True→行番号の指定追加? |
FillAdjacentFormulas = False | True→クエリーテーブルの更新時、数式を自動更新 |
PreserveFormatting = True | True→ページフィルド項目の移動等でピポットテーブルの書式維持 |
RefreshOnFileOpen = False | True→ブックを開くたびにクエリーテーブル自動更新 |
BackgroundQuery = True | True→クエリーテーブルをバックグランド(非同期)で実行 |
RefreshStyle = xlInsertDeleteCells |
xlInsertDeleteCells→ワークシートに新しい一部の行を挿入または削除 |
xlOverwriteCells→ ワークシートに新しいセルまたは行を追加しません | |
xlInsertEntireRows 必要ならば、オーバーフローしないように行全体を挿入 | |
SavePassword = False | True→パスワードを保存する |
SaveData = True | True→クエリーテーブルのデータをブックと一緒に保存 |
AdjustColumnWidth = True | True→列幅のアジャストを行なう |
RefreshPeriod = 0 | アプリケーション情報更新間隔(0は自動タイマ更新が無効) |
WebSelectionType = xlSpecifiedTables | xlEntirePage→ページ全体、xlAllTables→Webの表のみ、 |
WebFormatting = xlWebFormattingNone |
保存するWebページ形式:xlWebFormattingNone→指定なし |
xlWebFormattingRTF→リッチテキスト、xlWebFormattingAll→HTML | |
WebTables = "10" | 10→Webページのインデックス番号10のテーブルを指定 |
WebPreFormattedTextToColumns = True | Web ページの HTML<PRE>タグ内にあるデータを列に区切る |
WebConsecutiveDelimitersAsOne = True | Web ページの HTML<PRE> タグ内のデータが複数の列指定関連 |
WebSingleBlockTextImport = False | Web ページの特定のテーブルのみをインポートするかを示す値を設定 |
WebDisableDateRecognition = False | False の場合、日付認識を有効にします |
Refresh BackgroundQuery:=False | True→クエリーテーブル更新をバックグランド(非同期)で実行 |
'================================================================================== Sub Macro1() With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://table.yahoo.co.jp/t?c=2004&a=6&b=1&f=2004&d=7&e=18&g=d&s=1301.t&y=0&z=1301.t" _ , Destination:=Range("A1")) .RefreshStyle = xlOverwriteCells .AdjustColumnWidth = False .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "10" '時々変更あり、最近は19 .Refresh BackgroundQuery:=False End With End Sub '==================================================================================上記をコピーしてExcelのマクロシートに貼り付ければ、1301(極洋)の 2004/6/1〜2004/7/18の株価をダウンロードすることが出来ます。
'================================================================================== Const URLYAHOO As String = "URL;http://table.yahoo.co.jp/" Const BASHO As String = ".t" '東証 Dim urlweb As String 'Web接続先 Dim meino As String '銘柄コード Dim ymden As Date '取得end日 Dim ymdst As Date '取得スタート日 Dim endr As Integer 'データ貼り付け最終行 Dim d10y As String, d10m As String, d10d As String Dim d11y As String, d11m As String, d11d As String Sub load_np() '過去データ削除------------------------------------------------------------- ActiveSheet.Unprotect For Each zu In ActiveSheet.Shapes zu.Delete Next Cells.Select Selection.ClearContents Range("A1").Select '銘柄コード指定------------------------------------------------------------ msg = "Yahooファイナンスからデータ取得する銘柄コード入力" meino = InputBox(msg, "銘柄コード入力", "") If meino = "" Then MsgBox "取得する銘柄コードを入力して下さい" Exit Sub End If If Len(meino) <> 4 Then MsgBox "取得する銘柄コードを数字4桁で入力して下さい" Exit Sub End If '==================================================================================・定数宣言URLYAHOO → 変化しないURLは定数指定がマクロがすっきりする
'================================================================================== '取得日の指定 yyy = Date msg = "データ取得する日付を指定して下さい" ymd = InputBox(msg, "銘柄コード入力", yyy) If ymd = "" Then MsgBox "取得する日付を入力して下さい" Exit Sub End If If IsDate(ymd) = False Then MsgBox "日付(yy/mm/dd)を入力して下さい" Exit Sub End If '取得1 ymden = ymd ymdst = ymden - 70 endr = 1 Call 取得準備 '取得2 ymden = ymdst - 1 ymdst = ymden - 70 Cells(10000, 1).End(xlUp).Select endr = ActiveCell.Row + 1 Call 取得準備 '==================================================================================・最終取得日を使用者が入力する
'================================================================================== Sub 取得準備() 'スタート日 d10y = Year(ymdst) d10m = Month(ymdst) d10d = Day(ymdst) '収得日 d11y = Year(ymden) d11m = Month(ymden) d11d = Day(ymden) 'URLと日付指定 urlweb = URLYAHOO & "t?c=" & d10y & "&a=" & d10m & "&b=" & d10d & "&f=" & d11y & "&d=" _ & d11m & "&e=" & d11d & "&g=d&s=" & meino & BASHO & "&y=0&z=" & meino & BASHO Call 取得 End Sub '==================================================================================・Web側CGIに合わせるため、年、月、日に分ける
'================================================================================== 'データ整理 Columns("G").Delete Shift:=xlToLeft '調整後終値*カット Columns("B").Insert Shift:=xlToRight 'B列を空ける Columns("G").Cut 'G列切り取り Range("B1").Select ActiveSheet.Paste 'B列へ貼り付け Range("A1").Select Cells(10000, 1).End(xlUp).Select cend2 = ActiveCell.Row '株データ以外の行削除 For i = cend2 To 4 Step -1 If IsNumeric(Cells(i, 2)) = False Or Cells(i, 2) = "" Then Rows(i).Select Selection.Delete Shift:=xlUp End If Next Range("A1").Select End Sub '==================================================================================・後でExcelでグラフ作成等行う場合、Excel標準フォーマットにしておいた方がよい。
'================================================================================== Sub 取得() With ActiveSheet.QueryTables.Add(Connection:=urlweb _ , Destination:=Cells(endr, 1)) .RefreshStyle = xlOverwriteCells .AdjustColumnWidth = False .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "19" .Refresh BackgroundQuery:=False End With End Sub '==================================================================================説明済み(2項参照のこと)(貼り付けセルは変数指定が出来るCellsに変えた)