ie-excel

エクセル・マクロでie操作

Excel VBAでIEを操作 セレクトメニューを選択

2016/10/17

Excelでアンカーをたどり、リンクしていく方法。
検索する方法などを例示してきました。

今回は該当ページにセレクトタグ(プルダウンのメニュー)があった場合の選択方法を例示したいと思います。

そこで今回のお題は
・セレクトタグのあるサイトを表示
・メニューからプルダウンの2番目を選択する
を実践。

上記お題は、以下の操作をすることにより可能となります。
・エクセルを起動
・(バージョンによっては)マクロを有効にする
・マクロの編集画面で、以下のコードをコピー&ペースト
・マクロを実行

コピペするコード

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」が選択されていませんか?

ではソースの解説です。
青字箇所は以前説明済みのために、赤字箇所に絞って記載します。

      Obj.selectedindex = 1

プルダウン式メニューを選択するには、上記の通り「selectedindex」を使用します。

注意したいのは、「0」から始まることです。

今回は2番目のプルダウンを選択したかったので、「1」を設定しています。

なお、当該命令を以下の通り変更いただいても同じく機能します。

      Obj.value = "サンプル2"

オプションタグで設定されたVALUE値を上記のとおり「value」を指定しても同じ結果となります。

個人的には、数値の設定だけですむ前者の方が簡単なのでおすすめです。

なお、Selectタグではなく、Optionタグに対する命令も可能です。
その場合は、以下のように記述します。

  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」で複数選択可能となります。
この場合、以下のように変更することで、複数選択が可能となります。

  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点がポイントです。

-ExcelでIE操作