VBAでmetaタグデータを抽出するためのサブルーチン「metaValue」

VBAのIE(InternetExplorer)制御に便利なサブルーチンを紹介しています。

「metaValueサブルーチン」の詳しい解説については、以下より確認してください。

データ抽出やインターフェースの自動化にしても必ず最初は指定したURLをIEで起動させるところから始まります。 こちらの処理は何度も利用されるプログラムですので、そのような処理をサブルーチン化させると色々なメリットが生まれます。ここでは、そのようなサブルーチン化のメリットも含めて解説しています。

サブルーチンとは

サブルーチンとは、プログラム処理の中で繰り返し利用されるルーチン作業をモジュール化(部品化)してまとめたものになります。また、呼び出す側をメインルーチンと呼ぶのに対して「サブルーチン」と呼ばれます。

メリット

繰り返し利用されるルーチン作業をモジュール化(部品化)することで、同じ処理のプログラムを何度も書く手間が省け、プログラムも全体的に見やすくなります。これによりプログラムソースの可読性や保守性を高く保つことができます。

関連性の高いサブルーチン

Function metaValue(objIE As InternetExplorer, _
                    name As String) As String
                    
    If objIE.document.getElementsByName(name).length <> 0 Then
    
        metaValue = objIE.document.all(name).content
        
    End If

End Function

こちらは戻り値を返すFunctionステートメントに引数を2つ設定しているmetaValueサブルーチンになります。こちらの構文と引数の内容は以下になります。尚、引数はすべて参照渡しで渡されます。

metaValue("IEオブジェクト","name属性の名前")
構文metaValue(objIE,name)
引数名データ型内容値の事例初期値省略
objIEInternetExplorerInternetExplorerオブジェクトを指定します。objIE,objIE2×
nameStringcontent属性値を取得するname属性の名前を文字列で指定します。"keywords"×

引数objIEは必須項目で、content属性値を抽出するnternetExplorerオブジェクトを指定します。InternetExplorerオブジェクトを引数に設定することで、複数のオブジェクトを処理することができます。次の引数nameも必須項目で、抽出するmeta要素のname属性の名前を設定します。

If objIE.document.getElementsByName(name).length <> 0 Then
    
        metaValue = objIE.document.all(name).content
        
    End If

まずこちらでは、If~Then~Elseステートメントを利用して指定したname属性が存在するかのチェックを行っています。条件式の「objIE.document.getElementsByName(name).length」が指定したname属性の要素数になります。

1つ1つ説明すると最初にInternetExplorerオブジェクトのdocumentプロパティを利用してHTMLドキュメントのオブジェクト(Documentオブジェクト)を取得します。

次にDocumentオブジェクトのgetElementsByNameメソッドを利用してname属性が引数nameの要素オブジェクトを取得します。そして、要素数を取得するLengthプロパティを利用して、引数nameの要素数を取得します。

条件式は算術演算子で要素数が0以外の場合にIf~Then~Elseステートメント内の処理を実行しますので、要素数が「0」つまり指定したname属性が存在しない場合は処理されません

次に指定したname属性が存在する場合は、「metaValue = objIE.document.all(name).content」を実行します。こちらは、content属性値を取得するcontentプロパティを利用して指定したname属性の要素オブジェクトのcontent属性値を取得します。

そして、取得した値を戻り値metaValue代入演算子で格納したら処理が完了します。