HTMLファイルをWordに貼り付け、その中のalt属性からtitle属性をつくりだそうという妄想の結果物です。
これまで、チカラ技でできていたのを、少しばかり「正規表現」などというスマートなやり方にできないものかと、ちょっと妄想しました。
alt="写真説明" を VBA正規表現で一般的に表すと "alt=""[^""]*"""
なにか普段見ることない文字並びです。「"」が3個続いていたりして、わかりにくいといったらありません。一番外側は、普段使う囲みです。でメンドウなのがその内側にあるいくつかの「"」です。
「正規表現」をしかと勉強したものではありませんので、ひょっとして条件が異なれば、うまくいかないかも…ビェーン。
alt属性内の「写真説明」は具体的なのですが、それを対象にして1回だけ置換するというのであれば簡単です。しかし、一般的に考えると、その「写真説明」に該当する部分は「[^""]*」(赤字部分が該当部分)です。つまり、属性値となる「"」以外の文字列があるやなしや続いた後、次に出てきた「"」(属性値終了側の「"」)までを変数に取り込む、というようなことになるみたいです。結果的にそうなっているので、どうもこれが正解なのか、もっと厳密な書き方があるのか、爺にはわかりませぬ…。どなたかお教えください…。
正規表現でマッチした回数分、必要な置換作業をRePlaceで実行
Sub タグ属性置換() 'alt属性を利用して、title属性をつくる:正規表現利用 '全文を変数wStoryに格納 Dim wStory As String Selection.WholeStory wStory = Selection.range.Text '正規表現の用意 Dim re As RegExp Set re = New RegExp re.Pattern = "alt=""[^""]*""" '正規表現:alt属性のダブルクォーテーション内を検索対象にする re.Global = True '該当全件対象 Dim i As Integer '循環用 Dim mc As MatchCollection '検索マッチコレクションの宣言 Set mc = re.Execute(wStory) '検索対象文字全文の設定 Dim m As Match '検索マッチの宣言 Dim outputTxt As String '出力文字列格納変数 For i = 0 To mc.Count - 1 '循環==開始 Set m = mc.Item(i) 'mcの内容をmに代入 '↓変数reのwStoryのなかで、変数mの文字列をキーとして検索し、 '↓ヒットしたら、mの内容を複製しtitle属性として加え、結果をoutputTxtに収める outputTxt = re.Replace(wStory, m.Value & " title" & Right(m.Value, Len(m.Value) - 3)) Next '循環==終了 '置換結果の貼り付け Selection.range.Text = outputTxt '解放 Set re = Nothing Set mc = Nothing Set m = Nothing Selection.HomeKey End Sub
まあ、なんとなくできた、という感じです。変数wStoryに読み込んだなかを、検索マッチした位置に焦点をあて、その文字列を 検索マッチ文字列からとりだし、title属性などを仕立てあげて、置換し、変数outputTxtに格納する、という流れです。
あのぉ~、かなりへっぴり腰で作ったです。きっともっとスマートなやり方があるでしょうね。よろしかったら、お教えください。ペコリ
事前に正規表現を使うのを設定しなければ…
開発→VBE→ツール→参照設定→Microsoft VBScript Regular Expressions 5.5 にチェックを入れる
それから、わかっている人にはどうでもいいことですが、空白のalt属性値だったら、とか、すでにtitle属性が記入されている場合、ファイルを次々と巡回する、などなど、本来気にする必要のあることをスルーしてます。すみません…。
GREEN HOUSE SATA - eSATA/USB変換ケーブル GH-USES-SATA
- 出版社/メーカー: グリーンハウス
- 発売日: 2008/12/01
- メディア: Personal Computers
- クリック: 2回
- この商品を含むブログ (1件) を見る