|
「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に変えた)