• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FIND関数について教えてください)

Excel VBAでの検索ツール作成方法について

このQ&Aのポイント
  • Excel VBAを使用して、特定の列から検索し、結果を表示する検索ツールを作成する方法について教えてください。
  • さらに、検索結果をもとに別の列からデータを取得する方法も知りたいです。
  • また、見つからなかった場合のエラーハンドリングや、曖昧な検索セルの指定方法についても教えてください。

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

  • ベストアンサー
回答No.1

通りすがりのVBAビギナーです。 初めにお断りしておきますが、質問の内容と違った答えを書いていたらすみません。 Sub 検索() __Dim FoundCell As Range, FirstCell As Range __''どのシートからどうやって実行するのかわからなかったので、Sheet1を __''Withステートメントでまとめてみました(Sheet1という名前の他のシートがあれば __''Worksheets("Sheet1")に変更して下さい __With Sheets("Sheet1") ____''Sheet1のA1が空欄だったらここで終了します ____If .Range("A1").Value = "" Then ______MsgBox "検索条件が設定されていません", vbExclamation ______Exit Sub ____End If ____''=====================ここから検索開始(Sheet2)========================= ____''ここで間違っていたポイントは↓の範囲指定がCells("A:A")となっていた所です ____''セル範囲の指定はRangeオブジェクトで行います ____Set FoundCell = Sheets("Sheet2").Range("A:A").Find _ ____________(What:=.Range("A1").Value) ____If Not FoundCell Is Nothing Then ______Set FirstCell = FoundCell ______''Cellsプロパティで最終行を取得する所ですが、Rows.Countも ______''シートオブジェクトを指定します ______FoundCell.Resize(1, 2).Copy .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0) ______Do ________Set FoundCell = Cells.FindNext(FoundCell) ________If FoundCell.Address = FirstCell.Address Then __________Exit Do ________Else __________FoundCell.Resize(1, 2).Copy .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0) ________End If ______Loop ____End If ____''======================ここから検索開始(Sheet3)========================= ____''こちらは見つからなかったらメッセージを出して処理を抜けます ____Set FoundCell = Sheets("Sheet3").Range("A:A").Find _ ____________(What:=.Range("A1").Value) ____If Not FoundCell Is Nothing Then ______Set FirstCell = FoundCell ______FoundCell.Resize(1, 2).Copy .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0) ______Do ________Set FoundCell = Cells.FindNext(FoundCell) ________If FoundCell.Address = FirstCell.Address Then __________Exit Do ________Else __________FoundCell.Resize(1, 2).Copy .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0) ________End If ______Loop ____Else ______MsgBox "見つかりませんでした", vbInformation ______Exit Sub ____End If __End With End Sub 解らない所があったり動かなかったりしたら、再度質問お願いします。 ※半角スペースが消えて見づらいので、半角スペース2個をアンダーバーに置き換えてます

sanyp
質問者

補足

ありがとうございます。 後で試してみます。 できれば、検索結果を更に検索する、Cells(i,1).valueを検索するようなコードを教えていただけるとありがたいです。

その他の回答 (1)

回答No.2

Cells(i,1).Value(例えばですが)で検索条件を行方向で複数指定したい場合は、 Sub 検索() __Dim i As Long __For i = (初めの行番号) To (終りの行番号) ''使う数値に置き換えてください ____''今回の処理(要修正) ※.Range("A1").Value ⇒ .Cells(i,1).Value __Next i End Sub みたいな感じでいいんでしょうか? ただし、そうなるとA列に全ての結果がコピーされるので見辛いと思います。 A列に検索条件を列挙して、対応した行のB列以降にその行の結果を出力していった方が分かりやすいかもしれません。 内容を正確に把握できていないので、この程度しか回答できずすみません。 追記:前回の投稿のコードですが、Find関数は引数が必要な場合がありますので、その場合適宜追加してお使いください。

sanyp
質問者

補足

やはりそれでいんですよね。元のコードが間違っていたので、エラーになったようです。 前回の回答ですが、sheet2にあってもsheet3にないと「見つかりません」となるようです。 説明が悪くて申し訳ありません。sheet2,3それぞれを検索するのですが、sheet2になかったらsheet3を探すという風にしたかったのです。 頂いたコードを少し修正したらできましたので、前回の回答をベストアンサーとさせていただきます。