Excelのシートに一行ずつファイルのURLが書き込まれています。
VBAを使って、それらのファイルをすべてダウンロードして、今日の日付のフォルダ(例:20200820)の中に保存する方法を教えていただけないでしょうか?
現在は一つ一つ手でダウンロードしているので、これを自動化したいのです。
orion
2020.08.20 22:12:21
(2020.08.20 22:17:42 更新)
327
次のコードをURLの一覧が書き込まれているシートのマクロに追加して実行してみてください。
URLはA列に一行ずつ書き込まれているという前提です。Cells(row, 1).Value
の1
という数字を変更すると、違う列に対応させることができます。
また、日付のフォルダは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 更新)
![]()
できました!ありがとうございます!
|
コメントするには ログイン していただく必要があります。