株価を自動的に取得してくれるマクロについて前回の記事において、以下の手順1を紹介しましたのでこの記事では手順2以降を説明していこうと思います。
- ポートフォリオ(自分が有している株リストみたいなもの)の全ての株価をexcelのVBAで取得(俗にいうスクレイピング)
- 1.で取得した情報を扱いやすい形にしてログを蓄積(表を用いて値動きを視覚的に表現するため)
- タスクスケジューラを用いて毎日、決めた時間に勝手に1. 2. をやってくれるように設定 ←ここ重要
手順2
手順1で取得した情報を扱いやすい形にしてログとして蓄積していきましょう。
完成イメージ図は以下のようになります。
考え方は単純です。自身が保有している株式全てについて①~③を順に実行していきます。
①マクロ実行日を取得し、空の行になるまでcol(列)を左にスライドさせる
② i – 既に株式名が存在する場合
⇒該当株が存在するrow(行)まで下にスライドさせる
ii- 株式名に該当株が存在しない(新規に株式を購入した)場合
⇒i. において検索する際に一番下までスライドしても存在しない株式については、
新たに株式の行に追加する
③その株式の評価損益を(row行, col列)のセルに出力
①の処理をVBAで表現すると以下のようになります。
*VBAでマクロを作成していく際には一番左上(A1)から処理を書いていくよりも、ゆとりを持たせてC3くらいから定義していくと良いかと思います。後から機能を追加したい場合に実装が楽になります。使用しなければ、その領域を非表示にしておけば良いので余白を開けておくことをお勧めします。
Dim row, rowInit, col, colInit As Integer '出力行列コントロール用
row = 2 '出力開始行 マクロ実行日を記録するために1行下げておく
col = 3 '出力開始列 評価損益や株式を記録するために2列ずらしておく
rowInit = row '出力リセット用 ←作っておくと後で楽
colInit = col '出力リセット用 ←作っておくと後で楽
count = 0 'マクロ結果を格納していくcol(行)を決定するために使用
'ログ作成日時記録("log"シートを予め作っておく必要がある)
Do While Sheets("log").Cells(rowInit - 1, colInit + count).Value <> ""
count = count + 1
If Sheets("log").Cells(rowInit - 1, colInit + count).Value = Date Then
GoTo CONTINUEDATE '①に飛ぶ
End If
Loop
CONTINUEDATE: '①
Sheets("log").Cells(rowInit - 1, colInit + count).Value = Date
出力する場所を決定したら、後は順に取得した情報をexcelに落とし込んでいきます。
12-23行目あたりの処理で実際にログを記録していきます。
Dim lRow, lCol As Integer 'ログ用パラメータ
Dim outFlag As Boolean '有効なテーブル範囲フラグ
For Each mtext In table.getElementsByClassName("mtext") '②
If outFlag = True Then
Sheet.Cells(row, col) = mtext.innerText
col = col + 1
lRow = rowInit
lCol = colInit
continueFlag = False
If col = colInit + 4 Then
'ログ作成 ③
Do While Sheets("log").Cells(lRow, lCol + 1).Value <> ""
If Sheet.Cells(row, colInit - 1) = Sheets("log").Cells(lRow, colInit + 1) Then
Sheets("log").Cells(lRow, colInit + count) = Sheet.Cells(row, col - 1) '評価損益
continueFlag = True
End If
lRow = lRow + 1
Loop
If continueFlag = False Then
Sheets("log").Cells(lRow, colInit) = Sheet.Cells(row, colInit - 1) '株名
Sheets("log").Cells(lRow, colInit + count) = Sheet.Cells(row, col - 1) '評価損益
End If
col = colInit
row = row + 1
End If
End If
If mtext.innerText = "評価損益" Then
outFlag = True
End If
Next
以上でマクロを実行する度にログを勝手に取っていってくれます。
(同じ日に2回以上マクロを実行した場合には、その日のログが上書きされます)
このあたりの処理は適当にVBAの書き方を調べてもらえば、より効率的にかけると思いますので各自で好きなようにカスタマイズしていけば良いと思います。
ソースとしてはここまで実装できれば、大方完成となります。
しかし、現状のままでは一回一回マクロを手動で起動してあげなくてはなりません。これは面倒ですね。自動的に動くようにしてあげましょう。
その処理については次の”株価自動取得マクロ_SBI証券-(3)-”において紹介をしていきます。
ここまで記事を読んでいただき、ありがとうございました。
コメント