|
こんばんは、BOXです。
以前33399で質問し、ご回答いただいてその後丸投げの状態で
大変反省しております。FINDメソッドについて自分なりに
勉強してみました。そしてPonPonさんのコードを参考にして
下のようなコードを書いたのですがテキストボックスに入力した
文字列を部分一致検索で1個目2個目までは検索するのですが
3個目以上ある場合のコマンドボタン2を押したときのコード
が書けません。すべて検索して最初の検索した文字列と同じ
文字列をヒットした時に検索終了のメッセージボックスを
表示し終わりとしたいのです。どなたか教えて下さい。
よろしくお願いいたします。
VBAでしたいこと
テキストボックスに施設名の文字列を入力し
コマンドボタン1を押すとテキストボックスの
文字列をC6:P1000までの範囲で施設名を部分一致で検索し
そのヒットしたセルのA列コードをラベル5にB列地名をラベル6に
C列からP列のヒットした文字列をラベル7に表示し
コマンドボタン2を押と下のシート構成でいくとC1を再度ボタン2を
押とF2をと検索しC1になった時検索終了とする。
シートの構成
A B C D E F・・・ P
コード 地名 基点 施設名1 施設名2 施設名3・・・施設名13
1.1234 東京 東京駅 東京タワー 国会議事堂 東京都庁
2.1235
3.1236
・
・
100
ユーザーフォームの構成
テキストボックス コマンドボタン1
コマンドボタン2
ラベル5 ラベル6 ラベル7
考えてみたコード
Private Sub CommandButton1_Click()
Dim 最初に見つかったセル As Range
Dim 次に見つかったセル As Range
Sheets("旅費").Select
With Range("C6:P1000")
Set 最初に見つかったセル = .Find(What:=Me.TextBox1.Value, LookAt:=xlPart, SearchOrder:=xlByColumns)
If Not 最初に見つかったセル Is Nothing Then
Label5.Caption = Cells(最初に見つかったセル.Row, 1)
Label6.Caption = Cells(最初に見つかったセル.Row, 2)
Label7.Caption = Range(最初に見つかったセル.Address)
Range(最初に見つかったセル.Address).Activate
Else
MsgBox "そのような施設はありません。"
Exit Sub
End If
End With
End Sub
Private Sub CommandButton2_Click()
Sheets("旅費").Select
With Range("C6:P1000")
Set 最初に見つかったセル = .Find(What:=Me.TextBox1.Value, LookAt:=xlPart, SearchOrder:=xlByColumns)
Set 次に見つかったセル = .FindNext(最初に見つかったセル)
If Not 最初に見つかったセル Is Nothing Then
Label5.Caption = Cells(次に見つかったセル.Row, 1)
Label6.Caption = Cells(次に見つかったセル.Row, 2)
Label7.Caption = Range(次に見つかったセル.Address)
Range(次に見つかったセル.Address).Activate
ElseIf 次に見つかったセル <> 次に見つかったセル Then
Set 次に見つかったセル = .FindNext(次に見つかったセル)
Label5.Caption = Cells(次に見つかったセル.Row, 1)
Label6.Caption = Cells(次に見つかったセル.Row, 2)
Label7.Caption = Range(次に見つかったセル.Address)
Range(次に見つかったセル.Address).Activate
Else
MsgBox "そのような施設はありません。"
Exit Sub
End If
MsgBox "検索終了。この文字を含む施設はすべて検索しました。"
End With
End Sub
|
|