VBA デキる解る!IE操作編 【ラジオボタンをチェック・判定する方法】

この記事は約8分で読めます。

VBA操作編5回目 サムネイル

どうも、マサヤです!

この記事は、VBAでのIE操作が初めて or 慣れていない方向けに『Webサイト・システムの情報を取得・設定する方法』をお伝えしていく連載記事となってます!

 

前回はWebサイトのテキストボックスへデータを入力する方法を紹介しました!

 

今回は「ラジオボタンのチェック方法と判別方法」をお伝えします!

チェック方法での気を付ける点も併せてお伝えしますよ!

本記事で習得できること

  • ラジオボタンへのチェック方法。
  • チェックしているラジオボタンの判別方法。
  • ラジオボタンをチェックする際に気を付けるべき点

 

スポンサーリンク

【動画で確認】ラジオボタンをチェック・判定する方法

 

今回はサンプル用ページ内のラジオボタンに対して操作を行います。

では、VBAで操作したときの動画をご覧ください。

※クリックすると大きくなります。

VBAIE操作 ラジオボタンクリック

動画内のコードでは、録画のため画面をスクロールさせるコード「ie.document.parentWindow.scrollTo(0, 800)」を使ってますが、ラジオボタンをチェックするには不要です。

 

ラジオボタンをチェック・判定するコード

 

ラジオボタンをクリックするコードはこちら!

Sub ieSetRadioButton()

    'IEオブジェクトを作成
    Dim ie As InternetExplorer
    Set ie = CreateObject("InternetExplorer.Application")

    'HTMLコレクションを取得 独自関数化
    Call IeGetObj(ie, "https://mmm-program.com/vba-test-radioandcheckbox/")

    '方法1:性別を2番目の女性を選択。Clickメソッド ※要素番号は0から始めるので、2番目は1となる。
    ie.document.getElementsByName("sex")(1).Click
    
    '方法2:年代をValueで20代と確認して選択。
    For Each age In ie.document.getElementsByName("age")
        If age.Value = 20 And age.Type = "radio" Then
            age.Click
            Exit For
        End If
    Next
    
    'チェックしている性別を判定後、取得してセルF8へ代入
    For Each sex In ie.document.getElementsByName("sex")
        If sex.Checked = True Then
            Range("F8") = sex.Value
            Exit For
        End If
    Next
    
    'チェックしている年代を判定後、取得してセルG8へ代入
    For Each age In ie.document.getElementsByName("age")
        If age.Checked = True Then
            Range("G8") = age.Value
            Exit For
        End If
    Next
    
    'オブジェクトを閉じる
    ie.Quit
    
    'メモリからオブジェクトを破棄
    Set ie = Nothing
    
End Sub
'指定URLのオブジェクトを取得する独自関数
Sub IeGetOb(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

まずは、ラジオボタン要素取得の考え方と注意点を確認しましょう。

 

Name属性でラジオボタン要素を取得

 

チェックするにはHTMLからラジオボタン要素を探す必要がありますが、ラジオボタンの場合は比較的簡単です。

ラジオボタンはボタン同士の関連性を持たせるため、基本的にName属性が付与されています。

サンプルサイトのHTMLでもName属性が下記のように付与されています。

<p><input name="sex" type="radio" value="男"> 男 <input name="sex" type="radio" value="女"> 女</p>

Nameが付与されているということは、メソッド「getElementByName」を使用すれば取得できますね。

 

Type:radioでラジオボタン以外のName要素を除外する

Nameで取得できるのですが注意する点があります。

ページ内で同じNameがラジオボタン以外にも使用されている場合は、getElementBynameだけでは指定したいラジオボタンかどうかを判別できません。

対処法としては、Typeでラジオボタンかを判別することでラジオボタンかどうかを区別することができます。

具体的な対処法は後述している方法2で解説します。

 

Clickメソッドでチェック

 

では、コードの主要部分を解説していきます。

解説していないコードで、解らない点があればこれまでのIE操作編を確認しましょう。

2つのチェック方法を紹介します。

  • 方法1:順番でチェック   ⇒ チェックする箇所(要素番号)が決まっている際に使用。
  • 方法2:Valueでチェック ⇒ チェックする箇所が変動する or 同じNameが複数使われている。

 

方法1:順番でチェック

ページ内でName属性がラジオボタンのみで利用されている場合のチェック方法です。

※コード:11行目
'方法1:性別を2番目の女性を選択。Clickメソッド ※要素番号は0から始めるので、2番目は1となる。
ie.document.getElementsByName("sex")(1).Click

ページ内でラジオボタン以外に同じNameが利用されていないため要素番号で指定が可能です。

チェックする箇所が決まっている際は、記述が簡単に済むこの方法がおススメです。

 

方法2:Valueで判別してチェック

ラジオボタン以外で同じNameが使われいる or チェックする項目が変わる場合の方法です。

※コード:14~19行目
'方法2:年代をValueで20代と確認して選択。
For Each age In ie.document.getElementsByName("age")
    If age.Value = 20 And age.Type = "radio" Then
        age.Click
        Exit For
    End If
Next

 

Valueプロパティでチェックしたい項目を探し、かつTypeプロパティがradioであるオブジェクトにチェックを入れています。

処理の流れとしては下記になります。

  1.  getElementByNameでName属性にageが付与されているコレクションを取得。
  2.  取得したコレクションをFor Eachでループ。
  3.  Valueでチェックしたい項目を探し、かつTypeプロパティがradioかどうかを確認
  4.  3の条件に一致したコレクションに対し、Clickメソッドでチェックを入れる
  5.  チェック後はExit Forで処理を抜ける(一つにチェックが入れば以降の処理は不要のため)

 

Checkedメソッドでチェック箇所を判別

 

下記コードにある通り、Checkedメソッドでチェックされているボタンを確認できます。

コード:23行目~26行目
If sex.Checked = True Then
    Range("F8") = sex.Value
    Exit For
End If

紹介したコードではCheckedで確認し、チェックされているラジオボタンのValueをセルに出力しています。

 

Checkedメソッドでチェックは要注意!

 

実は、下記のようにClickメソッドをCheckedメソッドに置き換えてもチェックができます。

age.Click

age.Checked = True

 

javascriptが動かない(反映しない)

ただ、注意が必要な点があります。

ラジオボタンのチェックと連動してテキストボックスが出現させるといったJavaScriptが存在した場合、Checkedメソッドを使うとJavaScriptが動きません。

なので、チェックと連動して動的に入力フォームが変わる場合はClickメソッドを使いましょう。

 

まとめ

 

ラジオボタンのチェックと判別方法の流れは簡単にまとめると、

Name属性で要素を取得した上で、

  • チェック:取得した要素をClickメソッドでチェックする。
  • 判別  :Checkedメソッドで判別。Trueならチェック有、Falseならチェック無と判別。

※同じNameがラジオボタン以外に使われている場合は、if文を使いType=radioで絞り込む。

 

さて、次回はチェックボックスのチェック方法と判別方法をお伝えしていきますね!

コメント

  1. 田中 より:

    はじめまして。IEのサポート終了が間近という事で、他のEdgeやChromeでも
    代替できるのでしょうか。

    • mMm より:

      はじめまして!今のコードのままでは出来ないですね。
      私もChomeをVBAで操作しようと試みたことがあるのですが出来ませんでした。
      ただ調べてみると、IE以外のブラウザを操作する際はSeleniumBasicを使うと操作できそうですね。
      ※インストールが必要になるので会社で使う場合なは社内ルールとかでダメな場合があるかもしれません。