キーワードが含まれる行(列)取得「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操作で分からない事があればこちらの掲示板よりご質問ください。

ExcelのVBA初心者入門

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

目次

IE操作に便利なツール

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

IEのメソッド・プロパティ

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

IE操作のVBA関数

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

IE操作のステートメント

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

IE制御のVBAコード

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

役立つVBAコード

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