VBA開発

VBAでIE操作「ラジオボタンの選択/解除」【エクセルマクロ】

VBAでIEを起動し、Webページ内のラジオボタンの選択・解除する方法です。
要素を指定し、クリック処理を入れるだけです。
チェックを付ける方法もありますが、お勧めしません。

ラジオボタンを選択・解除するサンプルコード

当方の問い合わせページにラジオボタンがある為、そちらをサンプルとして記載します。

'■InternetExplorerでチェックボックスをクリック、選択状態にする。
Sub sample_IE_radioButton_click()
    Dim objIE As InternetExplorer
    
    '■IEを起動
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True
 
    '■該当ページへ遷移
    objIE.navigate "https://vba-create.jp/contact/"
    Call Call_IE_WaitTime

    '■ページ内ラジオボタンをクリック
    objIE.document.getElementsByName("radio-type")(0).Click 'メール希望がTrue
    objIE.document.getElementsByName("radio-type")(1).Click '電話希望  がTrue
    objIE.document.getElementsByName("radio-type")(1).Click '電話希望  がTrue(チェックボックスと違ってFalseにならない)
    objIE.document.getElementsByName("radio-type")(2).Click '打合せ希望がTrue
 
    '■Click同様の動作にならない場合もあり、お勧めしない。理由は後述
    objIE.document.getElementsByName("radio-type")(0).Checked = True 'メール希望がTrue
    objIE.document.getElementsByName("radio-type")(0).Checked = False 'メール希望がfalse
 
End Sub
'■HTMLサンプル(name="radio-type"があり、name要素が存在)
<span class="wpcf7-form-control wpcf7-radio">
	<span class="wpcf7-list-item first">
		<input type="radio" name="radio-type" value="メール希望" checked="checked">
			<span class="wpcf7-list-item-label">メール希望</span>
		</span>
	<span class="wpcf7-list-item">
		<input type="radio" name="radio-type" value="電話希望">
			<span class="wpcf7-list-item-label">電話希望</span>
		</span>
	<span class="wpcf7-list-item last">
		<input type="radio" name="radio-type" value="打合せ希望">
			<span class="wpcf7-list-item-label">打合せ希望</span>
		</span>
	</span>
</span>

ClickとCheckedの違い

今回のキモはClickとChecked = Trueの動作の違いを理解する必要があります。
onclick等のJavaScript(JS)要素があるチェックボックスでは、Checked = Trueは使用できません。
画面上はチェックボックスが動作しても、チェックボックスの結果は以前の状態のままです。
TrueならTrueのまま。FalseならFalseのまま、False→True True→Falseとはなりません。

動作表

VBA(DOM)操作ラジオボタン
状態
JavaScript(JS)なしJavaScript(JS)あり
ラジオボタン結果ラジオボタン結果
Click選択なしTRUETRUE
選択ありTRUETRUE
Checked=True選択なしTRUETRUE(だが反応しない)
選択ありTRUETRUE(だが反応しない)
Checked=False選択なしFALSEFALSE(だが反応しない)
選択ありFALSEFALSE(だが反応しない)

動作が異なる理由

Clickの場合、人間が手動操作した時と同じようにクリックをしてチェックボックスを反応させます。
Checkedの場合、内部的にTrue/Falseの判定をさせています。

ラジオボタンにJavaScript要素がない場合
→Click同様の動作となり、問題ありません。ラジオボタンにJavaScript要素がある場合
→ラジオボタンの処理はしたが、JavaScript側の動作(onClick処理等)を行っていない為、
 IE上は何もしていない扱いと同様になります。

その他

毎度おなじみですが、Call_IE_WaitTimeの処理はこちらを参照ください。

その他

Internet Explorerを使用して、Webスクレイピングは敷居が高い風に捉えられますが、
上記のように、パーツ化して組み合わせ処理するだけです。

Web上のデータを触りたい要望は会社様でも個人様でも多いと思います。
VBA IE操作を覚えて効率化しませんか?
作成が大変であれば弊社で代行開発も可能です。お気軽にお問い合わせください。

 

コメント

タイトルとURLをコピーしました