本記事では、SBI証券・楽天証券を対象に、投資信託を自動発注するVBAエクセルマクロをシェアします。
参考になれば幸いです。
マクロ入りのエクセルブック
マクロ入りのエクセルブックは以下の通り
以下のように、資産アセット別にデータを管理しています。
マクロの紹介
マクロの初期設定
まず、初期設定が必要です。
まず、以下記事を参考に、Seleniumの設定をします。
楽天証券の投資信託積立金額を、自動更新するマクロ
楽天証券の、投資信託の積立金額を、エクセルで計算した設定値の内容で更新するマクロです。
事前準備①積立設定の手動設定
あらかじめ対象となる投資信託すべての積立設定を、WEBサイトにて、手動で実施しておきます。
状況によっては、追加積立すべきでない資産アセットがある場合もありますが、マクロを動かすため、最低積立額である100円にて、積立設定を常時残しておきます。
事前準備②積立設定したURLの取得の取得
マクロを動作させるためには、更新対象のURLの記述が事前に必要です。
URLのうち、共通部分はマクロコード内に記載しています。
URLのうち、都度変動部分は、都度vba実行時に取得します。(セッションID)
URLのうち、投資信託の積立設定済みの設定IDごとに変動する部分は、エクセルに記載しておきます(セッションID以降のURL部分)。
資産アセット1行に対し、2URL(投資信託1銘柄X証券口座積立 or クレジットカード積立の2種)を設定します。
その他
証券口座積立と、クレジットカード積立と楽天キャッシュ積立の金額変更に対応しています。
エクセルブック上で、アセットアロケーションの目標比率を設定しており、当該目標値とのギャップが大きい資産アセットに重点的に積立を行うよう、積立すべき値が自動計算されます。
マクロを動かすと、当該積立値を、セットしたURLを対象に更新します。
コードは以下の通りです。
Sub 楽天証券_夫_積立額変更(USER_ID_11 As String, USER_PAS11 As String, USER_PAS11_2 As String _
, PROFILE_PATH As String)
Workbooks("運用資産価額管理.xlsm").Activate
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
driver.Get "https://www.rakuten-sec.co.jp/ITS/V_ACT_Login.html"
driver.FindElementByXPath("//*[@id='form-login-id']").SendKeys USER_ID_11
driver.FindElementByXPath("//*[@id='form-login-pass']").SendKeys USER_PAS11
driver.FindElementByXPath("//*[@id='login-btn']").Click
sTmp = Mid(driver.Url, InStr(driver.Url, "_list&BV_SessionID=") + 19, 100)
For i = 3 To 17
If Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 55) <> "" And Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 48) <> Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 54) Then
10:
On Error GoTo ERR10
driver.Get "https://member.rakuten-sec.co.jp/app/ord_fu_reserve_correct.do;BV_SessionID=" & sTmp & Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 55)
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[2]/tbody/tr[4]/td[2]/div/div[1]/nobr/input").Clear
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[2]/tbody/tr[4]/td[2]/div/div[1]/nobr/input").SendKeys Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 48)
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[5]/tbody/tr[2]/td/div/div/div[2]/a").Click
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/input[52]").SendKeys USER_PAS11_2
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/div[5]/div[2]/a").Click
driver.Get "https://member.rakuten-sec.co.jp/app/ord_fu_reserve_correct.do;BV_SessionID=" & sTmp & Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 55)
If driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[2]/tbody/tr[4]/td[2]/div/div[1]/nobr/input").Value * 1 = Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 48) Then
Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 54) = Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 48)
Else
GoTo ERR10
End If
On Error GoTo 0
End If
Next i
For i = 3 To 17
If Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51) <> "" And Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 50) <> 100 Then
11:
On Error GoTo ERR11
driver.Get "https://member.rakuten-sec.co.jp/app/ord_fu_reserve_correct.do;BV_SessionID=" & sTmp & Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51)
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[2]/tbody/tr[4]/td[2]/div/div[1]/nobr/input").Clear
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[2]/tbody/tr[4]/td[2]/div/div[1]/nobr/input").SendKeys "100"
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[5]/tbody/tr[2]/td/div/div/div[2]/a").Click
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/input[52]").SendKeys USER_PAS11_2
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/div[5]/div[2]/a").Click
driver.Get "https://member.rakuten-sec.co.jp/app/ord_fu_reserve_correct.do;BV_SessionID=" & sTmp & Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51)
If driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[2]/tbody/tr[4]/td[2]/div/div[1]/nobr/input").Value * 1 = 100 Then
Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 50) = "100"
Else
GoTo ERR11
End If
On Error GoTo 0
End If
Next i
For i = 3 To 17
If Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51) <> "" And Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 43) <> Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 50) Then
12:
On Error GoTo ERR12
driver.Get "https://member.rakuten-sec.co.jp/app/ord_fu_reserve_correct.do;BV_SessionID=" & sTmp & Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51)
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[2]/tbody/tr[4]/td[2]/div/div[1]/nobr/input").Clear
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[2]/tbody/tr[4]/td[2]/div/div[1]/nobr/input").SendKeys Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 43)
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[5]/tbody/tr[2]/td/div/div/div[2]/a").Click
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/input[52]").SendKeys USER_PAS11_2
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/div[5]/div[2]/a").Click
driver.Get "https://member.rakuten-sec.co.jp/app/ord_fu_reserve_correct.do;BV_SessionID=" & sTmp & Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51)
If driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[2]/tbody/tr[4]/td[2]/div/div[1]/nobr/input").Value * 1 = Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 43) Then
Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 50) = Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 43)
Else
GoTo ERR12
End If
On Error GoTo 0
End If
Next i
'キャッシュ
For i = 3 To 17
If Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 53) <> "" And Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 52) <> 100 Then
13:
On Error GoTo ERR13
driver.Get "https://member.rakuten-sec.co.jp/app/ord_fu_reserve_correct.do;BV_SessionID=" & sTmp & Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 53)
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[2]/tbody/tr[4]/td[2]/div/div[1]/nobr/input").Clear
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[2]/tbody/tr[4]/td[2]/div/div[1]/nobr/input").SendKeys "100"
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[5]/tbody/tr[2]/td/div/div/div[2]/a").Click
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/input[52]").SendKeys USER_PAS11_2
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/div[5]/div[2]/a").Click
driver.Get "https://member.rakuten-sec.co.jp/app/ord_fu_reserve_correct.do;BV_SessionID=" & sTmp & Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 53)
If driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[2]/tbody/tr[4]/td[2]/div/div[1]/nobr/input").Value * 1 = 100 Then
Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 52) = "100"
Else
GoTo ERR13
End If
On Error GoTo 0
End If
Next i
For i = 3 To 17
If Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 53) <> "" And Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 46) <> Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 52) Then
14:
On Error GoTo ERR14
driver.Get "https://member.rakuten-sec.co.jp/app/ord_fu_reserve_correct.do;BV_SessionID=" & sTmp & Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 53)
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[2]/tbody/tr[4]/td[2]/div/div[1]/nobr/input").Clear
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[2]/tbody/tr[4]/td[2]/div/div[1]/nobr/input").SendKeys Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 46)
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[5]/tbody/tr[2]/td/div/div/div[2]/a").Click
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/input[52]").SendKeys USER_PAS11_2
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/div[5]/div[2]/a").Click
driver.Get "https://member.rakuten-sec.co.jp/app/ord_fu_reserve_correct.do;BV_SessionID=" & sTmp & Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 53)
If driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[2]/tbody/tr[4]/td[2]/div/div[1]/nobr/input").Value * 1 = Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 46) Then
Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 52) = Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 46)
Else
GoTo ERR14
End If
On Error GoTo 0
End If
Next i
Set driver = Nothing
Exit Sub
ERR10:
Resume 10
ERR11:
Resume 11
ERR12:
Resume 12
ERR13:
Resume 13
ERR14:
Resume 14
End Sub
楽天証券の投資信託をスポット購入するマクロ
楽天証券の投資信託を、エクセルで計算した設定値の内容でスポット購入するマクロです。
コードは以下の通りです。
Sub 楽天証券_スポット購入(USER_ID_11 As String, USER_PAS11 As String, USER_PAS11_2 As String _
, PROFILE_PATH As String)
Workbooks("運用資産価額管理.xlsm").Activate
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
driver.Get "https://www.rakuten-sec.co.jp/ITS/V_ACT_Login.html"
driver.FindElementByXPath("//*[@id='form-login-id']").SendKeys USER_ID_11
driver.FindElementByXPath("//*[@id='form-login-pass']").SendKeys USER_PAS11
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("//*[@id='login-btn']").Click
sTmp = Mid(driver.Url, InStr(driver.Url, "_list&BV_SessionID=") + 19, 100)
For i = 3 To 17
If Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 59) <> "" And Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 58) > 0 Then
driver.Get "https://member.rakuten-sec.co.jp/app/info_fu_invest_detail.do;BV_SessionID=" & sTmp & Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 59)
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div[1]/div/table/tbody/tr/td[1]/div/table/tbody/tr/td/div[3]/div[1]/div[2]/div[2]/div/ul/li[1]/a/img").Click
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[5]/tbody/tr[1]/td[2]/div/nobr/input").SendKeys Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 58)
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[5]/tbody/tr[5]/td[2]/div/table/tbody/tr/td[1]/input").Click
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[7]/tbody/tr/td/div/a/img").Click
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[2]/tbody/tr/td/table/tbody/tr/td[2]/input").SendKeys USER_PAS11_2
driver.FindElementByXPath("/html/body/div[2]/div/div[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/form/table[3]/tbody/tr/td/div/a/img").Click
End If
Next i
Set driver = Nothing
End Sub
SBI証券の投資信託積立金額を、自動更新するマクロ
SBI証券の、投資信託の積立金額を、エクセルで計算した設定値の内容で更新するマクロです。
証券口座積立と、クレジットカード積立の金額変更に対応しています。
コードは以下の通りです。
Sub SBI証券_積立額変更(USER_ID_1 As String, USER_PAS1 As String, USER_PAS1_2 As String, USER_ID_8 As String, USER_PAS8 As String _
, PROFILE_PATH As String)
Dim myBy As New By
Workbooks("運用資産価額管理.xlsm").Activate
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
driver.Get "https://www.sbisec.co.jp/ETGate"
driver.FindElementByXPath("//*[@id='user_input']/input").SendKeys USER_ID_1
driver.FindElementByXPath("//*[@id='password_input']/input").SendKeys USER_PAS1
driver.FindElementByXPath("/html/body/table/tbody/tr[1]/td[2]/div[2]/form/p[2]/input").Click
driver.FindElementByXPath("/html/body/div[1]/div[2]/div/div/ul/li[5]/a/img").Click
For i = 20 To 33
If Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 55) <> "" And Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 48) <> Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 54) Then
10:
On Error GoTo ERR10
driver.Get Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 55)
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[3]/div/div[1]/div/div/table/tbody/tr/td[3]/div/p/a").Click
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[1]/table/tbody/tr/td/div[9]/table/tbody/tr[1]/td[3]/div/input").Click
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("/html/body/div[6]/div[2]/div[2]/div[1]/div[2]/button").Click
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/form/table[2]/tbody/tr[2]/td/label/input").Clear
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/form/table[2]/tbody/tr[2]/td/label/input").SendKeys Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 48)
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/form/div[2]/button").Click
If driver.IsElementPresent(myBy.XPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[7]/div[2]/button")) Then
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[7]/div[2]/button").Click
End If
If driver.IsElementPresent(myBy.XPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[6]/div[2]/button")) Then
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[6]/div[2]/button").Click
End If
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/table/tbody/tr/td/form/div[2]/div[2]/input").SendKeys USER_PAS1_2
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/table/tbody/tr/td/form/div[2]/div[2]/button").Click
driver.Get Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 55)
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[3]/div/div[1]/div/div/table/tbody/tr/td[3]/div/p/a").Click
If Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 48) = Replace(driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[1]/table/tbody/tr/td/div[9]/table/tbody/tr[1]/td[2]/div[1]").Text, " 円", "") * 1 Then
Else
On Error GoTo ERR10
End If
Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 54) = Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 48)
End If
Next i
For i = 20 To 33
If Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51) <> "" And Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 50) <> 100 Then
11:
On Error GoTo ERR11
driver.Get Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51)
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[3]/div/div[1]/div/div/table/tbody/tr/td[3]/div/p/a").Click
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[1]/table/tbody/tr/td/div[9]/table/tbody/tr[2]/td[3]/div/input").Click
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("/html/body/div[6]/div[2]/div[2]/div[1]/div[2]/button").Click
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/form/table[2]/tbody/tr[2]/td/label/input").Clear
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/form/table[2]/tbody/tr[2]/td/label/input").SendKeys "100"
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/form/div[2]/button").Click
If driver.IsElementPresent(myBy.XPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[7]/div[2]/button")) Then
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[7]/div[2]/button").Click
End If
If driver.IsElementPresent(myBy.XPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[6]/div[2]/button")) Then
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[6]/div[2]/button").Click
End If
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/table/tbody/tr/td/form/div[2]/div[2]/input").SendKeys USER_PAS1_2
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/table/tbody/tr/td/form/div[2]/div[2]/button").Click
driver.Get Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51)
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[3]/div/div[1]/div/div/table/tbody/tr/td[3]/div/p/a").Click
If 100 = Replace(driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[1]/table/tbody/tr/td/div[9]/table/tbody/tr[2]/td[2]/div[1]").Text, " 円", "") * 1 Then
Else
On Error GoTo ERR11
End If
Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 50) = "100"
End If
Next i
For i = 20 To 33
If Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51) <> "" And Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 43) <> Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 50) Then
12:
On Error GoTo ERR12
driver.Get Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51)
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[3]/div/div[1]/div/div/table/tbody/tr/td[3]/div/p/a").Click
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[1]/table/tbody/tr/td/div[9]/table/tbody/tr[2]/td[3]/div/input").Click
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("/html/body/div[6]/div[2]/div[2]/div[1]/div[2]/button").Click
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/form/table[2]/tbody/tr[2]/td/label/input").Clear
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/form/table[2]/tbody/tr[2]/td/label/input").SendKeys Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 43)
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/form/div[2]/button").Click
If driver.IsElementPresent(myBy.XPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[7]/div[2]/button")) Then
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[7]/div[2]/button").Click
End If
If driver.IsElementPresent(myBy.XPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[6]/div[2]/button")) Then
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[6]/div[2]/button").Click
End If
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/table/tbody/tr/td/form/div[2]/div[2]/input").SendKeys USER_PAS1_2
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/table/tbody/tr/td/form/div[2]/div[2]/button").Click
driver.Get Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51)
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[3]/div/div[1]/div/div/table/tbody/tr/td[3]/div/p/a").Click
If Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 43) = Replace(driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[1]/table/tbody/tr/td/div[9]/table/tbody/tr[2]/td[2]/div[1]").Text, " 円", "") * 1 Then
Else
On Error GoTo ERR12
End If
Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 50) = Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 43)
End If
Next i
driver.Get "https://www.sbisec.co.jp/ETGate"
driver.FindElementByXPath("//*[@id='user_input']/input").SendKeys USER_ID_8
driver.FindElementByXPath("//*[@id='password_input']/input").SendKeys USER_PAS8
driver.FindElementByXPath("/html/body/table/tbody/tr[1]/td[2]/div[2]/form/p[2]/input").Click
driver.FindElementByXPath("/html/body/div[1]/div[2]/div/div/ul/li[5]/a/img").Click
For i = 20 To 33
If Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51) <> "" And Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 52) <> 100 Then
13:
On Error GoTo ERR13
If i = 27 Then
sTmp = 2
Else
sTmp = 1
End If
driver.Get Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51)
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[3]/div/div[1]/div/div/table/tbody/tr/td[3]/div/p/a").Click
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[1]/table/tbody/tr/td/div[9]/table/tbody/tr[" & sTmp & "]/td[3]/div/input").Click
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("/html/body/div[6]/div[2]/div[2]/div[1]/div[2]/button").Click
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/form/table[2]/tbody/tr[2]/td/label/input").Clear
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/form/table[2]/tbody/tr[2]/td/label/input").SendKeys "100"
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/form/div[2]/button").Click
If driver.IsElementPresent(myBy.XPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[7]/div[2]/button")) Then
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[7]/div[2]/button").Click
End If
If driver.IsElementPresent(myBy.XPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[6]/div[2]/button")) Then
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[6]/div[2]/button").Click
End If
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/table/tbody/tr/td/form/div[2]/div[2]/input").SendKeys USER_PAS1_2
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/table/tbody/tr/td/form/div[2]/div[2]/button").Click
driver.Get Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51)
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[3]/div/div[1]/div/div/table/tbody/tr/td[3]/div/p/a").Click
If 100 = Replace(driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[1]/table/tbody/tr/td/div[9]/table/tbody/tr[" & sTmp & "]/td[2]/div[1]").Text, " 円", "") * 1 Then
Else
On Error GoTo ERR13
End If
Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 52) = "100"
End If
Next i
For i = 20 To 33
If Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51) <> "" And Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 46) <> Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 52) Then
14:
On Error GoTo ERR14
If i = 27 Then
sTmp = 2
Else
sTmp = 1
End If
driver.Get Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51)
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[3]/div/div[1]/div/div/table/tbody/tr/td[3]/div/p/a").Click
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[1]/table/tbody/tr/td/div[9]/table/tbody/tr[" & sTmp & "]/td[3]/div/input").Click
Application.Wait Now + TimeSerial(0, 0, 2)
driver.FindElementByXPath("/html/body/div[6]/div[2]/div[2]/div[1]/div[2]/button").Click
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/form/table[2]/tbody/tr[2]/td/label/input").Clear
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/form/table[2]/tbody/tr[2]/td/label/input").SendKeys Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 46)
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/form/div[2]/button").Click
If driver.IsElementPresent(myBy.XPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[7]/div[2]/button")) Then
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[7]/div[2]/button").Click
End If
If driver.IsElementPresent(myBy.XPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[6]/div[2]/button")) Then
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[6]/div[2]/button").Click
End If
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/table/tbody/tr/td/form/div[2]/div[2]/input").SendKeys USER_PAS1_2
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div/table/tbody/tr/td/form/div[2]/div[2]/button").Click
driver.Get Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 51)
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[3]/div/div[1]/div/div/table/tbody/tr/td[3]/div/p/a").Click
If Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 46) = Replace(driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[1]/table/tbody/tr/td/div[9]/table/tbody/tr[" & sTmp & "]/td[2]/div[1]").Text, " 円", "") * 1 Then
Else
On Error GoTo ERR14
End If
Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 52) = Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 46)
End If
Next i
Set driver = Nothing
Exit Sub
ERR10:
Resume 10
ERR11:
Resume 11
ERR12:
Resume 12
ERR13:
Resume 13
ERR14:
Resume 14
End Sub
SBI証券の投資信託をスポット購入するマクロ
SBI証券の投資信託を、エクセルで計算した設定値の内容でスポット購入するマクロです。
コードは以下の通りです。
Sub SBI証券_夫_スポット購入(USER_ID_1 As String, USER_PAS1 As String, USER_PAS1_2 As String _
, PROFILE_PATH As String)
'SBI証券 (夫)
Workbooks("運用資産価額管理.xlsm").Activate
driver.AddArgument ("user-data-dir=" & PROFILE_PATH)
driver.Get "https://www.sbisec.co.jp/ETGate"
driver.FindElementByXPath("//*[@id='user_input']/input").SendKeys USER_ID_1
driver.FindElementByXPath("//*[@id='password_input']/input").SendKeys USER_PAS1
driver.FindElementByXPath("/html/body/table/tbody/tr[1]/td[2]/div[2]/form/p[2]/input").Click
driver.FindElementByXPath("/html/body/div[1]/div[2]/div/div/ul/li[5]/a/img").Click
For i = 20 To 33
If Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 55) <> "" And Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 58) > 0 Then
driver.Get Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 55)
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/div[3]/div/div[1]/div/div/table/tbody/tr/td[1]/div/p/a").Click
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/form/table[2]/tbody/tr[1]/td/div/div[1]/input").SendKeys Workbooks("運用資産価額管理.xlsm").Sheets("メイン").Cells(i, 58)
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/form/div[5]/div/div/div[1]/p[2]/input[3]").SendKeys USER_PAS1_2
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/form/div[5]/div/div/div[1]/p[2]/a/img").Click
driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/form/div[4]/p/a/img").Click
End If
Next i
Set driver = Nothing
End Sub
まとめ
いかがでしたでしょうか。
参考になれば幸いです。
本稿で紹介したマクロのサポートやカスタマイズ、もしくは新規案件については、条件によって、有償にて対応受付しております。
以下、クラウドワークスないしココナラのアカウントよりご依頼いただければ幸いです。
コメント