Excel

リストにあるファイルをダウンロードして日付ごとのフォルダに保存したい 回答する


#VBA

Excelのシートに一行ずつファイルのURLが書き込まれています。

VBAを使って、それらのファイルをすべてダウンロードして、今日の日付のフォルダ(例:20200820)の中に保存する方法を教えていただけないでしょうか?

現在は一つ一つ手でダウンロードしているので、これを自動化したいのです。

orion 2020.08.20 22:12:21 (2020.08.20 22:17:42 更新) 327

コメントする

コメントするには ログイン していただく必要があります。

回答 1

次のコードをURLの一覧が書き込まれているシートのマクロに追加して実行してみてください。

URLはA列に一行ずつ書き込まれているという前提です。Cells(row, 1).Value1という数字を変更すると、違う列に対応させることができます。

また、日付のフォルダはExcelファイルと同じ場所に作られます。別の場所が良い場合はThisWorkbook.pathの部分をフォルダのパスに差し替えてください。

ダウンロードされるファイルのファイル名は取得元のURLから抽出していますが、他と被るかもしれないので、URLが書かれた列の横の列なんかに入力をして、それを利用するようにしてもよいかもしれません。

Sub Main()
    'このExcelファイルと同じ場所に今日の日付のフォルダを作成する
    Dim folderPath As String: folderPath = ThisWorkbook.path & Application.PathSeparator & Format(Date, "yyyymmdd")
    If Dir(folderPath, vbDirectory) = "" Then
        MkDir folderPath
    End If

    'A列に入力されているURLを上から順番に処理する
    Dim row As Integer: row = 1
    Do While Cells(row, 1).Value <> ""
        Dim url As String: url = Cells(row, 1).Value
        Download url, folderPath
        row = row + 1
    Loop
End Sub

'指定したURLのファイルをダウンロード
Private Sub Download(url As String, folderPath As String)
    Dim req As Object: Set req = CreateObject("WinHttp.WinHttpRequest.5.1")
    req.Open "GET", url, False
    req.Send

    'ダウンロード先のファイルパスを組み立てる(ファイル名はURLの最後の/の後の部分を採用)
    Dim filePath As String: filePath = folderPath & Application.PathSeparator & Right(url, InStr(StrReverse(url), "/"))

    If req.Status = 200 Then
        Dim stream As Object: Set stream = CreateObject("ADODB.Stream")
        stream.Type = 1
        stream.Open
        stream.Write req.responseBody
        stream.SaveToFile filePath
        stream.Close
    End If
End Sub

shirohonoka 2020.08.28 13:35:13 (2020.08.28 13:37:12 更新)

orion 2020.08.29 14:35:09
できました!ありがとうございます!

コメントする

コメントするには ログイン していただく必要があります。

回答する
質問に回答するには ログイン していただく必要があります。
一覧に戻る