• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA初心者です。A1からA11にデータがあります。画面のテキストボッ)

VBA初心者のためのデータ検索プログラムの作成方法

このQ&Aのポイント
  • VBA初心者の方がA1からA11にデータがあり、画面のテキストボックスに入力した文字を含むセルに色を付けるプログラムを作成したいです。
  • データに入力した文字を含むセルが複数あった場合、1回目の検索で色が付きますが、2回目以降の検索でエラーが発生します。
  • プログラム中のflagを使用して、1度目の検索のセルのアドレスを保存し、2回目以降の検索ではそのセルの次のセルから検索を行うようにすることで、解決できるかもしれませんが、具体的な実装方法がわかりません。助けてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.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 以上 参考まで うまく行ったら、質問のコードと比較してみてね 参考まで

crtlcdpdpel
質問者

お礼

OKWAVEのビギナーなもので、ここにお礼が書けるとは知りませんでした。助かりました。ありがとうございます。まだVBAを勉強し始めたものです。本屋に行っても、基本ばかり書かれている本は山のようにありますが、イザこの機能はどうやって、となると殆ど役に立ちません。 そんなわけで、こんな機能はどうやって組むのか、と自問自答とコピペを繰り返しながら試行錯誤の毎日です。またネットで見かけたら質問に答えてやってください。よろしくお願いします。

その他の回答 (1)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

参考に 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

関連するQ&A