• 締切済み

エクセルで任意の文字を指定範囲から検索

お世話になります。 エクセルにて特定のセルに入力した文字を指定してある範囲から検索し、指定した位置に表示をさせると言った事は出来るのでしょうか? 例 シート1:A1に検索したい文字を入力 シート2:A1~A50までの行を検索 シート1:上記検索で該当する行をA2~A50に表示 こういった検索は可能なのでしょうか? Ctrl+Fやフィルタではなく、セルに入力した文字を検索するようにしたいのです。 可否のみでも、こうゆうマクロを使えば出来ると言った事でも構いません。 よろしくお願いします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

マクロで、一番初歩的にやってみる。 Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False k = 2 d = Worksheets("Sheet2").Range("a65536").End(xlUp).Row MsgBox d For i = 1 To d If Worksheets("Sheet1").Range("A1") = Worksheets("Sheet2").Cells(i, "A") Then Worksheets("Sheet1").Cells(k, "A") = i k = k + 1 End If Next i Application.EnableEvents = True End Sub イベントという概念の理解が必要で、他シート参照とかもあって 初心者には易しくは無いと思う。 ーーー 関数では作業列を使って、「imogasi方式」で沢山答えている。 Googleで「imogasi方式」で照会のこと。 例データ Sheet2 A2:C11 A列   C列 12 1 23 12 2 34 56 12 3 11 23 11 12 4 C2は =IF(A2=Sheet1!$A$1,MAX($C$1:C1)+1,"") 下方向に式を複写。 ーー Sheet1 A2に =MATCH(ROW()-1,Sheet2!$C$1:$C$100,0) 下方向に式を複写。 結果 A1以下 12 <-条件 2  <-行目 4 7 11 セルの値が文字列でも同じです。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

次のQ.Noに回答した内容の小改造ですが、お役に立てば幸いです。 Sheet1 A列は作業列(質問内容と相違していますが、データの後ろに置くことも可能ですので、ご自分で改造してください) ................A...............B ..1................1.......(株)A ..2...............2...(有)A ..3........................(株)B ..4........................C(株) ..5...............5.......A(株) ..6...............6.....AA(株) A1の式=IF(ISERROR(SEARCH(Sheet2!$A$1,B1,1)),"",ROW()) 以下下方にコピー Sheet2 A1に検索する文字を入れる ................A................. ..1...............A................. ..2.......(株)A................. ..3...(有)A................. ..4.......A(株)................. ..5.....AA(株)................. A2の式=IF(ISERROR(SMALL(Sheet1!$A:$A,ROW(A1))),"",INDEX(Sheet1!$B:$Z,SMALL(Sheet1!$A:$A,ROW(A1)),COLUMN(A1))) 以下下方に複写

  • harapeco7
  • ベストアンサー率54% (33/61)
回答No.3

>こうゆうマクロを使えば出来ると言った事でも構いません。 との事ですので、マクロの貼り付け~実行のやり方を理解していると判断し 与えられた条件通りの動きをするマクロを書いてみました。 ※実行するとSheet1のA2~A50(結果表示スペース)が削除されます。 ※テスト用のbookでテストして下さい。 ※出来るだけ解りやすく(修正しやすく)記述しましたが、不足分がありましたら再度来ます。 Sub 検索() Dim 検索文字列 As String Dim 検索結果 As Range Dim 最初のセル As String 検索文字列 = Worksheets("Sheet1").Range("A1") Set 検索結果 = Worksheets("Sheet2").Range("A1:A50").Find(検索文字列) If Not 検索結果 Is Nothing Then 最初のセル = 検索結果.Address Sheets("Sheet1").Range("A2:A50").Clear Do While Not 検索結果 Is Nothing HIT数 = HIT数 + 1 If HIT数 >= 50 Then MsgBox "検索中断 HIT数が49件を越えました。" Exit Do End If Sheets("Sheet1").Cells(HIT数 + 1, 1).Value = 検索結果.Cells.Row Set 検索結果 = Worksheets("Sheet2").Range("A1:A50").FindNext(検索結果) If 最初のセル = 検索結果.Address Then MsgBox "検索完了 HIT数:" & HIT数 Exit Do End If Loop Else MsgBox "該当セルは見つかりませんでした。" End If End Sub

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

>シート1:A1に検索したい文字を入力 >シート2:A1~A50までの行を検索  >シート1:上記検索で該当する行をA2~A50に表示 A1~A50の結果をA2~A50に表示するのは難しいので、シート2の対象も A2~A50ということで考えてみましたが、以下でいかがでしょうか? シート1のA2に以下の式を記入し、A50までオートフィル  =IF(ISERROR(FIND($A$1,Sheet2!A2)),"",Sheet2!A2) 該当しない場合は、「該当なし」などと表示する場合は、式の""を置き換えればよいです。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

検索結果をA2~A50に表示する方法は分かりませんが、 検索結果のみを表示させることは↓の方法で可能ですだと思います。 編集 → 検索 → オプション この画面でどこのセルに存在するかだけは確認できると思います。 こんな回答ではご期待に添えないような気がしますが・・・