VBAを使ってWeb上からファイルをダウンロードする方法

このQ&Aのポイント
  • VBAを使用してWeb上からファイルをダウンロードする方法を紹介します。具体的な手順は以下の通りです。
  • まず、ダウンロードしたいファイルのURLを指定します。次に、保存先のディレクトリを指定します。最後に、URLを元にファイルをダウンロードし、保存します。この方法を使えば、あらかじめ指定したディレクトリに指定したURLからファイルを自動的にダウンロードすることができます。
  • VBAを使ってWeb上からファイルをダウンロードする方法は、処理が途中で止まる問題に直面することがありますが、上記の手順を実行すれば問題なくファイルをダウンロードできます。
回答を見る
  • ベストアンサー

VBAを使い、Web上からファイルをダウンロードしたいのですが・・・

はじめまして。 今、日証金から日々の融資・貸株残高のデータ(CSV)を自動的に ダウンロードしてExcelに取り込むというマクロを作ろうとして いるのですが、うまくいきません。 具体的には、 range("A1").value = "http://www.jsf.co.jp/de/stock/dlcsv.php?target=balance&date=" & format(now,"YYYY-MM-DD") range("A1").select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True しかし、これだと「ファイルを保存」のWindowがあがってしまうので 処理が途中で止まります。 VBAで、あらかじめ指定したディレクトリに、指定したURLからファイルを自動的にダウンロードする には、どのようにすればよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

ちょっと無茶ですね・・・。 APIという機能を使う事になります。 これでVBAの機能を拡張して新たな機能を取り込む事ができるようになります。 http://www.accessclub.jp/bbs5/0009/vba2406.html http://www.ken3.org/vba/backno/vba120.html

kabuo99
質問者

お礼

ありがとうございます! APIを使ってうまくいきました!

その他の回答 (3)

  • kakusuke
  • ベストアンサー率36% (95/259)
回答No.4

INETコントロールをフォームに貼り付けて使用する。 VBAでも動作確認済。 http://www.cqpub.co.jp/hanbai/books/18/18771_VBA/18771_4syo.pdf 上記を確認してください。

  • Gody
  • ベストアンサー率52% (9/17)
回答No.3

もう解決したようなので余計かも知れませんが、APIを使わずともできる方法もあるので参考までに。 実行文を示したいところですが、なにぶん長いものなので、以下の操作を"マクロの記録"で記録したものを見ていただけると幸いです。 データ → 外部データの取り込み → データの取り込み でファイルを開くダイアログが出現します。ここにアドレスを打ち込むと、CSVファイルをインポートするときと同じダイアログが出現します。ここで取り込むときの設定をして、完了すると取り込めると思います。 元のCSVをファイルとして残したい、というのであれば、上記の取り込み時に素の状態(カンマで区切らず、文字列として取り込んだ状態)で取り込んだものをCSVファイルで保存した後、1列目に対して データ → 区切り位置 で区切りなおして処理を続行すればよいと思います。(これも長い文なので、"マクロの記録"を使ってください。) 後は"マクロの記録"によって得られたコードを改変していけば自動的に取り込むものができると思います。

  • sam_inoue
  • ベストアンサー率47% (27/57)
回答No.2

下記URLのサンプルにあるmodWinInetDownLoadのモジュールを組み込んで 呼び出すようにすれば比較的簡単にできると思います。

関連するQ&A

  • エクセルVBAでのファイル転送

    任意のアドレスに添付ファイルを付けて送信完了までのコードを教えてほしいです。 Workbooks("***.xls").Sheets("***").Activate Range("D8").Select /上記セルにメールアドレスを設定してます。/ Selection.Hyperlinks(1).Follow _ NewWindow:=False, AddHistory:=True 送り先は設定されるけど添付ファイルの付け方が判らない。 Workbooks("***.xls").Activate Application.Dialogs(xlDialogSendMail).Show 添付ファイルは付けれるけど送り先の設定が判らない。

  • EXCELマクロでネットから資料をダウンロードしたい

    EXCELマクロを使って、Web上にある資料(ZIPファイル。毎日100個から300個)をダウンロードしたいと思っています。 EXCELの特定のセルに、縦にハイパーリンクを続けてコピーするところまでは手で行おうと思っています。 その後、 Range(\"F1\").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True で、ダウンロードすることまではできるのですが、 「保存しますか?」のダイヤログと、実際のセーブする時のダイヤログを止められません。 エラーでない限り、自動的に「はい」を選択し、次に進むようにさせたいのですが。 Application.DisplayAlerts = False でダイヤログを出さない。。。ということもできませんでした。 似たような操作をしている例はないか検索したのですが、見つかりませんでした。 素人な質問ですみません。 宜しくお願いいたします。

  • VBAにて:IEを閉じるにはどうすれば良いですか?

    セルB1にハイパーリンクが設定してあると、以下のコードにて、IEを起動することが出来ます。 IEが起動されたときに、リンク切れがあると”お探しのページはありません”と出ますが、この時にIEを閉じるようにしたいのです。 どのようにすれば実現できるか教えてください。 Range("B1").Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True     

  • VBA 実行時エラー1004 range・・・

    【VBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクト】 Excel Book内のあるシートで、 【数量の入っていない行を非表示にする】 【それを解除して全表示にする】 という二つのマクロを使用しています。 このシートのシート名を変更したところ、上記のエラーが出るようになってしまいました。 シート名をもとに戻せば出なくなります。 当方、VBAには詳しくないので、シート名を変えてもこのエラーが出なくなる方法を考え付きません。 エラーからデバッグを表示すると下記記述の窓が開きました。 ===ここから=== Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) Application.Goto Excel.Range(Target.SubAddress), True End Sub ===ここまで=== 『Application.Goto Excel.Range(Target.SubAddress), True』の部分が黄色になっていて、その中の『Target.SubAddress』にカーソルを合わせると、 『Target.SubAddress=”(変更前のシート名)”』がポップアップします。 どこかでシート名の変更をすればいいのだろう、という事は察するのですが、それをどうやったらいいのかがわかりません。 使っているマクロの内容は下記です。 ===== 【数量の入っていない行を非表示にするマクロ】 Sub まとめ() ' ' まとめ Macro ActiveSheet.Range("$A$4:$T$2000").AutoFilter Field:=9, Criteria1:="<>" Range("B2").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True End Sub ===== 【それを解除して全表示にするマクロ】 Sub 解除() ' ' 解除 Macro ActiveSheet.Range("$A$4:$T$2000").AutoFilter Field:=9 Range("B2").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True End Sub ===== どこをどうやったらいいのでしょうか。 教えていただけませんでしょうか。

  • エクセルのマクロのタイマー機能について

    エクセルのマクロのタイマー機能について エクセルのマクロで指定した時間ごとにURLをクリックするマクロを作っています。 下記のように作っていますが、もっと簡略化して短い記述にしたく思います。 URLと指定時間は別のマクロで生成して、URLはA1~A49まで、指定時間はB1~B490までセルに書きこむようにしています。 URLはA49まで読んだらA1から読み直して10往復して、490回使用します。 使用するセルを一回ごとにずらしていくだけなので、簡単に出来そうな気もしますが、マクロ初心者のためわかりません>< 恐れ入りますが、ご教授いただければ幸いです。 ちなみにエクセル2007で作成しています。 Sub 一定の時間間隔でマクロを実行する() '進捗状況を示すために準備する 指定時刻 = Now + TimeValue("0時00分05秒") 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "新規01", TimeValue(待ち時間) End Sub Sub 新規01() Range("A1").Select 'A列のURLを取得 Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True 指定時刻 = Now + Range("B1").Value 'B列の時間を取得 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "新規02", TimeValue(待ち時間) End Sub Sub 新規02() Range("A2").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True 指定時刻 = Now + Range("B2").Value 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "新規03", TimeValue(待ち時間) End Sub         ↓    同様の記述を490回繰り返す         ↓ Sub 新規建設490() Range("C1").Value = Now & " 終了" End Sub Private Sub 進捗状況を示すために準備する() Cells.Clear Columns("A:A").NumberFormatLocal = "yyyy/m/d h:mm:ss" Range("A1").Select ActiveCell.Value = Now & " 開始       " Columns("A:A").EntireColumn.AutoFit End Sub

  • マクロでExcelパスワードを入力する方法

    教えて頂きたいのですが、 今Excelのフォームボタンにマクロを使って、 別のExcelファイルを開けるように設定していますが、 そのファイルにパスワードを掛けており、フォームボタンを押すと、 まず、そのパスワード入力のダイアログが出ます。 それを、フォームボタンを押したときのマクロに組み込み、 パスワード入力のダイアログを出さずに開く事って可能でしょうか? 現在のフォームボタンに登録しているマクロの記述は下記の通りです。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Sub Macro11() ' ' Macro11 Macro ' マクロ記録日 : 2008/9/25 ユーザー名 : ************ ' ' Range("I29").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True End Sub ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー I29にハイパーリンクにてアドレスを入力しているだけのものです。 宜しくお願いいたします。

  • セルに入力されているアドレスでハイパーリンクを開き

    http://officetanaka.net/excel/vba/tips/tips42.htm これを同じようにしてるのですが Sub test() Range("a1").Value = "http://www.goo.ne.jp/" Range("a1").Hyperlinks(1).Follow NewWindow:=True End Sub これだとエラーになるのですがどうしてでしょうか? 「インデックスが有効範囲にありません。」 と言われます。 セルに入力されているアドレスでハイパーリンクを開きたいです。

  • 動画再生のマクロ ハイパーリンクについて教えて下さい

    エクセルVBA2003対応 の マクロについて教えて下さい 現在エクセルのワークシートの「セルC14」に、 MPG形式の動画が保存してあるパス (例えば、C:\◎○×\ビデオ\あいう.mpg)が記載して あり、それにハイパーリンクが設定してあります。 マクロで、それを自動実行し、終了するようにしたい為 Range("C14").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True と、プログラムし、マクロを実行すると、自動再生は しますが、動画が終了しても、再生画面はそのまま残り 動画再生のプログラムは自動で終了しません。 どのようにプログラムを追加すれば、再生後、自動で 「動画再生のプログラム」をクローズさせることが できるかどなたか教えて下さい よろしくお願いいたします 注:セルC14をクリックすれば正常に動画を再生できるのは   確認済みです

  • マクロの実行について 質問です。

    マクロ勉強中です! 何時間も調べておりますが、 どうしても分からないので お教え下さい(;_;) 別シートの都道府県が混在するデータの中から、 3列の付属語が『下関』のものだけをコピーして、シート1に貼り付けるマクロを マクロの記録で 『下関』 というタイトル?にして作りました。(下記) これを実行するときに、マクロ名からではなく、 下の表の R3C8セルの、『下関』 というハイパーリンクをクリックで 実行される・・・・ そんなふうにするには、どうしたらいいのでしょうか? ご回答を おまちしております。よろしくお願いします! Sub 下関() ' ' 下関 Macro ' ' Keyboard Shortcut: Ctrl+a ' ActiveWindow.SmallScroll Down:=-9 Range("B3").Select ActiveWindow.SmallScroll Down:=117 Range("B3:F137").Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp ActiveWindow.SmallScroll Down:=-9 Range("H3").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True Selection.Copy Sheets("Sheet1").Select Range("B3").Select ActiveSheet.Paste Range("C3").Select End Sub

  • tifを表示するマクロを教えてください。

    現在エクセル2003を使用していますが、以前は95・97を使用していました、その時に使用していたマクロがエラーを起こすようになりました。誰かお力添えをお願いします、マクロはこんな感じでした。 Private Sub CommandButton3_Click() TifPath = "P:\正式図\Mirror\コピー ~ test" For Each Cell In Range("M2") 'M列にファイルパスが書かれている場合 On Error Resume Next ActiveSheet.Hyperlinks.Add Anchor:=Cell, Address:=TifPath + Cell.Value, TextToDisplay:=Cell.Value On Error GoTo 0 Next If Range("M2") = "" Then MsgBox "図面ファイルを選択して下さい。", vblnformation, "チェック確認" Else Range("M2").Select Selection.Hyperlinks(1).Follow NewWindow:=True, AddHistory:=True '図面ファイルを開く End If Range("M2").Clear 'M2をクリアー CheckBox1 = False 'CheckBox1をクリアー CheckBox2 = False 'CheckBox2をクリアー CheckBox3 = False 'CheckBox3をクリアー TextBox1.Text = "" 'TextBox1をクリアー TextBox2.Text = "" 'TextBox2をクリアー TextBox3.Text = "" 'TextBox3をクリアー TextBox4.Text = "" 'TextBox4をクリアー End Sub