#308 テキストボックス内の検索文字列を反転表示する方法 フォーム、VBA

エディタやワープロの検索機能と同様に、テキストボックス内の文字列(特にメモ型の長い文字列)から指定の文字列を検索、さらに見つかった文字列を反転表示する方法です。

次の例では、フォームに"txt検索キーワード"という名前のテキストボックスを配置し、ここに検索するキーワードを入力します。また、"cmd検索"というコマンドボタンを配置し、このボタンをクリックすることによって、テキストボックス"メモ"内の先頭からキーワードの検索が実行されます。さらに、"cmd次を検索"という名前のコマンドボタンによって、前回見つかった位置以降の範囲に対して検索をかけます。

文字列内から特定の文字を探すには、「InStr」関数を使います。これによって、検索対象の文字列全体の中での検索キーワードの位置が返されます(見つからない場合はゼロが返されます)。

また、テキストボックスコントロールの「SelStart」プロパティ「SelLength」プロパティを組み合わせることで、任意の位置(SelStart)から指定文字数分(SelLength)の文字列範囲を選択することができます。範囲選択することによって自動的に反転表示となります。
Option Compare Database
Option Explicit

Private pstrKeyWord As String
Private pintPos As Integer
Private pintStartPos As Integer

Private Sub cmd検索_Click()
'[検索]ボタンクリック時

  '検索するキーワードを取得
  pstrKeyWord = Me!txt検索キーワード
  '検索開始位置を設定
  pintStartPos = 1
  'テキストボックス内の文字列を先頭から検索
  pintPos = InStr(pintStartPos, Me!メモ, pstrKeyWord)
  If pintPos > 0 Then
    '見つかったときはその範囲を選択して反転状態にする
    With Me!メモ
      .SetFocus
      .SelStart = pintPos - 1
      .SelLength = Len(pstrKeyWord)
    End With
    '[次を検索]に備えて検索開始位置を進める
    pintStartPos = pintPos + Len(pstrKeyWord)
  Else
    '見つからなかったとき
    Beep
    MsgBox pstrKeyWord & " は見つかりませんでした!", _
            vbOKOnly + vbInformation
  End If

End Sub


Private Sub cmd次を検索_Click()
'[次を検索]ボタンクリック時
  
  '前回の続きからテキストボックス内を検索
  pintPos = InStr(pintStartPos, Me!メモ, pstrKeyWord)
  If pintPos > 0 Then
    '見つかったときはその範囲を選択して反転状態にする
    With Me!メモ
      .SetFocus
      .SelStart = pintPos - 1
      .SelLength = Len(pstrKeyWord)
    End With
    '[次を検索]に備えて検索開始位置を進める
    pintStartPos = pintPos + Len(pstrKeyWord)
  Else
    '見つからなかったとき
    Beep
    MsgBox pstrKeyWord & " は見つかりませんでした!", _
            vbOKOnly + vbInformation
  End If

End Sub

[検索]ボタンをクリックしたとき
[検索]ボタンをクリックしたとき

続けて[次を検索]ボタンをクリックしたとき
続けて[次を検索]ボタンをクリックしたとき
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved