'API関数
Private Declare PtrSafe Function InternetOpen _
            Lib "wininet.dll" _
          Alias "InternetOpenA" _
         (ByVal lpszAgent As String _
        , ByVal dwAccessType As Long _
        , ByVal lpszProxyName As String _
        , ByVal lpszProxyBypass As String _
        , ByVal dwFlags As Long) As Long
        
Private Declare PtrSafe Function InternetCloseHandle _
            Lib "wininet.dll" _
         (ByVal hInternet As Long) As Integer
         
Private Declare PtrSafe Function InternetConnect _
            Lib "wininet.dll" _
          Alias "InternetConnectA" _
         (ByVal hInternet As Long _
        , ByVal lpszServerName As String _
        , ByVal nServerPort As Integer _
        , ByVal lpszUsername As String _
        , ByVal lpszPassword As String _
        , ByVal dwService As Long _
        , ByVal dwFlags As Long _
        , ByVal dwContext As Long) As Long
        
Private Declare PtrSafe Function HttpOpenRequest _
            Lib "wininet.dll" _
          Alias "HttpOpenRequestA" _
         (ByVal hConnect As Long _
        , ByVal lpszVerb As String _
        , ByVal lpszObjectName As String _
        , ByVal lpszVersion As String _
        , ByVal lpszReferer As String _
        , ByVal lpszAcceptTypes As Long _
        , ByVal dwFlags As Long _
        , ByVal dwContext As Long) As Long
        
Private Declare PtrSafe Function HttpSendRequest _
            Lib "wininet.dll" _
          Alias "HttpSendRequestA" _
         (ByVal hRequest As Long _
        , ByVal lpszHeaders As String _
        , ByVal dwHeadersLength As Long _
        , ByVal lpOptional As String _
        , ByVal dwOptionalLength As Long) As Integer
        
Private Declare PtrSafe Function HttpQueryInfo _
            Lib "wininet.dll" _
          Alias "HttpQueryInfoA" _
         (ByVal hRequest As Long _
        , ByVal dwInfoLevel As Long _
        , ByRef lpvBuffer As Any _
        , ByRef lpdwBufferLength As Long _
        , ByRef lpdwIndex As Long) As Integer
        
Private Declare PtrSafe Function InternetReadFile _
            Lib "wininet.dll" _
         (ByVal hRequest As Long _
        , ByRef lpBuffer As Any _
        , ByVal dwNumberOfBytesToRead As Long _
        , ByRef lpdwNumberOfBytesRead As Long) As Integer
Private Declare PtrSafe Function HttpAddRequestHeaders _
            Lib "wininet.dll" _
          Alias "HttpAddRequestHeadersA" _
         (ByVal hHttpRequest As Long _
        , ByVal sHeaders As String _
        , ByVal lHeadersLength As Long _
        , ByVal lModifiers As Long) As Integer
       
Private Declare PtrSafe Function InternetSetCookie Lib "wininet.dll" _
       Alias "InternetSetCookieA" _
       (ByVal lpszUrlName As String, _
       ByVal lpszCookieName As String, _
       ByVal lpszCookieData As String) As Boolean
Private Declare PtrSafe Function InternetGetCookie Lib "wininet.dll" _
       Alias "InternetGetCookieA" _
       (ByVal lpszUrlName As String, _
       ByVal lpszCookieName As String, _
       ByVal lpszCookieData As String, _
       lpdwSize As Long) As Boolean
'API関数で使用する定数も定義
Private Const INTERNET_FLAG_RELOAD        As Long = &H80000000
Private Const INTERNET_FLAG_DONT_CACHE    As Long = &H4000000
Private Const INTERNET_FLAG_RESYNCHRONIZE As Long = &H800
Private Const INTERNET_FLAG_NEED_FILE     As Long = &H10
Private Const INTERNET_FLAG_HYPERLINK     As Long = &H400
Private Const INTERNET_FLAG_NO_COOKIES    As Long = &H80000
Private Const INTERNET_FLAG_NO_AUTO_REDIRECT As Long = &H200000
Private Const INTERNET_FLAG_SECURE = &H800000
Private Const INTERNET_FLAG_KEEP_CONNECTION = &H400000
Private Const INTERNET_FLAG_IGNORE_CERT_CN_INVALID = &H800000
Private Const INTERNET_FLAG_IGNORE_CERT_DATE_INVALID = &H800000
Private Const INTERNET_OPEN_TYPE_DIRECT    As Long = &H1
Private Const INTERNET_OPEN_TYPE_PRECONFIG As Long = &H0
Private Const INTERNET_OPEN_TYPE_PROXY     As Long = &H3
Private Const INTERNET_FLAG_ASYNC       As Long = &H10000000
Private Const INTERNET_FLAG_FROM_CACHE  As Long = &H1000000
Private Const INTERNET_DEFAULT_HTTP_PORT   As Integer = 80
Private Const INTERNET_DEFAULT_HTTPS_PORT  As Integer = 443
Private Const INTERNET_SERVICE_HTTP   As Long = 3
Private Const HTTP_QUERY_CONTENT_TYPE     As Long = 1
Private Const HTTP_QUERY_CONTENT_LENGTH   As Long = 5
Private Const HTTP_QUERY_DATE             As Long = 9
Private Const HTTP_QUERY_LAST_MODIFIED    As Long = 11
Private Const HTTP_QUERY_STATUS_CODE      As Long = 19
Private Const HTTP_QUERY_RAW_HEADERS_CRLF As Long = 22
Private Const HTTP_QUERY_LOCATION          As Long = 33
Private Const HTTP_QUERY_SERVER           As Long = 37
Private Const HTTP_QUERY_SET_COOKIE       As Long = 43
Private Const HTTP_QUERY_COOKIE           As Long = 44
Private Const HTTP_QUERY_REQUEST_METHOD   As Long = 45
Private Const HTTP_ADDREQ_FLAG_ADD As Long = &H20000000
Private Const HTTP_ADDREQ_FLAG_REPLACE As Long = &H80000000
Private Const ERROR_NO_MORE_ITEMS = 259
Private Const ERROR_INSUFFICIENT_BUFFER = 122
'定数定義
'環境によって変更してください
'*****************************************************************
'ダウンロードファイルの保存場所 :ドキュメントフォルダ
Private Const SAVE_DER As String = "C:\Users\******\Documents"
'*****************************************************************
Private Const SAVE_FILE As String = "\000temp.tmp"
Private Const IDRANGE As String = "C4"
Private Const PASSRANGE As String = "E4"
Private Const USERRANGE As String = "C2"
Private Const ASSETRANGE As String = "B7"
'変数の定義
Private lngWinINet As Long
Private lngHttpHnd As Long
Private lngReqHnd  As Long
Private strBuffer  As String * 1024
Private lngLength  As Long
Private bytDataArea() As Byte
Private lngDataLength As Long
Private lngSavePos    As Long
Private idText As String
Private passText As String
Private PostData As String
Private c_dir As String
Sub login_Click()
    'IDとパスワードを取得
    idText = Range(IDRANGE).Value
    passText = Range(PASSRANGE).Value
    
    'IDチェック
    If Len(idText) = 0 Then
        MsgBox "IDを入力してください", vbExclamation
        Exit Sub
     End If
     
    'パスワードチェック
    If Len(passText) = 0 Then
        MsgBox "パスワードを入力してください", vbExclamation
        Exit Sub
     End If
     
    
    Dim lngRC     As Long
    Dim lngStatus As Long
    'インターネットサービスオープン
    lngRC = fcInternetOpen
    'HTTPサーバとの接続と切断
    If lngRC = 0 Then
        
       'HTTPサーバ接続
       lngRC = fcHTTPConnect("sec-sso.click-sec.com")
       
       'リクエストを初期化
       If lngRC = 0 Then
          lngRC = fcHTTPOpenRequest("POST", "/mk/")
       End If
       
       'リクエストを送信
       If lngRC = 0 Then
          Call fcHttpAddRequestHeaders("Referer: https://sec-sso.click-sec.com/")
          Call fcHttpAddRequestHeaders("Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
          Call fcHttpAddRequestHeaders("Accept-Language: ja,en-us;q=0.7,en;q=0.3")
          Call fcHttpAddRequestHeaders("Accept-Encoding: gzip, deflate")
          Call fcHttpAddRequestHeaders("Connection: keep-alive")
          PostData = "j_username=" + idText + "&j_password=" + passText + "&LoginForm=%DB%B8%DE%B2%DD&p=80"
          
          lngRC = fcHTTPSendRequest(PostData)
       End If
       lngRC = 0
       
       'HTTPステータスコードを取得
       If lngRC = 0 Then
          lngRC = fcHTTPQueryInfo(HTTP_QUERY_STATUS_CODE)
          
          'HTTPステータスコードを保存
          lngStatus = CLng(strBuffer)
          'HTTPステータスコードチェック
          If lngStatus < 200 Or lngStatus > 299 Then
             lngRC = 0
          End If
       End If
       
       'ダウンロード
       If lngRC = 0 Then
          lngSavePos = 0
          lngDataLength = 0
          lngRC = fcHTTPReadFile
       End If
       
      
       'ファイルを保存
       If lngRC = 0 Then
          lngRC = fcDataSave(SAVE_DER, SAVE_FILE)
       End If
       
       'HTTPリクエストクローズ
       Call fcHttpRequestClose
       
       '切断
       Call fcHTTPDisConnect
       
           Dim sCookieVal As String * 256
    Dim bRet As Boolean
    
       If lngRC = 0 Then
            'ソース解析
            Dim buf As String
            Dim tmp As Variant
            Dim dir_tmp As Variant
            Dim loginRes As Long
            Open SAVE_DER + SAVE_FILE For Input As #1
                Line Input #1, buf
            Close #1
            
            tmp = Split(buf, "
")
            loginRes = InStr(1, tmp(1), "様", vbBinaryCompare)
            If loginRes > 0 Then
                MsgBox "ログイン成功"
                
                'リンク先の取得
                dir_tmp = Split(buf, "https://kabu.click-sec.com/")
                dir_tmp = Split(dir_tmp(1), "/mk/")
                c_dir = dir_tmp(0)
                    
                Range("C2").Value = LTrim(Replace(tmp(1), vbLf, ""))
            Else
                MsgBox "ログイン失敗 ID、パスワードを確認してください"
                Range(USERRANGE).Value = ""
                Range(ASSETRANGE).Value = ""
            End If
            
            'ダウンロードファイル削除
            Kill SAVE_DER + SAVE_FILE
        End If
    End If
End Sub
Sub getAssets_Click()
    Dim lngRC     As Long
    Dim lngStatus As Long
    'インターネットサービスオープン
    lngRC = fcInternetOpen
    'HTTPサーバとの接続と切断
    If lngRC = 0 Then
        
       'HTTPサーバ接続
       lngRC = fcHTTPConnect("kabu.click-sec.com")
       
       'リクエストを初期化
       If lngRC = 0 Then
          lngRC = fcHTTPOpenRequest("GET", "/" + c_dir + "/mk/dispPaUserSheet.do")
       End If
       
       'リクエストを送信
       If lngRC = 0 Then
          Call fcHttpAddRequestHeaders("Referer: https://kabu.click-sec.com/" + c_dir + "/mk/dispKabuMenu.do")
          Call fcHttpAddRequestHeaders("Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
          Call fcHttpAddRequestHeaders("Accept-Language: ja,en-us;q=0.7,en;q=0.3")
          Call fcHttpAddRequestHeaders("Accept-Encoding: gzip, deflate")
          Call fcHttpAddRequestHeaders("Connection: keep-alive")
          PostData = ""
          
          lngRC = fcHTTPSendRequest(PostData)
       End If
       lngRC = 0
       
       'HTTPステータスコードを取得
       If lngRC = 0 Then
          lngRC = fcHTTPQueryInfo(HTTP_QUERY_STATUS_CODE)
          
          'HTTPステータスコードを保存
          lngStatus = CLng(strBuffer)
          'HTTPステータスコードチェック
          If lngStatus < 200 Or lngStatus > 299 Then
             lngRC = 0
          End If
       End If
       
       'ダウンロード
       If lngRC = 0 Then
          lngSavePos = 0
          lngDataLength = 0
          lngRC = fcHTTPReadFile
       End If
       
      
       'ファイルを保存
       If lngRC = 0 Then
          lngRC = fcDataSave(SAVE_DER, SAVE_FILE)
       End If
       
       'HTTPリクエストクローズ
       Call fcHttpRequestClose
       
       '切断
       Call fcHTTPDisConnect
       
       If lngRC = 0 Then
            'ソース解析
            Dim buf As String
            Dim tmp As Variant
            Dim loginRes As Long
            Dim docRes As Long
            Open SAVE_DER + SAVE_FILE For Input As #1
                Line Input #1, buf
            Close #1
            
            docRes = InStr(1, buf, "保有資産時価評価額合計", vbBinaryCompare)
            
            If docRes > 0 Then
                tmp = Split(buf, "保有資産時価評価額合計")
                tmp = Split(tmp(1), "円")
                loginRes = InStr(1, tmp(0), "right", vbBinaryCompare)
            End If
            
            If loginRes > 0 Then
                MsgBox "取得成功"
                Range(ASSETRANGE).Value = LTrim(Replace(Replace(tmp(0), vbLf, ""), "