VBAのIE(InternetExplorer)制御で役立つ検索キーワード行・列取得のサブルーチン化する方法について解説しています。
前回は最終行(列)の取得について解説しましたが、今回は、該当するキーワードの行(列)を取得するサブルーチンの説明をします。
こちらがどのように利用されるか開発依頼があった実例で紹介するとツイッターのフォロー・フォロワー数をチェック日の行に入力するであったり、検索上位サイトで特定キーワードが存在するページの数を算出など様々な利用方法があります。
該当するキーワードの行(列)取得は便利な機能ですので、機会がありましたらご利用ください。
Function searchRC(keyword As String, _
Optional sheetName As String = "mySheet", _
Optional rcNo As Integer = 0, _
Optional TypeRC As String = "R") As Long
Dim foundCell As Range
If sheetName = "mySheet" Then
sheetName = ActiveSheet.Name
End If
If TypeRC = "R" And rcNo > 0 Then
Set foundCell = Sheets(sheetName).Columns(rcNo).Find(What:=keyword)
ElseIf TypeRC = "C" And rcNo > 0 Then
Set foundCell = Sheets(sheetName).Rows(rcNo).Find(What:=keyword)
Else
Set foundCell = Sheets(sheetName).Cells.Find(What:=keyword)
End If
If foundCell Is Nothing Then
searchRC = 0
ElseIf TypeRC = "R" Then
searchRC = foundCell.row
Else
searchRC = foundCell.Column
End If
End Function
※ドラッグ(スワイプ)すると全体を確認できます。
Sub sample()
Dim objIE As InternetExplorer
Dim r As Integer, c As Integer
'テスト用フォームページを表示
Call ieView(objIE, "http://www.vba-ie.net/code/test.html")
'検索キーワード行・列
r = searchRC("h1要素テキスト:", "リスト", 1, 1)
c = searchRC("p要素テキスト:", "リスト", 4, 1)
'h1要素のテキストデータ
Sheets("リスト").Cells(r, 1) = tagValue(objIE, "h1", "", "outerHTML")
'p要素のテキストデータ
Sheets("リスト").Cells(3, c) = tagValue(objIE, "p", "p-value", "innerText")
End Sub
※ドラッグ(スワイプ)すると全体を確認できます。
今回も値を取得するために戻り値が必要となりますのでfunctionマクロで対応しています。引数は以下の4つが設定されています。
引数名 | データ型 | 内容 | 値の事例 | 初期値 | 省略 |
---|---|---|---|---|---|
keyword | String | 検索キーワード文字列 | "h1要素テキスト:" | × | |
sheetName | String | シート名文字列 | "リスト" | ActiveSheet.Name | ● |
rcNo | Integer | 対象の行・列番号 | 1 | 0 | ● |
TypeRC | String | 行・列の選択文字列 | "R","C" | "R" | ● |
こちらは、「keyword」のみ必須項目となります。
「keyword」は検索するキーワード文字列を入力します。
「sheetName」はシート名文字列を入力しますが、処理するシートが現在開いているシートの場合は、初期値で現在開いているシート名を取得しますので、未入力で大丈夫です。
「rcNo」は対象の行・列番号で、例えば3列目の最終行を取得したい場合は「3」を入力します。初期値では「0」が設定されています。「0」の場合は全てのセルを検索しますが、キーワード文字列が複数セルに存在する場合は、期待通りの値を取得できない場合もあります。
特定の行・列が決まっているのであれば、値を設定しましょう。
「typeRC」は行・列どちらを取得するかの判断をするためのものです。「R」を指定すれば検索キーワードのある行を「C」を指定すれば列の番号を取得します。初期値は「R」で設定されています。
それでは、1つずつコードを見ていきましょう。
If sheetName = "mySheet" Then
sheetName = ActiveSheet.Name
End If
※ドラッグ(スワイプ)すると全体を確認できます。
sheetNameが設定されていれば指定したシート名をsheetNameに代入し、されていない場合は現在開いているシートがsheetNameに代入されます。
If TypeRC = "R" And rcNo > 0 Then
Set foundCell = Sheets(sheetName).Columns(rcNo).Find(What:=keyword)
ElseIf TypeRC = "C" And rcNo > 0 Then
Set foundCell = Sheets(sheetName).Rows(rcNo).Find(What:=keyword)
Else
Set foundCell = Sheets(sheetName).Cells.Find(What:=keyword)
End If
※ドラッグ(スワイプ)すると全体を確認できます。
typeRCが「R」かつrcNOが設定されている場合はrcNOの列を検索しセルを返します。typeRCが「C」かつrcNOが設定されている場合はrcNOの行を検索しセルを取得しています。
それ以外の場合は、全てのセルを検索しセルを返します。
If foundCell Is Nothing Then
searchRC = 0
ElseIf TypeRC = "R" Then
searchRC = foundCell.row
Else
searchRC = foundCell.Column
End If
※ドラッグ(スワイプ)すると全体を確認できます。
「If~Thenステートメント」でキーワードが存在しない場合は「0」を返します。
typeRCが「R」の場合は、セルの行番号を返します。
typeRCが「C」の場合は、セルの列番号を返します。
ここまでがサブルーチンの中身になりますので、実行マクロの内容も見ていきましょう。
'最終行取得(Y方向)
r = searchRC("h1要素テキスト:", "リスト", 1, 1)
c = searchRC("p要素テキスト:", "リスト", 4, 1)
'h1要素のテキストデータ取得
Sheets("リスト").Cells(r, 1) = tagValue(objIE, "h1", "", "outerHTML")
'p要素のテキストデータ取得
Sheets("リスト").Cells(3, c) = tagValue(objIE, "p", "p-value", "innerText")
※ドラッグ(スワイプ)すると全体を確認できます。
こちらでは、「searchRCサブルーチン」でキーワード「h1要素テキスト:」の行番号とキーワード「p要素テキスト:」の列番号を取得しています。今回取得した値はr=4、c=3となります。
そして、cells(3, 1)にh1要素をcells(3, 3)にp要素のテキストを入力しています。
こちらも非常によく利用される機能ですので、是非活用してください。
次の記事: VBAでIE操作に役立つBasic認証自動ログイン >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
↑VBAのIE操作で分からない事があればこちらの掲示板よりご質問ください。
ExcelのVBA初心者入門↑こちらはVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります。
こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。
こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。
こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。
こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。
こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。
こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。