⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒
最近本を出し、Webから株価データ取得
方法については Excel2003、Excel2007
を例にそちらで詳しく説明しました。

また、前は解析ツール関連VBAの解説
コーナーには「ローソク足」「カイリ率」
「ボリンジャーバンド」「一目均衡表」
「RSI」等のマクロ説明を掲載していまし
たが、出版した本に詳しく掲載した関係
でツール作成方法の解説は削除しました。
⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒
.    ⇒⇒⇒⇒⇒
最強パワー
アップ編は
まだ   
あります。 

ご注文は  
お早めに! 
⇒⇒⇒⇒⇒

(2) Webから株価データ取得(infoseek)

最近ページ別の訪問状況をチェックしたが、1週間集計では[1]のWebから株価データ取得が かなり多い。オレとしては「注目の低位株」や「重点トレース」の毎日更新している ページ訪問の固定客が増えることを期待しているが、現時点ではツールダウンロードやVBA解説を 期待の方のほうが多いので、取り合えずVBA解説を更に充実させればアカウントが増える と考え株価データ取得にinfoseek版を追加した。

infoseekから株価データをダウンロードするマクロの最低限必要な基本的マクロ の説明をします。これは株データ以外のWebに表示されているデータ取り込みにも応用できます
ただしサイトによってはダウンロード禁止の場合もあり、マクロ作成に当っては各サイトの注意書き にしたがいインターネット使用のマナーを守って下さい。

(追記⇒ [1]の最後尾にランキングアイコンを掲載したがクリックしてくれる方は殆ど無し  世の中冷たい人が多いね)

ダウンロード
これは説明用に作成したマクロでプロテクトを掛けてないのでソースを見ることが出来ます。
KI(load2_np)ダウンロ−ド


1.概略
株価のダウンロ−ドは特に難しいことは何もなく、Excelの通常操作でマクロも自動記録できます。
(1)メニューから「新しいWebクエリ」実行(下図参照)


(2)新しいWebクエリダイアロク(下図)へ必要事項入力(Excel2003のケース)


[1]WebのURL入力
 ・これはinfoseekの時系列を開き、銘柄コードと表示期間を
  指定しWebページを開きそのURLを事前にコピーしておいた方がよい
 ・ここへの貼り付けは、[Ctrl]+[V]キーで出来ます(右クリックは効かない)

[2]Webページ取む表を選択する(Excel2002から簡単になった)

[3]そのWebページ内の表の位置はサイトの表示変更により時々変わります
  (テーブル位置が判らなくなった時は本例を参考に自動記録すれが直ぐ判る)

[4] 「取り込み」クリックで(3)へ

※ このURL例は、時系列のデーリーデータですが、「週別」「月別」
  も同じようにダウンロード出来ます。また他のサイトの
   株価情報も大体同じ方法でダウンロード出来ます。

【注意】infoseekにはダウンロード規制に関する注意書きは特にないので
    ダウンロードして使用しても特に問題ないと思います。
    しかし、他のサイトでは自分のPCの画面で見る以外は禁止とのコメント
    がある場合が殆どです。自作のツールを作成する場合は各サイトの
    注意をよく読みインターネットのマナーを守りましょ。


(3)貼り付けるセル指定



 ・本例はセル"A1"を指定

 ・【参考】KIkabu(load)は"A3"です


(4)ダウンロードしたシート



2.自動記録のマクロ説明
(1)自動記録したマクロ
前述の、1.概略を自動記録すると、下記マクロが出来る。

'==================================================================================
' Macro1 Macro
' マクロ記録日 : 2004/12/18  ユーザー名 : IRYO
'
    Range("A1").Select
    With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://money.www.infoseek.co.jp/MnStock/mn_slast.html?qt=7203.t&sy=2004&sm=8&sd=18&ey=2004&em=12&ed=18&k=d" _
        , Destination:=Range("A1"))
        .Name = _
        "mn_slast.html?qt=7203.t&sy=2004&sm=8&sd=18&ey=2004&em=12&ed=18&k=d"
        .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 = "22"
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
End Sub
'==================================================================================
これでマクロ完成です。簡単でしょう!!

上記をコピーしてExcelのマクロシートに貼り付ければ、7203(トヨタ)の 2004/8/18〜2004/12/18の株価をダウンロードすることが出来ます。

また、infoseekの1ページで取得出来るデータは50個までであり、 連続で50個以上取得する場合マクロに細工が必要です。本コーナーでは こよみ暦70日×2(約100日分)のサンプルを例に、概要で作成した 自動記録を使いやすくしたマクロを説明します。



3.サンプル掲載のKIkabe(load2_np)のマクロ説明

(1)変数の宣言銘柄コード指定

'==================================================================================
Const URLYAHOO As String = "URL;http://money.www.infoseek.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 load2_np()

'過去データ削除
 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は定数指定がマクロがすっきりする
・定数宣言BASHO → 市場を指定 ".t"東証、".o"大阪、等ここを変更する
  (定数の名前は、全て大文字にするのが通例)
・Dim ymden As Date → 日付形式指定でこの変数は日付のみ代入可
・過去データ削除 → 連続で別銘柄実行を考慮し一度シートデータを削除
・銘柄コード指定 → 4桁等入力ミス防止もガードした方がよい



(2)取得期間の指定

'==================================================================================
'取得日の指定
    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 = 3
    Call 取得準備
    
'取得2
    ymden = ymdst - 1
    ymdst = ymden - 70
    
    Cells(10000, 1).End(xlUp).Select
    endr = ActiveCell.Row + 1
    Call 取得準備

'==================================================================================
・最終取得日を使用者が入力する
・ymdst = ymden-70 → スタート日は、本例は最終取得日より70日前
  (この70は休日も含むこよみ暦であり、70行取得の意味ではありません)
・取得2で、取得1以前の70日をダウンロード
  (取得1で貼り付けた次の行から貼り付ける関係で、変数(endr)へ最終行を読み取る)



(3)最終処理

'==================================================================================
'データ整理
    Columns("B").Select             'B列をコピー
        Selection.Copy
    Range("G1").Select              'G列へ貼り付け
        ActiveSheet.Paste
    Columns("F:F").Select           'F列をコピー
    Selection.Copy
    Range("B1").Select              'B列へ貼り付け
    ActiveSheet.Paste
    Columns("F:F").Select            'F列のカット
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft
    Range("H9").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標準フォーマットにしておいた方がよい。
→「日付」「出来高」「始値」「高値」「安値」「終値」順に列替え
・株価データ以外のコメントデータ削除



(4)取得準備

'==================================================================================
ub 取得準備()
'スタート日
    d10y = Year(ymdst)
    d10m = Month(ymdst)
    d10d = Day(ymdst)
'収得日
    d11y = Year(ymden)
    d11m = Month(ymden)
    d11d = Day(ymden)
'URLと日付指定
urlweb = URLYAHOO & "MnStock/mn_slast.html?qt=" & meino & BASHO & "&sy=" & d10y & "&sm=" _
    & d10m & "&sd=" & d10d & "&ey=" & d11y & "&em=" & d11m & "&ed=" & d11d & "&k=d"
Call 取得

End Sub
'==================================================================================
・Web側CGIに合わせるため、年、月、日に分ける
・URLはinfoseekへ直接記入した場合と、100%同じであること。



(5)Webから取得

'==================================================================================
Sub 取得()
With ActiveSheet.QueryTables.Add(Connection:=urlweb _
        , Destination:=Cells(endr, 1))
    .AdjustColumnWidth = True
    .WebSelectionType = xlSpecifiedTables
    .WebFormatting = xlWebFormattingNone
    .WebTables = "22"
    .Refresh BackgroundQuery:=False
End With
End Sub
'==================================================================================
[1]-1で説明済み(変わっているのは、.WebTables = "22"だけ)


◆◆このページを活用された方は下記をクリックしランキングの応援をお願いします◆◆

【ホーム】