【エクセルVBA】 URLDownloadToFile関数を使って指定ファイルをワンクリックでダウンロードする方法

★気に入ったらシェアをお願いします!


windowsapi,excel,vba,download,URLDownloadToFile,eyecatch皆様こんにちは、ノグチです。

インターネット上の画像やファイルをダウンロードする必要がある場合、皆様どのようにされていますか?

ファイルやイメージファイルの上で右クリック→名前を付けてファイルを保存?

ダウンロード対象のファイルが一つなら問題ないのですが、複数あると面倒臭いですよね。

「ワンクリックでなんとかならないものか…」

今回はそんな願いを叶える、インターネット上の指定ファイルをVBAとWindows APIを使って任意のフォルダに、任意のファイル名で保存する方法をご紹介します!

URLDownloadToFile関数とは

VBAでファイルダウンロードを実行するには、Windows APIのURLDownloadToFile関数を使います。

これは、指定URLのファイルを、指定パスにダウンロードしてくれるという関数です。

つまり、この関数を使ったマクロをエクセルのコマンドボタンなどにセットしておけば、ワンクリックで指定ファイルがダウンロードできてしまうという寸法です。

URLDownloadToFileの記述方法

ではURLDownloadToFile関数の使い方を見ていきましょう。

Windows APIを使用するには、まずVBAコードの宣言セクションで、「このWindows APIを使います」という宣言が必要であることは前回の記事でご紹介しました。

【エクセルVBA】Windows APIで外部プログラムを呼び出すための第一歩
エクセルVBAからWindows APIを使って外部プログラムを呼び出すために、Declareステートメントをはじめとした基本をご紹介しています。エクセルVBAは単体でも便利な機能を実装できますが、Windows APIを使って外部のプログラムや機能と組みわせることで、さらに便利なツールが作れてしまうかも?!

なのでまずは宣言セクションでURLDownloadToFileの宣言をしましょう。

URLDownloadToFile関数はurlmonというDLLに含まれていますので、API名にはURLDownloadToFileを、DLL名にはurlmonを指定します。

そしてこの関数はLong型の返り値を返してくれますので、Long型で宣言しておきましょう。

変数もいくつか宣言していますね。

これら変数の名前は任意のものに変えることもできます。

特に値を指定したりするのはszURLszFileNameの2つで、それぞれの役割と型がこちら。

  • szURL ダウンロードしたいファイルのURLを関数に渡すもの。String型。
  • szFileName  ダウンロードしたファイルを保存するパスをAPIに渡すもの。String型。

szURLとszFileName以外3つの変数は”0″を渡すだけなので、このままでも問題ありません。

そしてコード部分でURLDownloadToFile関数を呼び出す際の記述がこちら。

変数 = URLDownloadToFile(0, ファイルのURL, ファイルを保存するパス, 0, 0)

変数に返された値が0ならファイルダウンロード完了、それ以外ならダウンロードできていないということになります。

URLDownloadToFileでファイル取得するコードの例

では、さっそくこのWindows APIでファイルをダウンロードしてみましょう。

サンプルとして、Googleのトップページのアイコンの画像ファイルをダウンロードするコードを用意しました。

このコードを実行してみると、引数の”strPath”に指定したパスに、strURLで指定したURLのファイルがダウンロードされます。

こんな感じ。

windowsapi,excel,vba,download,URLDownloadToFile

ちなみに、この関数が返してくれる値によってダウンロードできたのかできていないのかが分かりますので、返り値によってメッセージを変えるなどの分岐文を必ず盛り込むようにしましょう。

まとめ

今回は、Windows APIのURLDownloadToFile関数を使った、ファイルのダウンロード方法をご紹介しました。

これを使えば、複数のファイルダウンロードも簡単ですし、ダウンロードしたファイルをどこに保存したかわからなくなる、なんていうことも無くなりますね。

エクセルを開くことすら面倒だ!という方にはこちらの記事にあるVBScripitを使ってマクロを呼び出せば、エクセルを開かずともデスクトップのVBSファイルをダブルクリックするだけで、目的のファイルをダウンロードできますよ!

初心者でも簡単プログラムでWindowsの効率化!VBScriptをやってみよう
特別なアプリケーションのインストール不要。初心者向けのプログラミング言語VBScriptの紹介です。VBScriptの概要から、実際にプログラムをしてメッセージボックスを表示させるところまでの説明です。

それでは、最後までお読みいただきありがとうございました!

連載目次:エクセルVBAでWindows APIを使いこなす方法

エクセルVBAでは、Windows APIを使用して外部プログラムを呼び出して利用することができます。その簡単な方法と、おすすめの関数についてシリーズでお伝えします。
  1. 【エクセルVBA】Windows APIで外部プログラムを呼び出すための第一歩
  2. 【エクセルVBA】 URLDownloadToFile関数を使って指定ファイルをワンクリックでダウンロードする方法

The following two tabs change content below.

ノグチ

元製造子会社SE、ERPパッケージシステムコンサルタント(販売管理、購買管理、生産管理、設備管理他)。 業務システム保守・導入両方やった経験をお伝えすることで、少しでもシステムや手作業に悩まされる人が減ればいいなぁ、楽にお仕事してもらえたらいいなぁと日々夢見ております。