VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

リンク元へ戻ります。 ダイアログ関係のメニュー
1.コモンダイアログを使ってカラー・フォント等のダイアログボックスの使用例
2.ファイルを開く及びファイルを保存ダイアログボックスを表示する
3.検索・置換をする(ダイアログボックスもどきを作成)
4.エクスプローラーの検索ダイアログを表示する
5.プリンターの設定]ダイアログボックスを表示する
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.その他、当サイト内に掲載のダイアログボックスに関するサンプル


3.検索・置換をする(ダイアログボックスもどきを作成)
1.検索・置換をする(ダイアログボックスもどきを作成)
2.
3.
4.
5.
6. 

 下記プログラムコードに関する補足・注意事項 
動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6)
Option :[Option Explicit]
参照設定:追加なし
使用 API:
なし
その他 :
    :
このページのトップへ移動します。 1.検索・置換をする(ダイアログボックスもどきを作成)

フォームを2個用意しておいて下さい。
Form1に記入
(テキストボックスとコマンドボタンを各1個貼り付け)

Option Explicit

Private Sub Command1_Click()
  '検索対象テキストを表示
  frmSearch.txtKeikahyoji.Text = "1234567890" & vbCrLf _
        & "あいうえおABCDEFGH" & vbCrLf _
        & "1234567890亜意卯得尾 Visual Basic" _
        & "あいうえおABCDEFGH"
  frmSearch.Show 0, Me
End Sub

Private Sub Form_Load()
  Text1.Text = "1234567890" & vbCrLf _
        & "あいうえおABCDEFGH" & vbCrLf _
        & "1234567890亜意卯得尾 Visual Basic" _
        & "あいうえおABCDEFGH"
End Sub


もう一方のフォームに記入して下さい。
 dialogue03_01
  図のようにコントロールを貼り付けて下さい。

Option Explicit   'SampleNo=059  2002.05.13

Private lngOption As Long


Private Sub Form_Load()
  'フォームの表示位置
  Me.Move 0, 0, 7300, 4860
  'Me.StartUpPosition = 2 にプロパティを設定する
  fraOption.Visible = False
End Sub


Private Sub cmdSearchStart_Click()
'検索開始
  lngOption = 0
  '検索処理へ結果をフォーム1のテキストボックスに表示
  Form1.Text1.Text = fSearch(txtKeikahyoji.Text, _
              txtKensaku.Text, txtOkikae.Text)
  'フレームを非表示に
  fraOption.Visible = False
End Sub


Private Function fSearch(ByRef Taisyotxt As String, _
            ByVal Searchtxt As String, _
            ByVal Okikaetxt As String) As String

  Dim strTaisyo  As String '検索対象文字列
  Dim strSearch  As String '検索文字列
  Dim strOkikae  As String '置き換える文字列
  Dim lngTaisyoLen As Long  '対象文字数
  Dim lngSearchLen As Long  '検索文字数
  Dim lngOkikaeLen As Long  '置換え文字数
  Dim lngBasyo   As Long  '検索開始文字数
  Dim lngHakken  As Long  '検索文字が見つかった位置
  Dim lngCount   As Long  '検索文字が見つかった数
  Dim strMsgNull  As String 'メッセージ
  Dim strMsgNoFind As String 'メッセージ

  '文字列の代入
  strTaisyo = Taisyotxt
  strSearch = Searchtxt
  strOkikae = Okikaetxt

  '文字数の測定
  lngTaisyoLen = Len(strTaisyo)
  lngSearchLen = Len(strSearch)
  lngOkikaeLen = Len(strOkikae)

  '検索文字や対象文字が入力されていない場合の処理
  If lngTaisyoLen = 0 Or lngSearchLen = 0 Then
    fSearch = strTaisyo
    strMsgNull = "検索・置換文字列を入力して下さい"
    MsgBox strMsgNull
    Exit Function
  End If
  '検索開始文字位置(初期値)
  lngBasyo = 1

  '検索文字がある間繰り返す
  Do While InStr(lngBasyo, strTaisyo, strSearch) <> 0
    '検索開始
    lngHakken = InStr(lngBasyo, strTaisyo, strSearch)
    '見つかったら
    If lngHakken >= 1 Then
      '見つかった場所を選択
      frmSearch.fraOption.Visible = True
      frmSearch.txtKeikahyoji.SetFocus
      frmSearch.txtKeikahyoji.SelStart = lngHakken - 1
      frmSearch.txtKeikahyoji.SelLength = Len(strSearch)
      'コマンドボタンがどれか押されるまで待機
      Do While lngOption = 0
        fraOption.Visible = True
        DoEvents
      Loop

      Select Case lngOption
        Case 1  '次を検索の場合
          lngOption = 0
          lngCount = lngCount + 1
          lngBasyo = lngHakken + lngSearchLen
          frmSearch.txtKeikahyoji.Text = strTaisyo
        Case 2  '置換えの場合
          '置換えが発生した場合文字数を再調査
          lngTaisyoLen = Len(strTaisyo)
          '文字列を発見した場所の前後に置き換え文字をつなぐ
          strTaisyo = Left$(strTaisyo, lngHakken - 1) & _
            strOkikae & Mid$(strTaisyo, lngHakken + _
            lngSearchLen, lngTaisyoLen - lngHakken + _
            lngOkikaeLen)
          '置換えのカウント
          lngCount = lngCount + 1
          'どこまで置き換えたかを記録
          lngBasyo = lngHakken + lngOkikaeLen
          '状況をテキストボックスに表示
          frmSearch.txtKeikahyoji.Text = strTaisyo
          'コマンドボタンの状態を初期値に
          lngOption = 0
        Case 3  'すべて置換えの場合
          lngTaisyoLen = Len(strTaisyo)
          strTaisyo = Left$(strTaisyo, lngHakken - 1) & _
            strOkikae & Mid$(strTaisyo, lngHakken + _
            lngSearchLen, lngTaisyoLen - lngHakken + _
            lngOkikaeLen)
          lngCount = lngCount + 1
          lngBasyo = lngHakken + lngOkikaeLen
          frmSearch.txtKeikahyoji.Text = strTaisyo
          'コマンドボタンの状態は3のままだから処理を繰り返す
        Case Else
          Exit Function
      End Select
      'テキストの選択状態を初期値に
      frmSearch.txtKeikahyoji.SetFocus
      frmSearch.txtKeikahyoji.SelStart = 0
      frmSearch.txtKeikahyoji.SelLength = 0
    End If
  Loop
  lngOption = 0
  '置換え結果を代入
  fSearch = strTaisyo
  '見つからなかった場合のメッセージ
  strMsgNoFind = "検索文字が見つかりませんでした"
  If lngCount = 0 Then
    MsgBox strMsgNoFind
  End If
End Function


Private Sub cmdTugi_Click()
'次を検索
  lngOption = 1
  'クリックしたらフレームを非表示に
  fraOption.Visible = False
End Sub


Private Sub cmdOkikae_Click()
'置き換え
  lngOption = 2
  fraOption.Visible = False
End Sub


Private Sub CmdSubete_Click()
'すべて置き換え
  lngOption = 3
  fraOption.Visible = False
End Sub


Private Sub txtKeikahyoji_KeyDown _
        (KeyCode As Integer, Shift As Integer)
  txtKensaku.SetFocus
End Sub


Private Sub txtKeikahyoji_KeyPress(KeyAscii As Integer)
  'テキストボックスの内容が変更できないように
  KeyAscii = 0
  txtKensaku.SetFocus
End Sub


Private Sub cmdSearchEnd_Click()
'検索終了
  lngOption = 4 'ループ中の場合中止に
  Unload Me
  Form1.Show
End Sub


Private Sub Form_Unload(Cancel As Integer)
  cmdSearchEnd_Click
End Sub

このページのトップへ移動します。 2.


このページのトップへ移動します。 3.


このページのトップへ移動します。 4.


このページのトップへ移動します。 5.


このページのトップへ移動します。 6.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)





このページのトップへ移動します。