IT女子がお届けするオフィスワーク効率化・VBA技術紹介

ノンプログラマーによるノンプログラマーのためのやさしい解説付き

スポンサーリンク

【VBAでIE操作】SBI証券のWebサイトにログインしてポートフォリオを確認するマクロ

SBI証券のサイトを勉強材料にして、VBAでIE操作をしてみます。

f:id:excel-accounting:20180623210931p:plain:w400

全体の流れ

下記の2段階の処理を作ります。

①SBI証券のトップページからマイページにログイン
SBI証券|株・FX・投資信託・確定拠出年金・NISA

②ログイン後のトップページから「ポートフォリオ」画面に遷移する

※この記事はVBAでIE操作をしたことがある人向けに書いているので、VBA全体の詳細な解説は割愛しています。

処理①マイページにログイン

ユーザーネームとパスワードを入力し、ログインボタンをクリックする処理を作成します。

f:id:excel-accounting:20180623185443p:plain:w300

ユーザーネーム・パスワードの入力

WebサイトのHTML

<dt>ユーザーネーム</dt>
<dd><div id="user_input"><input type="text" name="user_id" value=""  onKeyPress="enterpress();" onfocus=Monc("UI")></div></dd>
<dt>パスワード</dt>
<dd><div id="password_input"><input type="password" name="user_password" maxlength="10" value=""  onKeyPress="enterpress();" onfocus=Monc("PW") ></div></dd>

name属性を確認します。
ユーザーネーム=user_id
パスワード=user_password

ログインボタンのクリック

WebサイトのHTML

<p class="sb-position-c"><a onmouseout="revSetOutAction(this);" onmouseover="revSetOverAction(this);"><input type="image" src="(省略)" name="ACT_login" alt="ログイン" title="ログイン" class="ov" width="152" height="42" onclick="changeNWEBFLG();"></a></p>

name属性を確認します。
ログイン=ACT_login

処理②ポートフォリオ画面に遷移

つづいて、ログイン後の画面上部にある「ポートフォリオ」をクリックする処理を作成します。

f:id:excel-accounting:20180623185846p:plain


ここからはアカウント所有者しか見れないHTMLなので一部分のみ切り取ってきます。

<img src="(省略)"  alt="ポートフォリオ" title="ポートフォリオ" width="117" height="30">

name属性がない!

f:id:excel-accounting:20180426143057p:plain:w150


ならば、imgタグを順番に取得して、alt属性が「ポートフォリオ」だったらクリックする処理にします。

Dim img As Object
For Each img In htmlDoc.all.tags("img")
    If img.alt = "ポートフォリオ" Then img.Click
Next

ソースコード

参照設定で下記の2つを使用しています。
・Microsoft HTML Object Library
・Microsoft Internet Controls

Sub SBI_Login()
    
    Dim objIE As InternetExplorer
    Set objIE = CreateObject("Internetexplorer.Application")
    
    objIE.Visible = True 'IEを表示
    
    objIE.navigate "https://www.sbisec.co.jp/ETGate"
    
    Call WaitIE(objIE)
    
    Dim htmlDoc As HTMLDocument 'HTMLドキュメントオブジェクトを準備
    Set htmlDoc = objIE.document 'objIEで読み込まれているHTMLドキュメントをセット
    
    htmlDoc.getElementById("user_id").Value = "ここにユーザネームを入力" 'ユーザーネーム
    htmlDoc.getElementById("user_password").Value = "ここにパスワードを入力" 'パスワード
    htmlDoc.getElementById("ACT_login").Click 'ログイン
    
    Set htmlDoc = Nothing 'いったん破棄
    
    Call WaitIE(objIE)
    
    'ログイン後のページのHTMLを読み込む
    Set htmlDoc = objIE.document
    
    'ポートフォリオをクリック
    Dim img As Object
    For Each img In htmlDoc.all.tags("img")
        If img.alt = "ポートフォリオ" Then img.Click
    Next

End Sub

Sub WaitIE(objIE As InternetExplorer)

    Do While objIE.Busy = True Or objIE.readyState < 4 '読み込み待ち
        '4=READYSTATE_COMPLETE
        DoEvents
    Loop

End Sub

私は毎日エクセルで家計簿をつけているので、そのExcelファイルにマクロを仕込んでこのようにボタンを用意することにしました。
【イメージ】
f:id:excel-accounting:20180623205219p:plain:w200


システムへの自動ログイン、会社でも使えたら便利ですよね。

似たような処理ですが、こちらはWorkbook_Openメソッドを使用しています。

スポンサーリンク