- ベストアンサー
テキストの文字列検索で、検索した文字の色を変える方法は?
教えてください。 テキストボックスの内容を読み込んで、指定した文字列を検索するというコードを書いているのですが、 jl = InStr(i, Text2.Text) If (jl > 0) Then のように、テキストを一行ずつOpen~で読み込んで、Instrで指定した文字があるかどうかを判定しています。 これでは、検索した文字があったかどうか、という判定はできますが、検索あるいは置き換えした文字がどれであるか、またトータル何件あったかが分かりません。 検索ならば、一つずつ対象文字を発見したときにその文字の場所で止めて、またその文字の色を変える方法が分かりません。 また、置き換えならば、全文対象に一気に置き換えて、その置き換えた文字の色を変えて分かりやすくしたいのですが、その方法が分かりません。 検索あるいは置き換えの方法はマニュアルにあるのですが、その場所で止めて色を変えるというコードがなかなか載っていません。 どなたか教えてくださいませ。 お願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
テキストボックスの一部分の文字の色を変える、ということは不可能です。 (テキストボックスだけで実現するのは)諦めてください。 Text1.SelStart = 15 Text1.SelLength = 4 Text1.SetFocus ただし、こんな風に、任意の部分だけを選択状態にするという手があります。 (上の例では、15文字目から4文字分が選択されます) テキストボックスなら、これが理想的だと思います。 どうしても一部分だけの色を変更したい場合は、 リッチエディットで無理やり実現させるか、 自前で、独自のテキストボックスのようなものを作成するしかないと 思います。 後者の方法が一般的ですが、VBでは現実的ではない方法です。 また、前者は大変面倒です。
その他の回答 (1)
- yuizuian
- ベストアンサー率42% (103/245)
>Text1.SelStart = 15 >Text1.SelLength = 4 >Text1.SetFocus > >この例では15文字目から4文字分が選択される、とありますが、 >その何文字目から何文字までが検索の対象文字列であるのかという >ことは検索する文字列によって変わってくると思うのですが、 >どのように指定してやればいいのでしょうか? InStr関数を使われてはどうでしょう? 文字列を検索して最初に見つかった位置を返しますので、 その位置と文字列長さえあれば、選択状態にするのも簡単ですよね。 使用方法はMSDNに書かれています。
お礼
ご回答ありがとうございます。うっかり見落としていました。Instrは位置を返すんですね。ということは、その位置から「検索対象文字列」の長さを調べて、その文字数分を選択すればいいんですね。 バッチリとはいえませんが、試行錯誤しながらならなんとかできそうな気がしてきました。 やってみます。 ありがとうございました!!!
お礼
早速のご回答ありがとうございます。 Text1.SelStart = 15 Text1.SelLength = 4 Text1.SetFocus この例では15文字目から4文字分が選択される、とありますが、 その何文字目から何文字までが検索の対象文字列であるのかという ことは検索する文字列によって変わってくると思うのですが、 どのように指定してやればいいのでしょうか? 初心者ですみません・・・。