投資信託を自動発注するVBAエクセルマクロ

増やす

本記事では、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)
   
    
        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
                driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[6]/div[2]/button").Click
                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
                driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[6]/div[2]/button").Click
                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
                driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[6]/div[2]/button").Click
                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
                driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[6]/div[2]/button").Click
                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
                driver.FindElementByXPath("/html/body/table/tbody/tr/td[1]/table/tbody/tr/td/form/div[6]/div[2]/button").Click
                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

まとめ

いかがでしたでしょうか。

参考になれば幸いです。

本稿で紹介したマクロのサポートやカスタマイズ、もしくは新規案件については、条件によって、有償にて対応受付しております。

以下、クラウドワークスないしココナラのアカウントよりご依頼いただければ幸いです。

FIRE太郎さん(その他)に依頼・外注する | 簡単ネット発注なら【クラウドワークス】
日本最大のクラウドソーシング「クラウドワークス」にご登録いただいているFIRE太郎さんのプロフィールです。その他のスキルを持つプロフェッショナルに1時間から仕事を気軽に発注!発注者は手数料無料。
FIRE太郎さん(会社員)のプロフィール | ココナラ
Excelマクロ(VBA)による自動化ツールの作成が得意です。|ブログ「FIRE(早期リタイア)研究所」運営中

コメント

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