【Excel VBA】画像URLから画像をダウンロードして指定のフォルダに自動保存する

スポンサーリンク
Excel VBA講座 開講中!

今回はExcel VBAで、画像URLから画像をダウンロードして指定のフォルダに自動保存する方法についてご紹介します。

スポンサーリンク
スポンサーリンク

画像URLから画像をダウンロードして指定のフォルダに保存する

下記サンプル1を元にしてご紹介していきます。

・サンプル1

Option Explicit

#If Win64 Then
Private 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
#Else
Private 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
#End If

Sub 画像URLからDL()

Dim strFname As String
Dim ImageUrl As String
Dim ImageName As String
Dim FolderName As String
Dim FilePath As String
Dim DLValue As Long

‘画像URLを指定
ImageUrl = “[ここに画像URLを記載]”

‘保存時の画像名を指定
ImageName = “テスト”

‘画像の保存先を指定
FolderName = ThisWorkbook.Path & “\” & “image”

‘画像の保存先を、画像名や拡張子を含めたフルパスで指定
FilePath = FolderName & “\” & ImageName & “.jpg”

‘変数FilePathに代入したパスが存在しているか調べる、存在した場合はなにも処理しない
If Dir(FilePath) <> “” Then

‘変数FilePathがない場合
Else

‘画像をダウンロードする、ImageUrlは画像URL、FilePathは保存先、成功すると0を返す
DLValue = URLDownloadToFile(0, ImageUrl, FilePath, 0, 0)

End If

End Sub

冒頭の、Sub~より上の宣言セクションに記載されている、

#If Win64 Then
Private 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
#Else
Private 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
#End If

ですが、これはVBAでファイルをダウンロードするためのWindows APIの、URLDownloadToFile関数を使用するための宣言になります。

これにより、後に登場する指定URLのファイル(画像)を、指定パス(フォルダ)にダウンロードするための関数である、

DLValue = URLDownloadToFile(0, ImageUrl, FilePath, 0, 0)

が使用できるようになります。

また、
#If Win64 Then ~ #Else ~ #End If
というIf文が含まれていますが、これは64ビットと32ビットで宣言を分けて、エラーが出ないようにするための処理です。

次に、

変数ImageUrlに画像URLを代入し、

変数ImageNameに保存時の画像名を代入し、

FolderNameには画像の保存先フォルダをしてしています。

(今回はThisWorkbook.Pathを使ってこのプログラムを作成しているエクセルファイルが存在するフォルダと同フォルダに、「image」というフォルダを作成して指定しています)

そして、変数FilePathには画像の保存先を、画像名や拡張子を含めたフルパスで指定しています。

次の
If Dir(FilePath) <> “” The

ですが、

Dir()

のDir関数を使用して、FilePathに代入した画像パスが存在しているかどうかを確認しています。

存在していた場合は何も処理せずにEnd Ifで終了します。

存在しなかった場合ですが、

DLValue = URLDownloadToFile(0, ImageUrl, FilePath, 0, 0)

で画像をダウンロードします。ImageUrlは画像URL、FilePathは保存先となり、
成功すると変数DLValueには0が返されます

ImageUrlやImageNameをシートに並べて繰り返し処理で取得していくなどすれば、連続して画像をダウンロードする事ができます。

タイトルとURLをコピーしました