亀山研究所

since 2005/9/29
最終更新日: 2011/03/24

亀山研究所レポート『VBAによるIEの操作』

VBAって何?

このVBAとは、エクセルのVBAをさします。VBA自体はVisual Basic for Applicationと言って、 マイクロソフトのオフィス製品(エクセル、ワード、アクセス、アウトルック、パワーポイントなど)に 付属し、各ソフトをベースにプログラミング環境を提供してくれています。

大元はVB(Visual Basic)で、エクセルのブックやシートをユーザーインターフェイスとして使用できますので、 フォームの作成が必要無い、データの保存をシートで行うことが出来るので他のデータベースの使用や データ保存用ファイルの作成が必要無い、など簡単に作れるのが魅力です。

え〜っと、さすがにここでVBAって何?と聞く人にVBAを教えることからやっていくのは無理ですので、 他のHPで勉強してきてください。

なぜ、エクセルのVBA?

RSSをエクセルで使用できるからと言うのが一番の理由です。

実はRSS自体は、DDE通信をしているので、VBからでもRSSとの通信が出来るのだそうです。 (私はまだやったことが無いのですが、いつかはチャレンジするつもりです。) RSS.exeとエクセルにアドインとして組み込んだRSS.xlaがDDE通信をしてやり取りをしているのです。

あとはやはり、VBよりは圧倒的に簡単に手をつけられるからですね。 VBは使ったことが無い人でも、エクセルは使ったことがある人は多いと思います。 エクセルを使用できればVBAは簡単に使えると言うものでもないですが、 いきなりVBよりは取っ付き易いと思います。

めざせVBAでIE操作

使用するもの

もちろんエクセル、あとはIE(インターネットエクスプローラー)ただし両方ともWINDOWSでの話です。 MAC用もあるのですが、使用したことがありませんので対応できないのが実情です。

注意

エクセルのマクロを使用しますので、エクセルのセキュリティ対策も十分に行ってください。 エクセルのマクロがらみのウイルスも最近はあまり見ませんが、完全に無くなっているわけではないので 注意をするようにして下さい。

ここに書かれている、VBAのソースはそのままコピーして貼り付ければ動くようにしたいと思っていますが、 行頭のタブは反映されませんので、ご了承ください。(表示上タブが入っているように見せているだけで、 実際には空白(スペース)すら入っていません。)

VBAでIEを開こう

まず最初にVBAを使用してIEを開くことをやりましょう・・・

Sub SAMPLE01()
	Dim objIE As Object
	Set objIE = CreateObject("InternetExplorer.application")
	objIE.Visible = True
End Sub

このソースはよく使うので呪文だと思って暗記してください。 Set objIE = CreateObject("InternetExplorer.application") でobjIEと言うオブジェクト型変数にIEをセットします。

その後のobjIE.Visible = Trueとすることでセットした インターネットエクスプローラーを可視状態にします。(見れる状態にします、=Trueのところを =Falseとすると見れない状態になります。 これは通常だと必要無いのですが、自動での売買操作時などは表示待ちの時間を短縮できる利点があります。 確実に動くようになったプログラムが出来たら、見れない状態での運用を考えてもいいと思います。)

通常このプログラムを実行すると、IEが立ち上がって設定してあるページが表示されると思います (いわいるホームページ)。当然その後の目的のページへ行くのも自動で行きたいと思いますよね。 それはこうします。

Sub SAMPLE02()
	Dim objIE As Object
	Set objIE = CreateObject("InternetExplorer.application")
	objIE.Visible = True
	objIE.Navigate "http://www.geocities.jp/kameyama_kabu/"
End Sub

objIE.Navigate "http://〜〜〜"で行きたいページのURLを指定すれば、 表示してくれます。この"http://〜〜〜"を変えればいいのですから、 変数を使えれば便利ですね。もちろん使えますのでこのように変更してみましょう。

Sub SAMPLE03()
	Dim objIE As Object
	Dim urlIE As String
	Set objIE = CreateObject("InternetExplorer.application")
	objIE.Visible = True
		urlIE = Sheets("sheet1").Cells(2,2)
	objIE.Navigate urlIE
End Sub

これでSheets("sheet1").Cells(2,2)の中に記入されたURLのページに飛んでいきます。 いろいろなページへ行ってみましょう!もちろんSheets("sheet1").Cells(2,2)の 部分はご自分の環境に合わせて変更しても構いません。

VBAでIEの何を操作する? アンカーリンクをクリックする。

VBAを使って、IEを表示する事が出来るようになりました。 好きなページを表示させる事も出来ます。さて、次は何をやりましょう?

たとえば、楽天証券のWEBページを表示するには。

Sub SAMPLE_Rakuten01()
	Dim objIE As Object
	Dim urlIE As String
	Set objIE = CreateObject("InternetExplorer.application")
	objIE.Visible = True
		urlIE = "http://www.rakuten-sec.co.jp/"
	objIE.Navigate urlIE
End Sub

とすれば、表示できます。通常なら、この後はどんな処理をするでしょうか?

楽天証券に口座がある人なら、左側にあるログインボタンを押してログインの画面に進むでしょう。

それでは、このログインボタンを押してみましょうか!

まずは、このログインボタンが何で出来ているか解析しましょう。 その為にはこのページのソースを見なければなりません。 このページを右クリックして、出てきたメニューの【ソースの表示】をクリックします。

あれ?うまく【ソースの表示】が出ない場合は、右クリックする場所を色々変えてみてください。 画像の上で右クリックすると違うメニューが出てくるので注意しましょう。

そうそう、WINDOWS2000以前のメモ帳(NotePad.exe)でソースを表示している人は、 楽天のソースは文字化けしていると思います。これはWINDOWS2000以前のメモ帳では、 EUC-JPと言うエンコードに対応していない為です。これはUNIXで日本語を扱う際使用されるコードで、 XPのメモ帳では対応していると聞いた事がありますが、WINDOWS2000のメモ帳では対応していないようです。 私は、TeraPad と言うテキストエディタをこの為に使うようにしました。このHPもTeraPadで書いています。

ソースを探って、ログインボタンがどんなものか確認しましょう。 最初にやるのは、「ログイン」を検索してみましょう。 結構みごとに引っかかります・・・ほら。

<a href="https://www.rakuten-sec.co.jp/ITS/V_ACT_Login.html"> <img src="/resource/image/common/login_btn2.gif " border="0" width="140" height= "34" alt="ログイン"></a>

これで、目的のログインボタンはGIF画像でアンカーリンクをクリックするようになっている事が分かりました。

アンカーリンクをクリックするにはどうすればいいの?

objIE.Document.Links(n).ClickでOKです。 「objIEオブジェクトのDocument(中身ぐらいかな)のLinkのn番目をクリックする。」と言う命令になります。

Sub SAMPLE_Rakuten02()
	Dim objIE As Object
	Dim urlIE As String
	Set objIE = CreateObject("InternetExplorer.application")
	objIE.Visible = True
		urlIE = "http://www.rakuten-sec.co.jp/"
	objIE.Navigate urlIE
	objIE.Document.Links(17).Click
End Sub

Links(17)の中の数字はソースの上から順番にしたアンカーリンクの番号になります。 目的のリンクで無い場合は数字を変えてみて下さい。

ただ、このままでは、ほとんどうまく動きません。楽天証券のトップページは表示するのに時間がかかるのですが、 その間を待たずに(全てのDocumentを読み込まないうちに)リンクをクリックする命令が発令されるからです。 さて、どうしましょうか・・・

表示待ちをする。

IEの右上にある地球マークが動いているときが、ソースを読み込んでいるときです。この間はそれより後の 命令はSTOPしてもらわないとうまく行きません。それには・・・

Sub SAMPLE_Rakuten03()
	Dim objIE As Object
	Dim urlIE As String
	Set objIE = CreateObject("InternetExplorer.application")
	objIE.Visible = True
		urlIE = "http://www.rakuten-sec.co.jp/"
	objIE.Navigate urlIE
		'----表示待ち
		Do While objIE.Busy
			DoEvents
		Loop
		Do While objIE.document.ReadyState <> "complete"
			DoEvents
		Loop
		'----表示待ちここまで
	objIE.Document.Links(17).Click
End Sub

とします。これもIEの表示待ちの定型文ですので、このまま覚えてください。 さて、これでログイン情報を入力する画面まで行く事が出来るようになりました。 続いてログイン情報を入力して見ましょう。


お問い合わせなどは、 にてお願いします。メールはテキスト形式にてお願いします。
kameyama-logo

kame.jpg

目次

リンク

メンバーサイト

参考サイト

証券会社

証券取引所