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 もう一方のフォームに記入して下さい。 図のようにコントロールを貼り付けて下さい。 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. |
検索キーワード及びサンプルコードの別名(機能名) |