【至急】PowerPointで正規表現マッチした部分に色を付けたい【お願い】


PowerPoint 2007のドキュメントで、正規表現に一致する部分のフォントに色を付けたいと考えています。たとえば、黒い四角で始まって白い四角で終わる最短マッチ、"■[^□]□" に対して、赤いフォントを適用する、などです。

今のところできているコードをコメント欄に書き込みます。正規表現パターンにヒットすることまでは確認できましたが、ヒットした後、ヒットした場所にフォントの色を設定する方法がわかりません。

どのようなコードを書けばいいでしょうか。まったく新しいコードでこの問題を解決できる場合は、流用せずに新規のコードを教えてください。よろしくお願いします。ヒットした文字列を取り出して、通常の検索にかけて範囲選択してフォントの色を変えるのでしょうか・・・

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/07/31 11:47:26
  • 終了:2013/08/07 11:50:04
id:Nigitama

Sub main()
Dim RegExp As Object '正規表現オブジェクト
Dim osld As Slide 'スライド
Dim oshp As Shape 'シェイプ
Dim strInput As String '検索対象文字列
Dim b_found As Boolean 'ヒット成否

'正規表現のオブジェクトを生成してパターンをセット
Set RegExp = CreateObject("vbscript.regexp")
With RegExp
.Global = True
.Pattern = "■[^□]□"
End With

'プレゼンテーションの各スライドをループ
For Each osld In ActivePresentation.Slides
'スライド内の各シェイプをループ
For Each oshp In osld.Shapes
'シェイプにテキストフレームがあり
If oshp.HasTextFrame Then
'さらにテキストが含まれている場合
If oshp.TextFrame.HasText Then
'そのテキストを検索対象文字列にセット
strInput = oshp.TextFrame.TextRange.Text
'検索対象文字列にパターンが含まれるかどうか
b_found = RegExp.test(strInput)
'含まれる場合
If b_found = True Then
'★ヒットした部分を範囲選択して色を付けたい!★
End If
End If
End If

Next oshp
Next osld
End Sub

回答(0件)

回答はまだありません

  • id:Mook
    色を付けるところだけですけれど、こんな感じでしょうか。
         If oshp.TextFrame.HasText Then
            'そのテキストを検索対象文字列にセット
            strInput = oshp.TextFrame.TextRange.Text
            '検索対象文字列にパターンが含まれるかどうか
            Set res = RegExp.Execute(strInput)
            '含まれる場合
            If res.Count > 0 Then
               '★ヒットした部分を範囲選択して色を付けたい!★
               For i = 0 To res.Count - 1
                  oshp.TextFrame.TextRange.Characters(InStr(strInput, res.Item(i)), Len(res.Item(i))).Font.Color = RGB(255, 0, 0)
               Next
            End If
         End If

    正規表現のパターンも
         .Pattern = "■.*?□"
    かな?
  • id:Nigitama
    Mookさん!ありがとうございます。
    回答リクエストを出したのに締め切ってしまって申し訳ありません。
    本当に遅くなりましたが、動作確認ができました!
    帰省前にお返事ができて良かったです。

    ささやかすぎますが、500ptを遅らせていただきます。
    今後ともどうぞよろしくお願いします。
  • id:Mook
    お役に立ったのであればよかったのですが。
    ポイント送信ありがとうございました。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません