キーワードが含まれる行(列)取得「searchRC」の解説

前回は最終行(列)の取得について解説しましたが、今回は、該当するキーワードの行(列)を取得するサブルーチンの説明をします。
こちらがどのように利用されるか開発依頼があった実例で紹介するとツイッターのフォロー・フォロワー数をチェック日の行に入力するであったり、検索上位サイトで特定キーワードが存在するページの数を算出など様々な利用方法があります。
該当するキーワードの行(列)取得は便利な機能ですので、機会がありましたらご利用ください。

スポンサー リンク

最終行(列)取得のサブルーチン


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つが設定されています。

引数名データ型内容値の事例初期値省略
keywordString検索キーワード文字列"h1要素テキスト:"×
sheetNameStringシート名文字列"リスト"ActiveSheet.Name
rcNoInteger対象の行・列番号10
TypeRCString行・列の選択文字列"R","C""R"
searchRC("検索キーワード文字列","シート名文字列","対象の行・列番号","行・列の選択文字列")

こちらは、「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認証自動ログイン >>

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

VBAのIE制御についてのQ&A掲示板

↑エクセルVBAのIE(InternetExplorer)操作で分からない事があればこちらの掲示板よりご質問ください^^

ExcelのVBA初心者入門

↑こちらはExcelのVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

VBAでIE(InternetExplorer)制御の準備

【ダウンロード】IE操作に便利なツール

こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。

IEオブジェクトのメソッド・プロパティ

こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。

IE操作に利用されているVBA関数

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。

IE操作に利用されているステートメント

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。

IE(InternetExplorer)制御のVBAコード

こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。

ExcelのVBAで作成した役立つVBAコード

こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。