• ベストアンサー

メモ帳のような文字列検索

 リッチテキストを使ってVBの勉強用にMDIテキストエディタを作っています。  今、文字列の検索と置換部分を作っているのですが、このときメモ帳の検索で使うようなものはどうやって作ればいいんでしょうか。  つまり、検索用のフォームを出したまま、テキスト部分を選択状態(色を反転させた状態)にさせたり、下から上への検索をしたいのですが出来ません。  一応、リッチテキストのFind、もしくはInStr関数を使って、上から下への簡単なものは出来ているのですが、下から上には検索できませんし、検索した後フォーカスをリッチテキストにしなければ、検索した文字列が選択状態にさせられません。  下から検索させるにはInStrRev関数があることは分かったのですが、これだとFindでは出来る『完全一致する単語のみ検索』などが使えなさそうです。  まぁ、これは特にどうでもいいのですが(バイナリモードにすれば大文字小文字の区別は出来ますし)、検索用フォームを手前にさせることはどうやっても出来ません。  色々なサイトにある、『常に手前にフォームを表示』というものも見つけたのですが、これをやっても上手くいきませんし、一旦リッチテキストにフォーカスを移してから再び検索用フォームにフォーカスを移しても選択状態は消えてしまいます。  どうにかして、Findと同等に下から上へと検索させたり、検索用のフォームを手前にさせたまま続けて検索させるということをさせたいのですが、その方法があれば教えてください。 --------- 開発環境 VB6.0SP5 WinME

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 検索フォームを常に前面に出し、そのまま元のフォーム(リッチテキストボックスのあるフォーム、オーナーフォーム)を操作するには、 検索フォーム.Show 0, オーナーフォーム名 とします。

ikazuti
質問者

お礼

 ありがとうございます。オーナーフォームなるものの存在をすっかり失念していました。  おかげで、上手いこと出来ました。

その他の回答 (1)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

反転したい部分をvbHighlight, vbHighlightTextで色付けすればよいのでは?

ikazuti
質問者

お礼

 いちいちVBの処理で反転させるのはちょっと手間が……  でも、考え方としては他のものに応用できそうです。ありがとうございます。

関連するQ&A

  • Accessで文字列検索

    Accessであるテキストボックスに入ってるデータから任意の文字列の位置を知りたくて、 関数を使ってみました。 使った関数はFINDとSEARCHですがどちらもダメでした。 Accessで使える文字列検索関数はないのでしょうか?

  • 文字列検索の参照文字列の指定について

    Excelでセルに任意の文字列をペーストします。そのセルは別のブックにリンクしているのでペーストする度にリンク先のセルでは文字列が更新されます。リンク先のブックにはワークシートが10あっていづれかのシートのA列にその文字列がある事になっています。更新された文字列を検索する作業を繰り返すのでマクロで組み込もうと思ったのですがFIND関数にしても、VBでCell.Find(What:=....と書くにも参照する文字列を直接指定してやらないと動きません。参照する文字列が相対的に変化するので「特定のセルの中に入力された文字列」を参照してブック内を検索したいということなのですが、実現するにはどうしたらようでしょうか?

  • 文字列の比較について

    お世話になります。 次のような文字列の比較を考えているのですが 123456789 123456ABC89 この場合、ABCを7に置き換えると文字列が一致する ので、「7」と「ABC」を取り出したいのですが、 どのように調べたらよいでしょうか? VBはいろいろと関数も用意されているので、現在は instrとinstrrevを使って相違のある場所を調べようと していますがなかなか思うようにいきません。 お願いします。

  • VBA/FIND関数を使っての先頭文字列の検索方法

    エクセルVBAにてFIND関数を使って、 文字列検索⇒コピー&ペーストのマクロを作成しているのですが、 どうしても、先頭文字列から検索をする方法がわかりません。 たとえば、 あいうえお いうえおあ おあいうえ えおあいう という文字列から「あいう*」を検索したい場合、 1行目だけを抽出したいのですが、 1,3,4行目が抽出されてしまいます。 find関数では先頭文字からの検索はできないのでしょうか? もし、不可能な場合、先頭文字からの検索を行うにはどのように行えばよいでしょうか? アドバイス、よろしくお願いいたします。

  • [Javascript]onFocusで文字列選択状態にするには。

    質問が立て続けで申し訳ありません。 テキストボックスの中に文字列が入っているとします。 TABキーで移動し、その文字列の入ったテキストボックスにフォーカスが移動しますとその中に書かれたテキストボックスが選択された状態でフォーカスがいきますよね? 単純に .focus(); で移動させると選択状態にならず、書き換えたい場合は一回一回削除しなくてはいけません。 onFocusや.focus();の際に文字列を選択状態にすることは出来ませんか? 宜しくお願い致します。

  • ブック全体の文字列検索について

    Excelでセルに任意の文字列をペーストします。そのセルは別のブックにリンクしているのでペーストする度にリンク先のセルでは文字列が更新されます。リンク先のブックにはワークシートが10あっていづれかのシートのA列にその文字列がある事になっています。更新された文字列を検索する作業を繰り返すのでマクロで組み込もうと思ったのですがFIND関数にしても、VBでCell.Find(What:=....と書くにも参照する文字列を直接指定してやらないと動きません。参照する文字列が相対的に変化するので「特定のセルの中に入力された文字列」を参照してブック内を検索したいということなのですが、実現するにはどうしたらようでしょうか?と質問して moji = "B1" Set c = Range("A:A").Find(What:=moji, LookIn:=xlValues, LookAt:=xlWhole) If Not c Is Nothing Then c.Select というコードをしめしていただきました。このままだと検索対象がRangeオブジェクトになっているのでActivesheet上でしか検索がかからないのでCellsにすればブック内のすべてのシートに検索がかけられるかな?と思っていたのですがエラーがでます。ブック内を検索範囲に入れるためにはどうしたらよいでしょうか?

  • 文字列検索で

    よろしくお願いします。 文字列検索instr関数で、特定文字(スペース)でない文字を検索したいのですが、どのようにしたらいいですか? instr関数では、できないのでしょうか? たとえば、 文字列" osietegoo "  →  3 文字列"    situmon"  →  7 スペースでない文字が出現する位置を知りたいです。 instr(文字列,"o")ではなく、" "ではない、、、としたいのですが、できますか?

  • VBE上の文字検索で「パターン文字列が不正です」

     今晩は、質問させていただきます。どうぞよろしくお願いいたします。  環境:Win7 Home SP1      Excel2007 でございます。  VBエディタ上のプログラムの文字列をCtrl+Fから検索いたしますと、 何故か「パターン文字列が不正です。」のメッセージボックスが出てまいります。 挙動といたしましては、 ・検索しております文字列は、明らかにコード上にあるものでございます。 ・テキストエディタ(秀丸)上に全コードをコピーしてみると、その上での検索は普通にできます。  (→おそらくVBエディタ上のみでの不具合。) ・検索する文字によっては検索できたりもしますが、それらも何故か  検索結果(背景が青くなる文字列)が後ろへずれております。(全角1文字もしくは2文字分)  →添付図のようになります。 ・全角漢字も半角英字も検索ができなかったり、検索結果がズレたり致します。  「パターン文字列が不正です」で検索しておりますと、「VBAによる検索」の際に、LKEを使うとこのようなコメントが出るようでございますが、今回のような「VBエディタ上のコード検索」は見つけられませんでした。。。  皆様のPC上でこのような挙動をしたことはございますでしょうか??  もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • 文字列の検索について

    RichTextBoxの文字列の中の太字にした文字列や、斜体にした文字列などを検索したいのですが、InStrでできますか? もしくは他にやり方があったら教えてください。お願いします。ちなみにVB6.0です。

  • リストボックス内検索

    マクロ初心者です。 (エクセル2003を使用) ユーザーフォームにテキストボックスとリストボックスを作り、 リストボックス内のデータ(2列;ナンバーと文字、2500行くらい)の検索をテキストボックスに入力した文字で行いたいのですが、どうしていいのかわかりません。 ワークシート上では、Find関数を使ってできるのですが、リストボックス内の検索では使えませんか? inStr関数を使うのでしょうか? 検索がされたときのスクロールもできるといいのですが…。 よろしくお願いいたします。

専門家に質問してみよう