株価自動取得マクロ_SBI証券-(1)-

Investment

突然ですが、あなたは株取引をしていますか?

現在の日本では銀行の金利はかなり低く、0.002%程となっています。また、*NISA(少額投資非課税制度)と呼ばれる投資に関する税の優遇制度もあるため、銀行にお金を預けておくくらいなら株式を買おうと考える人も多いと思います。

*NISA:めちゃくちゃざっくり言うと、投資で得た収益を非課税で受け取ることができる制度です。
    通常、配当金・分配金や譲渡による利益に対して20.315%の税金がかかりますが、
    NISAの適用範囲内であれば全て非課税となります。
    詳細については、NISAでググって貰えば情報が溢れていますので興味のある方は確認してみてください。

私も3か月ほど前からNISAを始めましたが、個別株も含めてリスクヘッジのために投資先を分散していくと管理がどんどん大変になってしまいます。

利益を出せるように株への投資をしているのに自分で保有している株の値動きを全て、毎日把握していないのは論外だと思います。思ったが吉日ということで、株価を自動的に取得してくれるマクロを作成しました。

マクロの大まかな手順は以下の通りです。(マクロはwindows10上で動くように設計しています。)

  1. ポートフォリオ(自分が有している株リストみたいなもの)の全ての株価をexcelのVBAで取得(俗にいうスクレイピング)
  2. 1.で取得した情報を扱いやすい形にしてログを蓄積(表を用いて値動きを視覚的に表現するため)
  3. タスクスケジューラを用いて毎日、決めた時間に勝手に1. 2. をやってくれるように設定 ←ここ重要

実際に手順を紹介する前に、設定しておかなければならない項目があります。
マクロを実行するためには以下のライブラリをVBAで使用できるようにアクティベートする必要があります。

・Microsoft HTML Object Library
・Microsoft Internet Controls

手順は以下の4ステップです。
VBAの開発ツールを起動 ⇒ ツール内の参照設定 ⇒ 上記2項目を探してチェックを入れる ⇒ OKクリック



手順1

早速ですが、手順1 を実行するために現在のページがどのような構成になっているのかを確認します。私の場合、SBI証券を利用していますので以下の画像のようになっています。

必要な情報は以下の5つ
①保有株の名前
②保有口数
③取得単価
④基準価額
⑤評価損益

では、HTMLではどのように表現されているのでしょうか?実際にソースを確認しましょう。
ブラウザ上でマウス右クリックを行うと以下の”ページのソース”が表示されると思いますので、ここから確認します。

それっぽいところがヒットしましたね。

着目したいところは以下画像の黄色くマークしているclass=”mtext”です。どうやらmtextという名のテーブル内に私の欲しい情報が格納されていることが判明しました。

ここまで分かれば後はexcelのVBAを用いて必要な情報を持ってくれば良いだけです。(スクレイピングですね)

まずは先ほどのポートフォリオの画面に移動しなければいけません。
適当にSBI証券のログイン画面まで開くVBAを書きます。

Sub StockPriceMonitoring()
   'HTMLドキュメントオブジェクトを準備
   Dim htmlDoc As HTMLDocument
   'ブラウザ指定(IE)
   Dim objIE As InternetExplorer
   
   'ブラウザオブジェクトを生成
   Set objIE = CreateObject("InternetExplorer.Application")

   'IEを表示
   objIE.Visible = True
   
   'ログイン画面
   objIE.navigate "https://www.sbisec.co.jp/ETGate"

   '読み込み待ち(これがないと、うまくいきません。)
   Do While objIE.Busy = True Or objIE.readyState < 4
      '4=READYSTATE_COMPLETE
      DoEvents
   Loop

   'objIEで読み込まれているHTMLドキュメントをセット
   Set htmlDoc = objIE.document
   
   以後の処理はここに書いていきます。
   
End Sub

次に当たり前ですが、自身の証券口座にアクセスするためにIDとパスワードを入力する必要があります。

*以下〇〇〇には、自身のIDとパスワードを入力します。

	'ID
	htmlDoc.getElementById("user_id").Value = "〇〇〇"
	'パスワード
	htmlDoc.getElementById("user_password").Value = "〇〇〇"
	'ログインボタンクリック
	htmlDoc.getElementById("ACT_login").Click

	'読み込み待ち(これがないと、うまくいきません。)
	Do While objIE.Busy = True Or objIE.readyState < 4
		'4=READYSTATE_COMPLETE
		DoEvents
	Loop

そして、ポートフォリオ画面の情報を順にexcelに出力していく処理を書きます。

	'ポートフォリオ画面に移動
	objIE.navigate "https://site3.sbisec.co.jp/ETGate/?_ControlID=WPLETacR001Control&_PageID=DefaultPID&_DataStoreID=DSWPLETacR001Control&_ActionID=DefaultAID&getFlg=on"
	
	'objIEで読み込まれているHTMLドキュメントをセット
	Set htmlDoc = objIE.document
	
	'目的のテーブル情報を得るためにtableタグを格納
	table = htmlDoc.getElementsByTagName("table")
	
	'excel出力行列コントロール用に準備(本来は先頭に書いた方がいいです)
	Dim row, col As Integer
	row = 1
	col = 1	'A1から順に値を出力する場合
	
	'tableにおいて、クラス名がmtextであるものに対して処理を行う
	For Each mtext In table.getElementsByClassName("mtext")
	
		'情報をexcelに出力
		Cells(row, col) = mtext.innerText
		col = col + 1
		
		'4個周期で次の株情報になるため改行処理を入れる
		If col = 4 Then
			col = 1
			row = row + 1
		End If

	Next

大まかに全体的なコードとしては以上となります。
以下のように、ほしい情報を出力することが出来ました。いい感じですね。
情報さえ取ってこれれば後はexcelで好きなようにデータを成形すれば問題なしです。

記事が長くなってきましたので、手順2以降については別途”株価自動取得マクロ_SBI証券-(2)-”において紹介をしていきます。

ここまで記事を読んでいただき、ありがとうございました。

コメント

タイトルとURLをコピーしました