アプリ版:「スタンプのみでお礼する」機能のリリースについて

使用アプリ:Excel2007
VBAでオートシェイプ内の文字列を検索し、見つけた文字列の色を赤に変えたいと思っています。
検索文字列がアルファベットの場合は全角、半角、大文字、小文字の区別はなくしたいです。

検索文字列を「abc」 とし、オートシェイプ内に「abc(半角小文字)、abc(全角小文字)、ABC(半角大文字)、ABC(全角大文字)」という文字列があった場合、アルファベットだけが全て赤になるようにしたいのですが、ご教示いただけますでしょうか。

よろしくお願いします。

質問者からの補足コメント

  • tom04さん、さっそくのご回答ありがとうございます。
    私の質問の仕方が悪かったようで申し訳ありません。
    ある特定の単語(漢字、ひらがな、カタカナ、アルファベット)を検索し、
    オートシェイプ内に合致した文字列があった場合は、それを赤文字にしたいのです。
    画像は実行後のイメージです。
    お手数をおかけしますが、よろしくお願いします。

    「Excel VBAでオートシェイプ内の文」の補足画像1
    No.1の回答に寄せられた補足コメントです。 補足日時:2016/09/20 17:04

A 回答 (2件)

No.1です。



画像通り検索文字列をB3セルに入力するとします。
シートモジュールにしてください。

Sub Sample2()
Dim k As Long, myStr As String, mySp As Shape, myRng As Variant
If Range("B3") <> "" Then
myStr = StrConv(Range("B3"), vbNarrow)
For Each mySp In ActiveSheet.Shapes
Set myRng = mySp.TextFrame2.TextRange
If InStr(StrConv(myRng, vbNarrow), myStr) > 0 Then
For k = 1 To Len(myRng)
If Mid(StrConv(myRng, vbNarrow), k, Len(myStr)) = myStr Then
myRng.Characters(Start:=k, Length:=Len(myStr)) _
.Font.Fill.ForeColor.RGB = RGB(255, 0, 0)
End If
Next k
End If
Next mySp
End If
End Sub

※ 質問文に
>全角、半角、大文字、小文字の区別はなく・・・
とありますので、少し面倒なコードになっています。
そして、複数含まれていても対応させるため
1文字ずつ舐めるように検索しています。m(_ _)m
    • good
    • 0
この回答へのお礼

大文字小文字が判別は、vbNarrowのあとに + vbLowerCase を付加することで解決しました。
大変助かりました。
どうもありがとうございました。

お礼日時:2016/09/21 12:20

こんにちは!



VBAになりますが、一例です。

Sub Sample1() 'この行から//
Dim k As Long, mySp As Shape, myStr As String
For Each mySp In ActiveSheet.Shapes
For k = 1 To Len(mySp.TextFrame2.TextRange.Characters.Text)
myStr = Mid(StrConv(mySp.TextFrame2.TextRange.Characters.Text, vbNarrow), k, 1)
If myStr Like "[A-Z,a-z]" Then
mySp.TextFrame2.TextRange.Characters(Start:=k, Length:=1) _
.Font.Fill.ForeColor.RGB = RGB(255, 0, 0)
End If
Next k
Next mySp
End Sub 'この行まで//

こんな感じではどうでしょうか?m(_ _)m
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています