• ベストアンサー

ExcelVBA Findメソッドで検索のスタート位置について

fumufumu_2006の回答

回答No.4

質問と補足から、以下のような話でしょうか? 何かすると(たとえばシートの検索のコマンドボタンを押すと)、ユーザーフォームを表示する。 テキストボックスとコマンドボタンがある。 テキストを入力してコマンドボタンを押すと次々に検索する。 違ったら読み飛ばしてください。 ユーザーフォームのモジュール部に、確認用などで若干追加しましたが、補足で書いてあるプログラムをできるだけそのまま書いてみました。 ユーザーフォームにはテキストボックス(fldSummary)とコマンドボタン(CommandButton1)があるとします。 で、動いてるみたいなんですが・・・ どこか間違ってますか? Option Explicit Dim rngSearch As Range Dim rngList As Range Private Sub UserForm_Activate() With ThisWorkbook.Worksheets("Data") .Activate '後で確認のためselectするので一応Activateにしておきます Set rngSearch = .UsedRange.Columns(7).Cells(1, 1) Set rngList = ThisWorkbook.Worksheets("Data").UsedRange.Columns(7) End With End Sub Private Sub CommandButton1_Click() searchKeyword End Sub Private Sub searchKeyword() If (Me.fldSummary.Text = "") Then Exit Sub End If Dim stKeyword As String stKeyword = Me.fldSummary.Text With ThisWorkbook.Worksheets("Data") Set rngSearch = rngList.Find(stKeyword, rngSearch, , xlPart, xlByRows, xlNext) If (rngSearch Is Nothing) Then MsgBox "ありません" '無かった場合、一応黙っているのは何なので Set rngSearch = ThisWorkbook.Worksheets("Data").UsedRange.Columns(7).Cells(1, 1) 'Nothingのままだと次の検索でエラーになるので Exit Sub End If 'Call review(rngSearch.Offset(0, -4)) rngSearch.Select 'とりあえず選択部を表示 End With End Sub

tatapata
質問者

補足

fumufumu_2006さん、ありがとうございます。 ほぼ、記述してある通りです。 この通りでうまくいくはずなのですが…。 うまくいきません。 何かお心当たりがありましたら、ぜひお力添えをお願いいたします。

関連するQ&A

  • Excel VBAのFindメソッドについて

    Excel VBAを勉強中の者です。 Findメソッドで、数字の入ったF5セルからF28セルの範囲から、 1という数字の入ったセルを検索したいと思い Sub test() Dim xRange As Range Set xRange = Range("F5:F20").Find(What:=1, LookIn:=xlValues)   xRange.Select End sub としました。 しかし、このまま検索するとF6セルの12が検索されてしまいます。 他の数字では問題なく、対象の数字の先頭の数字が選択されます。 どうしてでしょうか? よろしくお願いします。

  • Findステートメントで別なブックの検索

    Findステートメントで検索した内容のある行のA列にある値をキーワードとして別なブックのA列に検索をかけてヒットしたセルの内容を元のブックの指定したセルに移すという動作をさせたいので次ののように書いてみました。 Private Sub CommandButton2_Click() Dim Yline As Long Dim No As Variant Dim c As Range Dim sh As Worksheet Dim sh_no As Integer Dim findcell As Range Dim add As String Set sh = Worksheets("ブックAの1") No = TextBox1.Text sh_no = 1 'テキストボックスに値が入っていた場合 If No <> "" Then 'Find メソッドの最低のプロパティは入れる。SearchOrder は特にいらない Set c = sh.Range("B:B").Find( _ What:=No, _ LookIn:=xlValues, _ LookAt:=xlPart, _ Searchorder:=xlByRows) '見つかった場合にのみ、値を入れる If Not c Is Nothing Then Yline = c.Row '見つかった行のA列の文字列でブックBに検索をかける add = sh.Cells(Yline, 1).Value Workbooks("B").Activate Set findcell = Workbooks("B").Worksheet(sh_no).Range("A:A").Find( _ What:=add, _ LookIn:=xlValues, _ LookAt:=xlPart, _ Searchorder:=xlByRows) '前Setステートメントからのループ検索開始 If findcell Is Nothing Then Do sh_no = sh_no + 1 If sh_no > ThisWorkbook.Worksheets.Count Then Exit Sub End If Set findcell = Workbooks("B").Worksheets.(sh_no).Range("A:A").Find( _ What:=add, _ LookIn:=xlValues, _ LookAt:=xlPart, _ Searchorder:=xlByRows) Loop While findcell Is Nothing End If End If Workbooks("A").Activate With Worksheets("Aの2")   .Cells(21, 4).Value = sh.Cells(Yline, 14).Value .Cells(20, 4).Value = sh.Cells(Yline, 15).Value .Cells(36, 4).Value = findcell End With Unload Me Else MsgBox No & " は見つかりません。", 48 End If Set sh = Nothing End Sub するとwhat:=addとしてaddが見つかるまでシート番号を増やしていくループのところでエラーがでてキーワードが見つからないと出ます。恐らくブックBを検索してくれているとは思うのです。A列に空白があるためかと思い埋めてみましたが関係ないようです。 構文エラー的なものは無いと思いますが、宜しくお願いします。

  • ExcelVBAのFind関数について質問です。

    Find関数を使用して検索を行う際に、検索対象のシートに"ヶ月"、"ヵ月"という文字が記載されていると 処理が遅くなってしまします。 解決方法をご存知の方いらっしゃいますでしょうか? 以下、読みにくいプログラムかもしれませんが、ご教授願います。 Sub ボタン1_Click() Dim value As String Dim pass As String Dim template As Workbook Dim object As Object '検索対象文字 value = "A" 'テンプレートのパス pass = "C:\template.xls" 'テンプレートを開く Set template = Workbooks.Open(pass) 'テンプレートをコピー ActiveWorkbook.Sheets.Copy 'テンプレートを閉じる template.Close saveChanges:=False With ActiveWorkbook.ActiveSheet.Range(Cells(1, 1), Cells(10000, 256)) 'テンプレートにAという文字が存在するかのチェック Set object = .Find(What:=value, LookAt:=xlPart, SearchOrder:=xlByRows) Do '存在しない場合は処理を終了 If object Is Nothing Then End '存在する場合はA→Bに置き換える Else object = Replace(object, value, "B") End If '引き続きSheet2にAという文字が存在するかのチェック Set object = .Find(What:=value, LookAt:=xlPart, SearchOrder:=xlByRows) Loop While Not object Is Nothing End With End Sub

  • エクセルVBAの連続検索

    エクセルVBAで、textbox内に入力した参加者の名前を検索しチェックを入れる作業を行いたいです(集会の受付名簿用)。findnextを使っても無限にループするか、同姓の最初の一人しか検索できずに困っています。 Dim 検索セル As Range Dim 最初のセル As String Dim 次の候補 As Range 検索対象文字 = Range("h2").Value Set 検索セル = Range("a5:B100").Find(検索対象文字) If Not 検索セル Is Nothing Then 最初のセル = 検索セル.address Do 検索セル.Select Set 次の候補 = Range("a5:b100").FindNext(after:=検索セル) Loop Until 次の候補.address = 最初のセル End If 手直しをお願いしますTT

  • エクセル マクロ 検索

    お世話になります。 範囲がA2からK221までの表があります。 検索して検索されたセルの左のセルを表示するマクロを組みたいのですが、検索する文字(数値)はE1に、検索結果はK1に表示するようにするにはどのようにしたらいいでしょうか? Sub FIND_DATA1() ' FIND_DATA1 Macro ' マクロ記録日 : 2006/9/1 ユーザー名 : ' Cells.Find(What:=Range("E1").Value, After:=ActiveCell, lookAt:=xlWhole).Activate End Sub Sub Data_Find3() Dim 対象セル As Range Dim 最初のセル番地 As String Dim 検索件数 As Long Cells.Interior.ColorIndex = xlNone If Range("E1").Value = "" Then Exit Sub End If Set 対象セル = Cells.Find(What:=Range("E1").Value, After:=ActiveCell, lookAt:=xlWhole) 最初のセル番地 = 対象セル.Address Do 対象セル.Interior.ColorIndex = 37 検索件数 = 検索件数 + 1 Set 対象セル = Cells.FindNext(対象セル) Loop While 対象セル.Address <> 最初のセル番地 MsgBox "検索件数は" & 検索件数 - 1 & " 件です" End Sub 本を見たり調べたりでここまでできたんですがこれだと検索件数、検索結果が色付きになるだけで使い勝手がいまいちです。 よろしくお願いします。

  • FIND関数について教えてください

    EXCEL VBAを使って、検索ツールを作成中です。 1,sheet1のセルA1に入力されたものをsheet2,3の特定の列から検索して、結果のすべてをsheet1 A2以下に表示する。 2,1の検索結果(A2以下)をそれぞれsheet2,3から更に検索する。  ※sheet2,3のA列からsheet1A1を検索し、同じ行のC,D列のデータをsheet1A2以下に持ってくる  ※A2以下の検索結果は複数。sheet2,3のA列からsheet1A2以下を検索し、C列から横に更なる検索結果があればそれを表示して行きたい。 まず書いたのは下記のようなもの Sub 検索() Dim FoundCell As Range, FirstCell As Range Set FoundCell = Cells("A:A") .Find(What:=sh1.range("A1").value) If FoundCell Is Nothing Then MsgBox "見つかりません" Exit Sub Else Set FirstCell = FoundCell FoundCell.Resize(1, 2).Copy Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) End If Do Set FoundCell = Cells.FindNext(FoundCell) If FoundCell.Address = FirstCell.Address Then Exit Do Else FoundCell.Resize(1, 2).Copy Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) End If Loop End Sub 検索1()として If FoundCell Is Nothing Then MsgBox "見つかりません" Exit Sub を、 If FoundCell Is Nothing Then 検索2 と表記を変えて実行したのですが、見つからなかった場合、「見つかりません」のメッセージと共に「実行エラー5」で「 Set FoundCell = Cells.FindNext(FoundCell)」が示されます。 また、A2以下という曖昧な検索セルを指定する方法が分かりません。  set str=sheet1.Cells(i,1).value というようなこともしてみたのですが、エラーになってしまいました。 なにかアイディアを教えてください。

  • マクロのFINDメソッドで質問です。

    マクロの初心者で、いつもお世話になっております。 FINDメソッドを使って別々のシートから同じIDを探す処理をしたいのですが、IDが片方にしか無い場合に検索2rangeが"nothing"になってしまい止まってしまいます。 抜粋ですか以下の様にコーディングしました。 解る方がいましたらアドバイスをお願いします。 IDはIDがセットされている列です。 シート2を上から1つずつ見ていき、 シート1から該当するIDを探す処理をします。 最終的には該当したIDの行数を記憶して、 シート1とシート2をマッチングさせたいのですが。 Dim 検索range As Range Dim 検索2range As Range ID = Sheet2.Cells(LOOP_C1, 検索列).Value Set 検索Range = Range(Sheet1.Cells(F2TOP,検索列),Sheet1.Cells(LASTRow, 検索列)) Set 検索2range = 検索Range.Find(What:=ID, LookAt:=xlWhole, SearchOrder:=xlByRows, searchformat:=True).Row ※ If 検索2range Is Nothing Then Else   検索2range.Activate End If ・ ・ ・ ※の箇所で止まってしまいます。

  • Excel VBA Findで日付だけのセルが検索できない

    日付のセルを検索するために、以下のような処理をさせていますが、日付だけのセルが検索できません。  【例】(1)は検索できますが、(2)が検索されません。    (1) 2010/03/05が誕生日    (2) 2010/03/05    (※(1)、(2)共に検索できるようにしたいと思っています。) Dim FoundCell as Variant Dim search_words as String search_words = "20??/*/" Set FoundCell = Cells.Find(what:=search_words,After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, MatchByte:=False) ※Excel2003を使用しています。

  • Find関数内にFind関数をかける場合

    エラー91が発生し、手詰まりです。 どなたかご教授お願いいたします。 Find関数でDo~lppoを行い、初期の検索結果アドレスでLoopを抜けようと思ったのですが。。 エラーしてしまいました。 Find関数内にFind関数を用いることが出来ない と目にしたのですが。 下記のようなVBAの場合 どのように対処したらいいでしょうか? また、VBA初心者のため VBA文が見づらかったり、おかしなところがあると思います。 その部分についても教えて頂けたらと思います。 Sub SAMPLE() Dim TargetDE As String '文字列型 Dim TargetNo As String '文字列型 Dim PODate As String '文字列型 Dim FoundCell As Range ' Dim FoundDate As Range Dim FoundCellNo As Long '長整数型 Dim FoundDateNo As String Dim SearchArea As Object 'オブジェクト型 Dim tar_obj(1) As Object 'オブジェクト型 Dim Addr As String '文字列型 Dim Lastrom As Long ' Dim POLEFT As Range '検索文字列入力(DE) TargetDE = Application.InputBox("Fill in a DE:??", "DE:??", Type:=2) If TargetDE = "False" Then Exit Sub '検索対象範囲 Set SearchArea = Workbooks("Sample sample.xlsx").Sheets("Sample") Set tar_obj(1) = Workbooks("INPUT FORMAT.csv").Sheets("INPUT FORMAT") '表示先をクリア tar_obj(1).Cells(1, 1).CurrentRegion.ClearContents '検索実行 Set FoundCell = SearchArea.Range("C:C").Find(What:=TargetDE, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) '検索文字列(DE)を含むセルがない場合は終了 If FoundCell Is Nothing Then Exit Sub '検索文字列入力(DE Number) TargetNo = Application.InputBox("Fill in DE nomber", "Nomber", Type:=2) If TargetNo = "False" Then Exit Sub '最初の検索結果の行数を格納 Addr = FoundCell.Address '検索文字列入力(PO Date) PODate = Application.InputBox("Fill in Sample Date", "Date", Type:=2) If PODate = "False" Then Exit Sub Do '検索Cell右横の値がTargetNoと同じ場合 If FoundCell.Offset(0, 1).Value = TargetNo Then '行番号を代入 FoundCellNo = FoundCell.Row '検索の下限値を変数に代入 F_LAST = FoundCellNo + 50 '検索実行 Set FoundDate = SearchArea.Range(SearchArea.Cells(FoundCellNo, 1), SearchArea.Cells(F_LAST, 1)).Find(What:=PODate, LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False, MatchByte:=False) '検索文字列を含むセルがない場合は終了 If FoundDate Is Nothing Then 'MsgBox "Find is mistake" '検索文字列を含むセルがある場合 Else '変数に行番号代入 FoundDateNo = FoundDate.Row If FoundDate.Offset(1, 1).Value = "" Then MsgBox "The position of the cell is not correct. Please coordinate macro. " Else POLEFT = FoundDate.Offset(1, 1) For i = 2 To 13 If FoundDate.Offset(1, i) <> 0 Then If FoundDate.Offset(1, i) <> "." Then If IsNumeric(FoundDate.Offset(1, i).Value) = True Then '表示先(INPUT FORMAT)の行数をカウントアップ cnt = cnt + 1 PORIGHT = FoundDate.Offset(1, i).Value tar_obj(1).Range("E" & cnt) = POLEFT & PORIGHT End If End If End If Next i End If End If ElseIf FoundCell.Offset(0, 1) <> TargetNo Then ' MsgBox "Find is mistake" End If '次の検索を実行 Set FoundCell = SearchArea.Range("C:C").FindNext(After:=FoundCell) Loop While Not FoundCell Is Nothing And FoundCell.Address <> Addr ' If FoundCell.Offset(0, 1) <> TargetNo Then ' MsgBox "Not Find Number" ' End If End Sub

  • VBAのfindメソッドでセルの"先頭の"特定の文字のあるセルを検索したい。

    下記に示すようなテキストがワークシート(Sheet1)に 貼り付けてあります。 (Sheet1) A1:第一条  この法律は平和の為にある。 A2:第二条  この法律は戦争反対。 A3:2  すごいぞ日本。 A4:第二条の二  がんばれ日本。 A5:一  第二条は多分最強。 これから、【先頭が】"第*条*" というセルのみを検索したくて 以下のようなFindメソッドを組みました。 Sheets(Sheet1").Columns(1).Find("第*条*") ところが、結果として抽出されるのは 第一条  この法律は平和の為にある。 第二条  この法律は戦争反対。 第二条の二  がんばれ日本。 一  第二条は多分最強。 と、セルの先頭以外に"第*条*"が存在するセルも検索してしまいます。 検索結果が 第一条  この法律は平和の為にある。 第二条  この法律は戦争反対。 第二条の二  がんばれ日本。 となるようにするには、Findメソッドをどのように 組めばよいのでしょうか? どなたがご指導をお願い致します。