- ベストアンサー
VBA初心者のためのデータ検索プログラムの作成方法
- VBA初心者の方がA1からA11にデータがあり、画面のテキストボックスに入力した文字を含むセルに色を付けるプログラムを作成したいです。
- データに入力した文字を含むセルが複数あった場合、1回目の検索で色が付きますが、2回目以降の検索でエラーが発生します。
- プログラム中のflagを使用して、1度目の検索のセルのアドレスを保存し、2回目以降の検索ではそのセルの次のセルから検索を行うようにすることで、解決できるかもしれませんが、具体的な実装方法がわかりません。助けてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
userformにtextbox1、commandbutton1を作成し 以下を貼り付けて試してください 'userformへ Option Explicit '変数の宣言 Dim flag As Boolean Dim c As Range Dim d As Range '検索処理 Private Sub CommandButton1_Click() 'textbox1が未入力なら処理中止 If TextBox1.Value = "" Then Exit Sub '初めてか2回目以降で処理の分岐 If flag = False Then 初めての検索処理 Set c = Cells.Find(After:=Cells(Rows.Count, Columns.Count), What:=TextBox1.Value, LookIn:=xlValues, lookat:=xlPart, SearchOrder:=xlByColumns) c.Interior.ColorIndex = 4 初めての結果(range)を保存しておく Set d = c flag = True Else '2回目以降の検索処理 Set d = Cells.Find(After:=d, What:=TextBox1.Value, LookIn:=xlValues, lookat:=xlPart, SearchOrder:=xlByColumns) d.Interior.ColorIndex = 4 '保存しておいた結果と今回の検索結果を比較して '1周してきたと判断して終了を表示 If c.Address = d.Address Then MsgBox "検索終了" End If End Sub Private Sub TextBox1_Change() '検索値の変更で各保存していた値のリセット flag = False Set c = Nothing Set d = Nothing End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 'userform終了時にお約束の処理 Set c = Nothing Set d = Nothing End Sub 以上 参考まで うまく行ったら、質問のコードと比較してみてね 参考まで
その他の回答 (1)
- watabe007
- ベストアンサー率62% (476/760)
参考に Sub Test() Dim c As Range Dim FirstAddress As String Dim i As Long Dim myflg As Boolean 'myKey = "山" Worksheets("Sheet1").Activate With ActiveSheet.Range("A1", Cells(Rows.Count, "A").End(xlUp)) Set c = .Find(What:=myKey, LookIn:=xlValues, lookat:=xlPart, SearchOrder:=xlByColumns) If c Is Nothing Then MsgBox myKey & " は、見つかりませんでした。", 64 Exit Sub End If FirstAddress = c.Address Do If c.Interior.ColorIndex <> 4 Then c.Interior.ColorIndex = 4 myflg = True End If Set c = .FindNext(c) If FirstAddress = c.Address Then MsgBox "データは以上", 64 Exit Do ElseIf myflg Then Exit Do End If Loop End With Set c = Nothing End Sub
お礼
OKWAVEのビギナーなもので、ここにお礼が書けるとは知りませんでした。助かりました。ありがとうございます。まだVBAを勉強し始めたものです。本屋に行っても、基本ばかり書かれている本は山のようにありますが、イザこの機能はどうやって、となると殆ど役に立ちません。 そんなわけで、こんな機能はどうやって組むのか、と自問自答とコピペを繰り返しながら試行錯誤の毎日です。またネットで見かけたら質問に答えてやってください。よろしくお願いします。