Excel VBAでIEを操作 セレクトメニューを選択
2016/10/17
Excelでアンカーをたどり、リンクしていく方法。
検索する方法などを例示してきました。
今回は該当ページにセレクトタグ(プルダウンのメニュー)があった場合の選択方法を例示したいと思います。
そこで今回のお題は
・セレクトタグのあるサイトを表示
・メニューからプルダウンの2番目を選択する
を実践。
上記お題は、以下の操作をすることにより可能となります。
・エクセルを起動
・(バージョンによっては)マクロを有効にする
・マクロの編集画面で、以下のコードをコピー&ペースト
・マクロを実行
コピペするコード
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 |
Dim ObjIE As Object '変数を定義 Dim Obj As Object '変数を定義 'Sleepを使用する場合のお約束 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub IE_open() Set ObjIE = CreateObject("InternetExplorer.Application") 'IEを開く際のお約束 ObjIE.Visible = True 'IEを開く際のお約束 ObjIE.Navigate "http://www.yahoo.co.jp" '開きたいサイトのURLを指定 Sleep (1000) '1秒間待つ Do While ObjIE.ReadyState <> 4 'サイトが開かれるまで待つ(お約束) Do While ObjIE.Busy = True 'サイトが開かれるまで待つ(お約束) Loop Loop For Each Obj In ObjIE.Document.getElementsByTagName("select") '表示されているサイトのselectタグ一つずつに対して以下の処理を実施 Obj.selectedindex = 1 'プルダウンメニューの2番目を選択 Exit For '選択後、処理を抜ける Next '次のタグを処理 End Sub |
「サンプル2」が選択されていませんか?
ではソースの解説です。
青字箇所は以前説明済みのために、赤字箇所に絞って記載します。
1 |
Obj.selectedindex = 1 |
プルダウン式メニューを選択するには、上記の通り「selectedindex」を使用します。
注意したいのは、「0」から始まることです。
今回は2番目のプルダウンを選択したかったので、「1」を設定しています。
なお、当該命令を以下の通り変更いただいても同じく機能します。
1 |
Obj.value = "サンプル2" |
オプションタグで設定されたVALUE値を上記のとおり「value」を指定しても同じ結果となります。
個人的には、数値の設定だけですむ前者の方が簡単なのでおすすめです。
なお、Selectタグではなく、Optionタグに対する命令も可能です。
その場合は、以下のように記述します。
1 2 3 4 5 6 |
For Each Obj In ObjIE.Document.getElementsByTagName("option") If Obj.Value = "サンプル2" Then Obj.Selected = True Exit For End If Next |
選択する箇所を特定するには、上記のとおりVALUE値を「Value」で指定します。
他にも、表示されているテキストを「innertext」や「text」で指定する方法もあります。
選択する場合は「Selected」をTrueにすれば選択されます。
選択を解除したい場合Falseを設定すれば解除されます。
Selectタグは「multiple」で複数選択可能となります。
この場合、以下のように変更することで、複数選択が可能となります。
1 2 3 4 5 6 7 8 9 10 |
For Each Obj In ObjIE.Document.getElementsByTagName("option") If Obj.Value = "サンプル2" Then Obj.Selected = True End If If Obj.Value = "サンプル3" Then Obj.Selected = True End If Next |
上記コードは、複数タグを処理するためにFor~Eachから最後まで抜け出さないよう「Exit For」の処理を削除していることに注意ください。
複数選択時以外はVALUE値を調べながらの記載となるために、あまりおすすめいたしません。
今回のポイントの整理です。
・プルダウン式メニューのSELECTタグは「selectedindex」を用いて選択可能(0から始まることに注意)
・オプションタグの選択にはvalue値を「Value」で選択
・OPTIONタグで「Selected」を用いて選択することも可能
といった3点がポイントです。