
VBAでEDINETから
 ・EDINETコードリストを取得して
 ・シートへ取り込む
VBAコードを紹介します!

前提
下記で紹介するVBAコードは「SeleniumBasic」等を使用しているため、これらのインストール等が必要です。
「SeleniumBasic」のインストール等については以下の記事をご確認ください。
VBAコード
可読性や保守性を良くするために、処理を以下の6つに分けて作成します。
呼び出し関係は以下です。
※「メイン処理」が「それ以外の処理」を呼び出します。

Option Explicit
Sub main()
    Dim zipCsvFolder As String
    Dim loadSheetName As String
    Dim startRange As String
    Dim tableName As String
    Dim result As Boolean
    
    'EDINETコードリスト(ZIP)がダウンロードされる、かつEDINETコードリスト(CSV)へ展開するフォルダ
    zipCsvFolder = "C:\Users\user\Downloads"
    'CSVファイルを読み込むシート名
    loadSheetName = "EdinetCodeList"
    '書き出し開始セル
    startRange = "B2"
    'テーブル名を指定
    tableName = "EdinetCodeテーブル"
    
    'EDINETコードリスト(ZIP)取得処理
    Call getEdinetCodeListZip(zipCsvFolder)
    'ZIPファイル展開処理
    result = zipExpandArchive(zipCsvFolder)
    If (result = False) Then
        MsgBox ("ZIPファイル展開に失敗しました。")
        Exit Sub
    End If
    
    'EDINETコードCSVファイル読み込み処理
    Call readEdinetCodeCsv(zipCsvFolder, loadSheetName, startRange)
    'テーブル化処理
    Call makeTable(loadSheetName, startRange, tableName)
    
    'ZIP/CSV削除処理
    Call deleteZipCsv(zipCsvFolder)
    
    MsgBox ("EDINETコードリストの取得と読み込み完了!")
End Sub
'##########################################
'EDINETコードリスト(ZIP)取得処理
'##########################################
Sub getEdinetCodeListZip(ByVal zipCsvFolder As String)
    
    Dim url As String
    Dim fso As Object
    Dim zipFile As String
    
    'EDINETコードリスト(ZIP)のリンクがあるURL
    url = "https://disclosure2.edinet-fsa.go.jp/weee0010.aspx?2"
    
    'Chromeを起動
    Dim driver As New ChromeDriver
    'URLを表示
    driver.Get url
    
    'EDINETコードリスト(ZIP)のダウンロード実行 ※JavaScriptの実行
    driver.ExecuteScript ("onDownloadEdinet()")
    
    'ダウンロード完了待ち
    Set fso = CreateObject("Scripting.FileSystemObject")
    zipFile = zipCsvFolder & "\Edinetcode_" & Format(Date, "YYYYMMDD") & ".zip"
    Do While Not fso.FileExists(zipFile)
        driver.Wait 1000
    Loop
    
    '後片付け
    Set fso = Nothing
    
    'Chromeを閉じる
    driver.Close
    Set driver = Nothing
End Sub
'##########################################
'ZIPファイル展開処理
'##########################################
Function zipExpandArchive(ByVal zipCsvFolder As String) As Boolean
    
    Dim zipFile As String
    Dim psCommand As String
    Dim wsh As Object
    Dim result As Integer
    
    zipExpandArchive = False
    
    '解凍(展開)するZIPを指定
    zipFile = zipCsvFolder & "\Edinetcode_" & Format(Date, "YYYYMMDD") & ".zip"
    
    '実行するPowerShellのコマンドレットを組み立て
    psCommand = "powershell -NoProfile -ExecutionPolicy Unrestricted Expand-Archive -Path " & zipFile & " -DestinationPath " & zipCsvFolder & " -Force"
    
    Set wsh = CreateObject("WScript.Shell")
    
    'PowerShellのコマンドレットを実行
    result = wsh.Run(Command:=psCommand, WindowStyle:=0, WaitOnReturn:=True)
    
    If (result <> 0) Then
        Exit Function
    End If
    
    '後片付け
    Set wsh = Nothing
    
    zipExpandArchive = True
    
End Function
'##########################################
'EDINETコードCSVファイル読み込み処理
'##########################################
Sub readEdinetCodeCsv(ByVal zipCsvFolder As String, ByVal loadSheetName As String, ByVal startRange As String)
    
    Dim csvFile As String
    Dim sheet As Worksheet
    Dim csvSheet As Worksheet
    Dim i As Long
    Dim n As Variant
    Dim arrDataType(255) As Long
    
    '読み込むCSVファイル
    csvFile = zipCsvFolder & "\EdinetcodeDlInfo.csv"
    
    '既に「CSVファイルを読み込むシート」が存在する場合は削除
    For Each sheet In ThisWorkbook.Worksheets
        If sheet.Name = loadSheetName Then
            '確認メッセージを非表示
            Application.DisplayAlerts = False
            'シート削除
            Worksheets(loadSheetName).Delete
            '確認メッセージを表示
            Application.DisplayAlerts = True
        End If
    Next
    
    '「CSVファイルを読み込むシート」を新規作成
    Set csvSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
    csvSheet.Name = loadSheetName
    '読み込むファイルの形式を【文字列】と指定するための配列を作成
    For i = 0 To 255
        arrDataType(i) = xlTextFormat
    Next
    
    '「QueryTableオブジェクト(=クエリと接続)」を作成
    With csvSheet.QueryTables.Add(Connection:="TEXT;" + csvFile, Destination:=Range(startRange))
        '区切り文字に「カンマ区切り」を指定
        .TextFileCommaDelimiter = True
        '文字コードに「Shift_JIS」を指定
        .TextFilePlatform = 932
        '読み込み開始行を指定
        .TextFileStartRow = 1
        '読み込むファイルの形式を指定
        .TextFileColumnDataTypes = arrDataType
        '読み込み実行
        .Refresh BackgroundQuery:=False
        '名前(後続で削除できるように名前を設定)
        .Name = "仮テーブル"
        '作成された「QueryTableオブジェクト(=クエリと接続)」を削除
        .Delete
    End With
    
    '上記で作成されてしまう名前定義(仮テーブル)を削除
    For Each n In ActiveWorkbook.Names
        If n.Name = loadSheetName & "!" & "仮テーブル" Then
            n.Delete '
        End If
    Next
    
    '不要行(最初の1行目)を削除
    Worksheets(loadSheetName).Rows(Range(startRange).Row).Delete
    
End Sub
'##########################################
'テーブル化処理
'##########################################
Sub makeTable(ByVal sheetName As String, ByVal startRange As String, ByVal tableName As String)
    
    With Worksheets(sheetName)
        '対象シートをアクティブにする
        .Activate
        'テーブル化する(名前定義も含む)
        .ListObjects.Add(Source:=Range(startRange).CurrentRegion, XlListObjectHasHeaders:=xlYes).Name = tableName
    End With
    
End Sub
'##########################################
'ZIP/CSV削除処理
'##########################################
Sub deleteZipCsv(ByVal zipCsvFolder As String)
    Dim fso As Object
    Dim zipFile As String
    Dim csvFile As String
    
    'ZIP
    zipFile = zipCsvFolder & "\Edinetcode_" & Format(Date, "YYYYMMDD") & ".zip"
    'CSV
    csvFile = zipCsvFolder & "\EdinetcodeDlInfo.csv"
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    'ZIP削除
    If fso.FileExists(zipFile) Then
        fso.DeleteFile zipFile
    End If
    
    'CSV削除
    If fso.FileExists(csvFile) Then
        fso.DeleteFile csvFile
    End If
    
    '後片付け
    Set fso = Nothing
    
End Sub
実行結果
EDINETからEDINETコードリストを取得してシートへ取り込めました。


参考①
上記のVBAコードは以下の記事を参考にして作成しました。
●ブラウザを自動化する
●ZIPファイルを解凍(展開)する
●CSVファイルをシートへ読み込む
●シート上の表をテーブル化する
●ファイルの削除
参考②
「EDINETコードリスト」は以下のページの下部にある「EDINETコードリスト」の「ダウンロード」をクリックにより入手できます。

 
  
  
  
  




