ExcelVBAで全ファイル削除

はじめに

世の中、クローリングやスクレイピング処理が増えてきたとはいえ、官公庁の公表データ等はまだまだExcelファイルが多いと思います。

Pythonでもライブラリーを使えばExcelファイルの処理もお手の物らしいですが、どうしても相性の事を考えるとVBAで処理させた方が無難かな?と思ってしまう今日この頃です。

【実務サンプル】日本銀行サイトから統計データをクローリングする

今回は日本銀行のWEBサイトから公表されているデータ(Excelファイル)を取得してみます。

日銀のホームページでは様々な統計資料が公表されており、ExcelファイルやPDFファイル等でアップされています。このような貴重なデータをVBAで取得するサンプルプログラムを作ってみました。

日銀に限らず、財務省のWEBサイトからでもURLを変更すればクローリングできますので、ご参考になれば幸いです。

わかりやすいように標準モジュール内にWindows API定義やソースコードを記載しましたが、実際実務でプログラムを作る際は別々のモジュールにしておいた方が運用上よろしいかと思います。

以下、サンプルプログラムです。

Option Explicit

'*************************************************************
'インターネットサービスのオープン
'*************************************************************
''Office 32 bit用
'Public Declare 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

'Office 64 bit用
Public 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

'*************************************************************
'インターネットサービスのクローズ
'*************************************************************
'Office 32 bit用
'Public Declare Function InternetCloseHandle Lib "wininet.dll" _
'(ByVal HINTERNET As Long) As Integer

'Office 64 bit用
Public Declare PtrSafe Function InternetCloseHandle Lib "wininet.dll" _
(ByVal HINTERNET As Long) As Integer

'*************************************************************
'ダウンロード用定義
'*************************************************************
'Office 32 bit用
'Public Declare Function URLDownloadToFile Lib "urlmon" _
'Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
'ByVal szURL As String, ByVal szFileName As String, _
'ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

'Office 64 bit用
Public Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

'*************************************************************
'sleep関数用API宣言
'*************************************************************
'Office 32 bit用
'Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

'Office 64 bit用
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Download()
    '***********************************************************
    ' ファイル・ダウンロード処理
    '***********************************************************
    '問い合せダイアログの表示をOFFにします
    Application.DisplayAlerts = False
        
    On Error Resume Next
    MsgBox "ファイルをダウンロードします。"
        
    'ダウンロードURLを指定
    Dim download_url As String
    download_url = "http://www.boj.or.jp/statistics/boj/fm/juqf/juqf01.xlsx"
        
    '保存先の指定
    Dim save_path As String
    save_path = ThisWorkbook.Path & "\" & "juqf01.xlsx"
        
    Dim result As Long
    Dim cnt As Integer
    Dim dl_failed_flag As Integer
        
    'ループ回数
    Dim LOOP_MAX_COUNT As Integer
    LOOP_MAX_COUNT = 5
        
    'スリープ時間(ミリ秒)
    Dim SLEEP_TIME As Integer
    SLEEP_TIME = 1000
        
    cnt = 1
    dl_failed_flag = 0
    Do
        'ファイルをダウンロード
        result = URLDownloadToFile(0, download_url, save_path, 0, 0)
    
        If (result = 0) Then
            MsgBox "ダウンロード成功!"
        End If
    
        '判定
        If (cnt >= LOOP_MAX_COUNT) Then
            MsgBox "ファイルの取得に失敗しました(ループ回数オーバー)。処理を終了します。"
            dl_failed_flag = 1
            Exit Do
        End If
        
        'カウントアップ
        cnt = cnt + 1
          
        '再取得時にsleepを入れます。
        Sleep SLEEP_TIME
    Loop Until result = 0
        
    'DLが失敗したのでマクロを終了させます。
    If dl_failed_flag = 1 Then
        End
    End If
        
    MsgBox "当マクロの処理を終了します。"
End Sub

マクロと同じ階層にクローリングしたファイルが保存されていれば成功です!

URLを変更したり、ループ回数やスリープ時間も調整してみるといいと思います。

2 Thoughts on “ExcelVBAで日本銀行WEBサイトから統計データをクローリングする”

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です