• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:指定した文字を検索)

【Excel2003】VBAを使って指定した文字を検索する方法

このQ&Aのポイント
  • Excel2003を使ってVBAを利用して指定した文字を検索する方法について解説します。
  • 具体的な処理として、「あるセル」から見て最も近い、A列の「ある特定の文字が入っているセル」を検索しコピーし、別シートに貼り付ける方法を説明します。A列には複数の特定の文字が存在し、あるセルから最も近いセルを見つける方法を紹介します。
  • 例えば、「あるセル」をJ30とし、A列に存在する「時間」という文字を検索する場合の手順を詳しく説明します。J30から最も近いセルにある「時間」を検索し、それを別のシートのA1に貼り付ける方法です。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんばんは。 Find メソッドの SearchDirection を xlNext, xlPrevious でそれぞれ 検索する方法でもできますよ。 Sub SampleProc()   Dim r1    As Range   Dim r2    As Range   Dim vKeyword As Variant   Dim n    As Long      ' // 検索文字の問い合わせ   vKeyword = Application.InputBox("ワイルドカードが使えます", _                   Title:="検索キーワード", _                   Type:=2)   If VarType(vKeyword) = vbBoolean Then     Exit Sub   End If      ' // 前方と後方にそれぞれ検索   Set r1 = Columns("A").Find(What:=vKeyword, _                 LookIn:=xlValues, _                 LookAt:=xlWhole, _                 SearchDirection:=xlNext)   Set r2 = Columns("A").Find(What:=vKeyword, _                 SearchDirection:=xlPrevious)      ' // アクティブセルより行番号が近い方をコピーする   If r1 Is Nothing And r2 Is Nothing Then     MsgBox "Not found.", vbInformation   Else     n = ActiveCell.Row     Set r1 = IIf(Abs(n - r1.Row) <= Abs(n - r2.Row), r1, r2)     r1.Copy Destination:=Worksheets("Sheet2").Range("A1")   End If End Sub > VBAを使って文字を検索したいと思います。 仕様の提示のみで、質問点が書かれていない気がしますが...

その他の回答 (2)

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

(1)Findを用いる。 たまたま質問の内容から、FindNextは不要でわかりやすいとおもう。下記方法では、第2の発見を求める必要が無い。 (2)この小生の思い付いたロジックの特徴は 中心(質問のJ20の場合はA列の第20行。下記コードではc)から上下プラスマイナスi 行の範囲を検索し、見つからなければ、次は上下とも各1行を増やして検索する。これを順次、限度まで繰り返す。初めて見つかった行が、中心から一番近い検索語所在の行であるといえる(<-ここがポイント)。限度はA列第1行と、データ最下行である。 ーーーーー Sub test01() Dim x As Range Dim st As Integer Dim ed As Integer d = Range("A65536").End(xlUp).Row 'A列データ最下行を求む s = Range("B1") '探索語あるセル 例 時間 t = Range("C1") '中心セル 例J20 c = Worksheets("Sheet1").Range(t).Row '中心セルの行番号を求む 'MsgBox c For i = 1 To 20 '---A列探索最上セル行番号stを求める If c - i > 0 Then st = c - i Else st = 1 End If '---A列探索範囲最下セル行番号edを求める If d > c + i Then ed = c + i Else ed = d End If '-----A列探索範囲指定。st上限セル、edは下限セル行番号 Range(Cells(st, "A"), Cells(ed, "A")).Select '--A列行番号st-edの範囲で検索語sを検索 Set x = Selection.Find(What:=s, After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False) If x Is Nothing Then '検索語見つからずー>範囲を上下1行増やして検索 If st = 1 And ed = d Then '上限が第1行、下限がA列データ最下行に達しても '検索語が見つからず MsgBox "見つからず" Exit Sub '処理終了 Else GoTo p1 '範囲を上下1行広げて探索繰り返し End If Else r = x.Row '見つかった行を求める MsgBox r Exit Sub '目的達成終了 End If p1: Next i End Sub

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

こんな感じでしょうか? 一番近い位置を同じ行として、一行上、一行下、二行上、二行下・・・と探していきます。 Sub test1() Dim R As Long Dim Ofs As Long Dim i As Long Dim Pos As Long Dim word As String R = ActiveCell.Row 'どこかのセル word = InputBox("文字は?", "検索文字") Pos = 0 If InStr(Cells(R, 1), word) > 0 Then Pos = R Else For i = 1 To 65536 If R - i > 0 Then If InStr(Cells(R - i, 1), word) > 0 Then Pos = R - i Exit For End If ElseIf R + i <= 65536 Then If InStr(Cells(R + i, 1), word) > 0 Then Pos = R + i Exit For End If End If Next End If If Pos <> 0 Then Cells(Pos, 1).Copy Sheets("別シート").Range("A1") End If End Sub

関連するQ&A

専門家に質問してみよう