| 
    
     |  | こんばんは。 
 >例えば、検索範囲には”りんご”,”りんごりら”,”りんごりらっぱ”の順番でインスタンスが入ってるとします。検索値には”り”を打ったとして、CommandButtonを押すごとに前述、”りんご”,”りんごりら”,”りんごりらっぱ”順番でActiveCellを移動してヒットするようにしたいんです。が、無理でしょうか?
 
 テキストボックスやCommandButtonがどこに配置されたコントロールなのか
 (ユーザーフォームなのか?シートなのか?)
 明確に記述するようにしましょう!!
 
 こういう記述をきっちりすることがプログラミングすることの「いろは」ですよ!!
 (だって、仕様がはっきり、きっちりしてなければコードは書けませんから・・。)
 
 ユーザーフォームで処理する例です。
 
 新規ブックにて試してください。
 
 ユーザーフォームを一つ作成してください(UserForm1)。
 このユーザーフォームには、
 テキストボックス(TextBox1) 検索文字列入力用
 コマンドボタン (CommandButton1) 検索開始ボタン
 
 のふたつコントロールを配置してください。
 
 標準モジュールに
 '===========================================================
 Option Explicit
 '===========================================================
 Sub main()
 mk_sample_data
 UserForm1.Show
 End Sub
 '===========================================================
 Sub mk_sample_data()
 Range("a1:a7").Value = [{"りんご";"りんごりら";"りんごりらっぱ";"みかん";"みかん箱";"なす";"なす焼き"}]
 End Sub
 
 
 上記のUserform1のモジュールに
 '===================================================================
 Option Explicit
 Private f_mode As Long '0検索中ではない 1検索中
 '===============================================
 Function get_findcell(Optional ByVal f_v As Variant = "", _
 Optional ByVal rng As Range = Nothing, _
 Optional ByVal alookin As XlFindLookIn = -4163, _
 Optional ByVal alookat As XlLookAt = 1, _
 Optional ByVal aso As XlSearchOrder = 1, _
 Optional ByVal asd As XlSearchDirection = 1, _
 Optional ByVal mc As Boolean = False, _
 Optional ByVal mb As Boolean = True) As Range
 '指定された値でセル範囲を検索し、該当するセルを取得する
 'input : f_v 検索する値
 '    rng 検索する範囲
 '    alookin 検索対象 xlvalues,xlformulas,xlcomments
 '    alookat: :検索方法 1-完全一致 2-部分一致
 '    aso : 検索順序 1 行 2 列
 '    asd : 検索方向 1 Xlnext 2 XlPrevious
 '    mc  : 大文字・小文字の区別 False しない True する
 '    mb  : 半角と全角を区別   True する  False しない
 'output:get_findcell 見つかったセル(見つからなかったときはNothingが返る)
 Static 検索範囲 As Range
 Static 最初に見つかったセル As Range
 Static 直前に見つかったセル As Range
 Static 検索方向 As XlSearchDirection
 If Not rng Is Nothing Then
 Set 検索範囲 = rng
 End If
 If f_v <> "" Then
 Set get_findcell = 検索範囲.Find(f_v, 検索範囲.Cells(検索範囲.Rows.Count, 検索範囲.Columns.Count), _
 alookin, alookat, aso, asd, mc, mb)
 If Not get_findcell Is Nothing Then
 Set 最初に見つかったセル = get_findcell
 Set 直前に見つかったセル = get_findcell
 検索方向 = asd
 End If
 Else
 If 検索方向 = xlNext Then
 Set get_findcell = 検索範囲.FindNext(直前に見つかったセル)
 Else
 Set get_findcell = 検索範囲.FindPrevious(直前に見つかったセル)
 End If
 If get_findcell.Address = 最初に見つかったセル.Address Then
 Set get_findcell = Nothing
 Else
 Set 直前に見つかったセル = get_findcell
 End If
 End If
 End Function
 '=========================================================
 Private Sub CommandButton1_Click()
 Dim rng As Range
 Dim ans As Range
 
 If f_mode = 0 Then
 If TextBox1.Text = "" Then Exit Sub
 Set rng = Range("a1", Cells(Rows.Count, "a").End(xlUp))
 Set ans = get_findcell(TextBox1.Text, rng, xlValues, xlPart, xlByRows, xlNext)
 Else
 Set ans = get_findcell()
 End If
 If Not ans Is Nothing Then
 ans.Select
 f_mode = 1
 CommandButton1.Caption = "次のデータ"
 Else
 MsgBox "検索終了"
 f_mode = 0
 
 CommandButton1.Caption = "検索開始"
 
 With TextBox1
 .Text = ""
 .SetFocus
 End With
 End If
 End Sub
 '=========================================================
 Private Sub UserForm_Initialize()
 CommandButton1.Caption = "検索開始"
 TextBox1.IMEMode = fmIMEModeOn
 f_mode = 0
 End Sub
 
 
 として、適当なシートをアクティブにして
 mainを実行してみてください。
 
 アクティブシートのA列にサンプルデータが作成され、
 ユーザーフォーム(UserForm1)が表示されます。
 
 テキストボックスに
 「り」と入力して、コマンドボタンをクリックしてください。
 
 「り」がある最初の単語のセルを選択します。
 
 再度、コマンドボタンをクリックしてください。
 
 次の「り」がある単語のセルを選択します。
 
 クリックすれば、単語がある限り選択を繰り返します。
 
 全ての検索がおわるとその旨のメッセージ(検索終了)が表示されます。
 
 サンプルコードとして、試してみてください。
 
 |  |