どうも、マサヤです!
この記事は、VBAでのIE操作が初めて or 慣れていない方向けに『Webサイト・システムの情報を取得・設定する方法』をお伝えしていく連載記事となってます!
前回はチェックボックスチェック・判別する方法を紹介しました!
本記事で習得できること
今回は「リストボックスを選択・取得する方法」をお伝えします!
ラジオボタンやチェックボックスのようにClickメソッドで出来そうですが、リストボックスは違うメソッドを使って選択することになります。
ちなみにリストボックスは、プルダウンやセレクトボックス、コンボボックスなど色々な呼び方をされていますが、ネットで調べてると意味が通じればどれでも良さそうですね)笑
さて、余談はこの辺にして本題にいきましょう!
【動画で確認】リストボックスを選択・取得する方法
今回もサンプル用ページを用意しましたので、こちらを見ながら本記事を読むことで理解しやすくなります。では、動きをご覧ください。
リストボックスを選択・取得するコード
動画で動きを確認できたら、次はコードです。
先にリストボックスのHTMLを確認して、その後でVBAコードを見ていきましょう。
リストボックスのHTML
<select id="like_sports__example"> <option value=""></option> <option value="Baseball">野球</option> <option value="Football">サッカー</option> <option value="Rugby">ラグビー</option> <option value="volleyball">バレー</option> <option value="basketball">バスケ</option> </select>
リストボックスはselectタグを使って記述されます。
今回のリストボックスにはid属性が付与されています。上記コードでは、id「like_sports__example」を取得して操作してます。
もし、属性が一つも付与されていない場合は、getElementsByTagNameでselectタグを取得しましょう。
VBAコード
Sub ieListBox() 'IEオブジェクトを作成 Dim ie As InternetExplorer Set ie = CreateObject("InternetExplorer.Application") 'HTMLコレクションを取得 独自関数化 Call IeGetObj(ie, "https://mmm-program.com/vba-test-selectbox/") '長いの変数に格納 可読性を高めるため Set sports = ie.document.getElementById("like_sports__example") 'selectIndexで選択 野球を選択 sports.selectedIndex = 1 'Selectedで選択 サッカーを選択 sports(2).Selected = True 'Valueで選択 ラグビーを選択 sports.Value = "Rugby" 'リスト項目名で選択 バレーを選択 For Each sport In sports.getElementsByTagName("option") If sport.innerText = "バレー" Then sport.Selected = True End If Next 'リストの一番最後を選ぶ方法 バスケを選択 sports.selectedIndex = sports.Length - 1 '選択されている項目を取得 For Each sport In sports.getElementsByTagName("option") If sport.Selected = True Then Range("C3") = sport.Value Range("C4") = sport.innerText End If Next 'オブジェクトを閉じる ie.Quit 'メモリからオブジェクトを破棄 Set ie = Nothing End Sub '指定URLのオブジェクトを取得する独自関数 Sub IeGetObj(obj, url, Optional vFlg As Boolean = True) 'IEを表示(見えるようにする) obj.Visible = vFlg '指定したURLをIEで開く obj.Navigate url 'サイトの読み込みが完了するまで待つ Do While obj.Busy = True Or obj.readyState < READYSTATE_COMPLETE DoEvents Loop End Sub
リストボックスの選択方法
リストボックスの選択方法を複数紹介しますので、用途に合わせて使い分けていきましょう。
リストの順番で選択①:selectedIndex
リストの並び順(順番)で選択するコードです。
選ぶ項目がいつも一緒で並び順が変わらない場合は下記のように簡単に記述できますね。
'selectIndexで選択 野球を選択 sports.selectedIndex = 1
VBAでは番号(順番)は0(ゼロ)から始まる
リストの順番は、1が最初ではなく0が最初の始まりになります。
今回のサンプルを例すると下記のようになります。
1:野球
2:サッカー
3:ラグビー
4:バレー
5:バスケ
リストの順番で選択②:Selected
これも並び順で選択する方法です。
'Selectedで選択 サッカーを選択 sports(2).Selected = True
()内の数字を変えることで順番を変えれます。書き方が少しだけ違うだけで、先ほど紹介したselectedIndexと同じです。
値で選択:Value
Valueで選択する方法です。
'Valueで選択 ラグビーを選択 sports.Value = "Rugby"
Valueとは、ページ上で実際に見えている選択(リスト)項目名ではなく、HTML内のValue属性のことを指します。サンプルのHTMLでは下記の赤文字がValueになります。
<option value=””></option>
<option value=”Baseball”>野球</option>
<option value=”Football”>サッカー</option>
<option value=”Rugby”>ラグビー</option>
<option value=”volleyball”>バレー</option>
<option value=”basketball”>バスケ</option>
</select>
選択する値が決まっているがリスト項目の順番が入れ替わる場合、Valueによる選択が有効です。
リスト項目名で選択:innerText
リスト項目自体で選択する方法もお伝えします。
'リスト項目名で選択 バレーを選択 For Each sport In sports.getElementsByTagName("option") If sport.innerText = "バレー" Then sport.Selected = True End If Next
リスト項目を直接的に選択するメソッドはないため、リスト内のOptionタグを取得します。
取得したコレクションに対してFor Eachでループ処理し、if文でinnerText(リスト項目名)が選択したい項目になったら、現在のOptionタグの要素に対してSelected = Trueを行えば選択できます。
リスト項目の最後を選択:Length
使うシーンはあまり無そうですが、とりあえず一番最後の項目を選択したい場合の方法です。
'リストの一番最後を選ぶ方法 バスケを選択 sports.selectedIndex = sports.Length - 1
リスト項目に対して、Lengthメソッドを使うことでリスト数を取得することができます。後は、SelectedIndexを使って選択すればOKです。上記コードで-1になっているのは前述したとおり、順番が1ではなく0から始まるためです。
リストで選ばれている項目の取得方法
Selectedメソッドを使うことで選択されているリスト項目を取得できます。
'選択されている項目を取得 For Each sport In sports.getElementsByTagName("option") If sport.Selected = True Then Range("C3") = sport.Value Range("C4") = sport.innerText End If Next
上記コードでは、Optionコレクションを取得・ループさせ、if文でselectedがTrueかを判定し、ExcelへValueとリスト項目自体(innerText)を出力しています。
手動なら動くのに、VBAで選択するとJavaScriptが動かない
VBAでリスト項目を選択する方法をお伝えしましたが、ここで一つ注意点があります。
リスト項目選択時に連動してページ内に動きが発生するといった、いわゆるJavaScriptが仕込まれていた場合、紹介した方法では上手くJavaScriptが発動してくれません。
もちろん対処方法は存在するので安心してください。ただ、ここまで結構長くなっているので、リスト項目選択時のJavaScript発動方法については次回お伝えしますね!
まとめ
次回は、リストボックス選択時にJavaScriptを発動させる方法をお伝えしていきますね!
コメント