正規表現を用いてHTTPタグを除去するVBAを記述する

フィードのデータは、ブラウザ表示用にHTML形式になっている場合があります。Excelでは、HTMLタグがそのまま表示されてしまいますので、<~>の形の文字列を削除する必要があります。VBA単独では、*などのワイルドカードを使った置換もできませんが、VBScriptのモジュールによって、正規表現を利用できます。

正規表現とは、ワイルドカードよりも強力な検索機能で、下表のように様々なパターンを表現することができます。正規表現はテキストエディタなどで、文字列を一括変換する際にも利用できますので、覚えておくとお得です。

表3.正規表現の主なパターン

表現意味 表現例 一致する文字列 一致しない文字列
*直前の文字0字以上 "fe*d" "feed"、"fd" "fee"
+直前の文字1字以上 "fe+d" "feed"、"fed" "fd"
?直前の文字0字または1字 "fe?d" "fd"、"fed" "feed"
.任意の1文字 "f.+d" "feed"、"food"、"find" "fee"
(パターン)パターン文字列 "(fed)" "fed" "feed"
x|yxとyのどちらか "f(e|o)*d" "fed"、"food" "find"
{n}直前の文字n字 "fe{1}d" "fed" "feed"、"fd"
{n,}直前の文字n字以上 "fe{2,}d" "feed"、"feeed" "fed"
{n,m}直前の文字n字以上m字以下 "fe{1,2}d" "fed"、"feed" "fd"、"feeed"
[xyz]x,y,zのいずれか "beg[iau]n" "begin"、"began"、"begun" "begon"
[^xyz]x,y,z以外の文字 "s[^eou]t" "sit"、"sat" "set"
[x-z]xからzまでの文字 "sa[k-n]e" "sale"、"same" "safe"、"save"
[^x-z]xからz以外の文字 "sa[^k-n]e" "safe"、"save" "sale"、"same"
\d数字。[0-9]と同じ "W\dC" "W3C" "WBC"
\D数字以外。[^0-9]と同じ "W\DC" "WBC" "W3C"
\w英数字とアンダーバー。[A-Za-z0-9_]と同じ "W\wC" "W3C"、"WBC" "W C"
\W英数字とアンダーバー以外。[^A-Za-z0-9_]と同じ "W\WC" "W C" "W3C"、"WBC"

この他、制御文字のパターンとしては、\t(タブ文字)、\n(改行文字)、\r(キャリッジ リターン文字)、\s(スペース、タブなどの空白文字、[ \f\n\r\t\v]と同じ)、\S(空白文字以外、[^ \f\n\r\t\v]"と同じ)などがあります。詳しくは、下記のURLも参考にしてください。

http://msdn.microsoft.com/ja-jp/library/cc392403.aspx

VBScriptの正規表現モジュールを利用しますので、「Microsoft VBScript Regular Expressions 1.0」の参照設定を追加しておいてください。

図6.正規表現の参照設定

[リスト2]HTMLタグを除去するユーザ定義関数

 Private Function cdataConv(str As String) As String

    Dim regEx As New RegExp
    regEx.Pattern = "<[^>]*>"
    regEx.Global = True
    cdataConv = regEx.Replace(str, "")

 End Function

まず、正規表現を利用するためのRegExpオブジェクトを生成したら、HTMLタグの<~>パターンとしてPatternプロパティに"<[^>]*>"を設定します。 任意の文字の0文字以上、ということで"<.*>"でも良さそうですが、"."は>にも合致するため、例えば「<P>あいうえお</P>」全体にも合致してしまいます。<P>と</P>だけに合致させるには、間の文字すべてが>でない条件が必要で、これは[^>]と表されます。 なお、^は[]、()内で用いると否定の意味になりますが、単独だと行頭を表すパターンになりますので[]も必要です。 次に、globalプロパティにTrueを設定します。これを省略すると、最初の1パターンにしか合致しません。 最後に、Replaceメソッドを用いて、元の文字列<~>のパターンをすべて、""(空文字)に置換します。

以上で完成です。「更新する」ボタンをクリックして、更新データが表示されれば成功です(完全なコードは、ここからダウンロードしてください)。

まとめ

ExcelによるRSS1.0形式のフィードの読み込みはいかがでしたか。RSS1.0またはRSS2.0形式であれば、URLを変更することにより、様々なニュース配信サイトの情報を収集できます。

WINGSプロジェクト 遠藤 存著/山田祥寛監修
WINGS プロジェクトについて
テクニカル執筆プロジェクト(代表山田祥寛)。海外記事の翻訳から、主にWeb開発分野の書籍・雑誌/Web記事の執筆、講演等を幅広く手がける。2011年5月時点での登録メンバは35名で、現在も一緒に執筆をできる有志を募集中。