・自分用のインターネット連携ツールを作りたい
・今よりもっと高いITリテラシーを身につけたい
・VB以外のプログラミング言語を学ぶための、最初のきっかけをつかみたい
・「クラウド時代」に乗り遅れたくない!
そんなことを感じていませんか?
しかし、ウェブで情報を検索しても、VBAをつかって、インターネットからデータを取得する、そんな情報はあまり公開されていません。
そこで、この記事では、エクセルVBAを教えた経験がある私が、
・なかなか得ることができないVBAを使ったウェブ連携の方法
・Excel VBAを使った基本的なウェブ連携マクロを自力で書く
・ハイレベルのITリテラシーを手に入れる
これらのことを達成して、あなたのVBAのスキルの幅を広げて、ウェブから自由自在に情報を取得する方法を紹介します。
コードもあわせて紹介しますので、ぜひこのまま読みすすめていってください。
そもそもエクセルマクロVBAとは?とギモンに感じているなら、こちらの記事がオススメです。
目次
- 1 「VBAでIEを操作する」とは?VBAを使ってウェブの情報を取得する事例
- 2 エクセルVBAでインターネットエクスプローラーを操作するメリット
- 3 VBAでIEに接続する前に準備しておくこと|参照設定
- 4 VBAでIE操作してウェブスクレイピング!サンプルコードを紹介
- 5 サンプルコードを詳しく解説
- 6 VBAでIEからデータ取得するときに知っておきたいこと
- 7 VBAを使いこなすには、DOM操作(getelementsbytagname/getelementsbytagidなど)を理解する
- 8 テンプレートファイルをダウンロードしたい方はコチラから
- 9 IE操作をもっと知りたい!高度なレベルにチャレンジしてみたいなら
- 10 IE操作のコードを自力で書きたい!オススメの本や無料動画
「VBAでIEを操作する」とは?VBAを使ってウェブの情報を取得する事例
「VBAでインターネットからデータを取得する」ということを知っているけれど、具体的にイメージが沸かない人は多いです。
そこで、具体的なイメージをもっていただくために、VBAを使ってウェブ情報を取得するマクロをいくつか紹介します。
事例1|エクセルの文章をGoogle翻訳で自動翻訳する
”
この動画の内容は以下の記事で詳しく解説しています。
事例2|サイトのH2とH3タグをエクセルに出力する
”
この動画の内容は以下の記事で詳しく解説しています。
事例3|AmazonのURLリンクを自分のアフィリエイトリンクに修正する
以下の動画で紹介するのは、「amazonのURLリンクを、自動的に自分のアカウント用のアフィリエイトリンクに修正」というものです。
アフィリエイトリンクが正しく作成されたか確認も同時にやるように設定しています。
”
上の画像をクリックすると動画を再生します
エクセルVBAでインターネットエクスプローラーを操作するメリット
「VBAをつかってIEを操作する」ことのメリットは、以下の2つです。
エクセルVBAでIEを操作するためのプログラミングに入る前に、準備しておきたいことが2つあります。
準備2|エクセルマクロVBAを自力で編集できること
詳しく紹介していきます。
準備1|VBEで参照設定でInternetExplorer型を追加
参照設定とは、機能拡張させること、です。
Microsoft Internet Controlsにチェックを入れることで、IE操作の設定ができるようになります。
まず実際にプログラミングに入る前に、エクセルVBAでIEを操作するための参照設定でライブラリを追加する必要があります。
1.VBEを開いて頂いて、「ツール」→「参照設定」
2.この二つのライブラリにチェックを入れて、OKをクリック
・Microsoft HTML Object Library
・Microsoft Internet Controls
詳細はこちらの画像の通りです。
1.VBEを開いて頂いて、「ツール」→「参照設定」
2.この二つのライブラリにチェックを入れて、OKをクリック
・Microsoft HTML Object Library
・Microsoft Internet Controls
これで、ウェブ操作するマクロが動くようになります。
準備2|エクセルマクロVBAを自力で編集できるレベルにいること
「VBAでIE接続」を自分で編集して、ウェブスクレイピングのシステムを作れるようになるには、以下のレベルが必要です。
・Visual Basic Editor上で、自分でモジュールを追加できる
・Excel VBAについての基礎知識「オブジェクトとは何か、プロパティとは何か」といった基本知識を整理できる
・If文やFor Next構文のレベルの作業なら、何も見ないで自作できる
このレベルをクリアしていないと、IE操作のマクロを理解がおぼ付きません。このレベルが難しいと感じるなら、まずはこちらをつかって学んでみることをおすすめします。
VBAでIE操作してウェブスクレイピング!サンプルコードを紹介
ここからは、VBAでIE操作して解析して、ウェブスクレイピングする方法をサンプルコードを合わせて紹介します。
ウェブスクレイピングとは
そもそもウェブスクレイピングとは、wikipediaによると、
ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。(中略)ウェブスクレイピングの用途は、オンラインでの価格比較、気象データ監視、ウェブサイトの変更検出、研究、ウェブマッシュアップやウェブデータの統合等である。
引用元:wikipedia
とあります。要するに、オンラインの情報を取得してデータを利用する、ということです。言葉で説明しても、ピンとこないと思いますので、事例を使って紹介していきます。
IE操作のサンプルコード
ここでは、「ヤフオクを開いて解析をする」という事例を、コードと合わせて紹介します。具体的には、以下のことをやっていきます
コード2|インターネットの特定のページ(URL)を開く|navigate [url]で記述
コード2-1|IEを待機する関数|readystate
コード2-2|指定した秒だけ停止する関数
コード3|テキストボックスに文字を入力して検索
コード4|コード4|ボタンや「次へページへ」リンクをクリック
コード5|IEを閉じる
まずは、サンプルコードを紹介します。これをコピペして使えば、そのまま使えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
Sub yahoo_auction_sample1() '---コード1|インターネットに接続してブラウザを開く--- Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True '---コード2|インターネットの特定のページを開く--- objIE.Navigate "https://auctions.yahoo.co.jp/" Call IEWait(objIE) 'IEを待機 Call WaitFor(3) '3秒停止 '---コード3|IEに自動で文字入力して情報検索する--- 'キーワードを取得 Dim s As String s = "aiko" Dim objtag, objsubmit As Object For Each objtag In objIE.Document.getElementsByTagName("input") If InStr(objtag.outerHTML, """yschsp""") > 0 Then objtag.Value = s Exit For End If Next For Each objsubmit In objIE.Document.getElementsByTagName("input") If InStr(objsubmit.outerHTML, """検 索""") > 0 Then objsubmit.Click Call WaitFor(3) Exit For End If Next '---コード4|ウェブ上のボタンを自動でクリックして次へ--- Dim objtsugi As Object For Each objtsugi In objIE.Document.getElementsByTagName("a") If InStr(objtsugi.outerHTML, "次のページ") > 0 Then objtsugi.Click Call WaitFor(3) Exit For End If Next '---コード5|IEを閉じる--- objIE.quit Set objIE = Nothing End Sub '---コード2-1|IEを待機する関数--- Function IEWait(ByRef objIE As Object) Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop End Function '---コード2-2|指定した秒だけ停止する関数--- Function WaitFor(ByVal second As Integer) Dim futureTime As Date futureTime = DateAdd("s", second, Now) While Now < futureTime DoEvents Wend End Function |
サンプルコードを詳しく解説
上記で紹介したコードを、一つずつ丁寧に解説していきます。
コード1|インターネットに接続してブラウザを開く
1 2 3 |
Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True |
1行目:操作するIEを入れるオブジェクト変数(イレモノ)を準備
2行目:次にそのハコに新しいIEをセット
3行目:IEが画面表示する。まだWEBページには何も表示されていない状態